Android 仿今日头条评论时键盘自动弹出的效果
来源:互联网 发布:迅雷linux 编辑:程序博客网 时间:2024/06/01 09:19
Android 仿今日头条评论时键盘自动弹出的效果:当点击评论时,弹出对话框,同时弹出软键盘,当点击返回键时,将对话框关闭,不只是关闭软键盘。
效果图:
对这个对话框设置一个style效果:
<style name="inputDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@color/dialog_bg</item>
<!--背景-->
<item name="android:windowFrame">@null</item>
<!--设置无边框-->
<item name="android:windowNoTitle">true</item>
<!-- 无标题 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 模糊 -->
<item name="android:windowSoftInputMode">stateAlwaysVisible</item>
<!--显示软件盘-->
</style>
并设置Dialog的监听返回键事件,不然默认是隐藏软键盘:
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.getRepeatCount() == 0) dialog.cancel(); return false; } });
做完以上两步,就可以实现与今日头条评论一样的效果了。
附上源码:
package com.gdjw.qmcg.dialog;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.view.Gravity;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.ImageButton;import android.widget.TextView;import com.gdjw.qmcg.R;import com.gdjw.qmcg.tools.DrawableUtil;import butterknife.Bind;import butterknife.ButterKnife;/** * Created by WW on 2017/2/23. * 评论对话框 */public class CommentDialog extends Dialog implements View.OnClickListener { @Bind(R.id.tv_commit) TextView tv_commit;//提交 @Bind(R.id.et_comment) EditText et_comment;//评论内容 @Bind(R.id.tv_location) TextView tv_location;//定位 @Bind(R.id.view_line) View view_line;//竖线 @Bind(R.id.ib_delete) ImageButton ib_delete;//删除按钮 @Bind(R.id.cb_anonymous) CheckBox cb_anonymous;//匿名 private Context context; private OnCommitListener listener; public CommentDialog(Context context) { this(context, R.style.inputDialog); this.context = context; } public CommentDialog(Context context, int themeResId) { super(context, themeResId); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.comment_dialog_layout); ButterKnife.bind(this); initListener(); } private void initListener() { //设置显示对话框时的返回键的监听 this.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.getRepeatCount() == 0) CommentDialog.this.cancel(); return false; } }); //设置EditText内容改变的监听 et_comment.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!TextUtils.isEmpty(s)) { tv_commit.setBackgroundDrawable( DrawableUtil.getImageDrawable(context, R.drawable.comment_dialog_btn_process_shape)); tv_commit.setClickable(true); } else { tv_commit.setBackgroundDrawable( DrawableUtil.getImageDrawable(context, R.drawable.comment_dialog_btn_normal_shape)); tv_commit.setClickable(false); } } @Override public void afterTextChanged(Editable s) { } }); //匿名 cb_anonymous.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (null != listener) { listener.onAnonymousChecked(buttonView, isChecked); } } }); tv_commit.setOnClickListener(this);//提交 tv_location.setOnClickListener(this);//定位 ib_delete.setOnClickListener(this);//删除 } public void setOnCommitListener(OnCommitListener listener) { this.listener = listener; } public interface OnCommitListener { void onCommit(EditText et, View v);//提交数据 void onGetLocation();//定位 void onDeleteLocation();//删除定位 void onAnonymousChecked(CompoundButton buttonView, boolean isChecked); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_commit: if (null != listener) { listener.onCommit(et_comment, v); } break; case R.id.tv_location: if (null != listener) { listener.onGetLocation(); } break; case R.id.ib_delete: if (null != listener) { listener.onDeleteLocation(); } break; } } public void setLocationState(boolean state, String str) { if (state) {//定位状态 tv_location.setCompoundDrawables(DrawableUtil. setDrawableLeft(context, R.mipmap.icon_location_bg_pressed), null, null, null); view_line.setVisibility(View.VISIBLE); ib_delete.setVisibility(View.VISIBLE); tv_location.setText(str); } else { //设置drawableLeft tv_location.setCompoundDrawables(DrawableUtil. setDrawableLeft(context, R.mipmap.icon_location_bg), null, null, null); view_line.setVisibility(View.GONE); ib_delete.setVisibility(View.GONE); tv_location.setText("点击获取位置"); } }}
布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <View android:layout_width="0dp" android:layout_height="1px" android:layout_weight="1" /> <TextView android:id="@+id/tv_commit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@drawable/comment_dialog_btn_normal_shape" android:clickable="false" android:text="发 表" android:textColor="@color/white" android:textSize="15dp" /> </LinearLayout> <EditText android:id="@+id/et_comment" android:layout_width="match_parent" android:layout_height="110dp" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:background="@drawable/comment_dialog_et_selector" android:gravity="left|top" android:hint="请输入评论内容" android:inputType="textMultiLine" android:textColor="@android:color/black" android:textColorHint="@color/colorGray_999" android:textCursorDrawable="@drawable/comment_dialog_et_cursor_shape" android:textSize="14sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/comment_location_bg" android:orientation="horizontal"> <TextView android:id="@+id/tv_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="10dp" android:clickable="true" android:drawableLeft="@mipmap/icon_location_bg" android:drawablePadding="3dp" android:gravity="center_vertical" android:paddingBottom="5dp" android:paddingTop="5dp" android:singleLine="true" android:text="点击获取位置" android:textColor="@color/black_2b" android:textSize="12sp" /> <View android:id="@+id/view_line" android:layout_width="1dp" android:layout_height="match_parent" android:layout_marginLeft="3dp" android:background="@color/colorGray_999" android:visibility="gone" /> <ImageButton android:id="@+id/ib_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="5dp" android:background="@mipmap/icon_red_delete" android:visibility="gone" /> </LinearLayout> <CheckBox android:id="@+id/cb_anonymous" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:button="@null" android:checked="false" android:clickable="true" android:drawableLeft="@drawable/cb_anonymity_bg_selector" android:focusable="true" android:gravity="center_vertical" android:text="匿名" android:textColor="@color/colorGray_666" android:textSize="14sp" /> </RelativeLayout></LinearLayout>
最后还要在清单文件对应的Activity上加上:
android:windowSoftInputMode="adjustPan"
阅读全文
1 0
- Android 仿今日头条评论时键盘自动弹出的效果
- 仿今日头条滑动评论效果
- Android-仿今日头条评论
- 【Android】仿今日头条简单的刷新效果
- css+html仿今日头条的评论框动画效果
- Android 仿今日头条评论输入框
- Android之仿今日头条标题栏效果
- Android之仿今日头条顶部导航栏效果
- Android之仿今日头条顶部导航栏效果
- Android 仿今日头条首页标题栏效果
- Android之仿今日头条顶部导航栏效果
- Android 仿今日头条首页标题栏效果
- Android之仿今日头条顶部导航栏效果
- Android之仿今日头条标题栏效果
- Android ViewPagerIndicator仿今日头条标题栏效果(一)
- Android ViewPagerIndicator仿今日头条标题栏效果(二)
- 仿今日头条的滚动指示器的效果
- 仿今日头条顶部导航效果
- js 读取本地图片进行预览,上传服务器
- poj dfs相关之2965 The Pilots Brothers' refrigerator
- 第三方控件Banner实现轮播(活数据和死数据)
- 自动渗透测试工具集APT2
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- Android 仿今日头条评论时键盘自动弹出的效果
- UCOSIII-中断
- MySQL锁系列(七)之 锁算法详解
- Java 8 新特性总结
- Android开发集成科大讯飞语音识别
- 处理限制
- 委托和事件的区别
- 程序员的核心竞争力
- 用GitHub Issue取代多说,是不是很厉害?