300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android使用Dialog实现贴键盘输入框(类似微博评论)

Android使用Dialog实现贴键盘输入框(类似微博评论)

时间:2024-03-09 15:54:13

相关推荐

Android使用Dialog实现贴键盘输入框(类似微博评论)

效果图

实现输入框跟随键盘移动需要在清单文件中给activity设置一个属性

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

创建类继承Dialog

输入布局文件自己定义即可

public class InputDialogUtils extends Dialog {private Context mContext;//上下文对象private EditText editText;//输入框对象private InputDialogListener listener;//监听回调public InputDialogUtils(@NonNull Context context) {super(context);this.mContext = context;initDialog();}public InputDialogUtils(@NonNull Context context, int themeResId) {super(context, themeResId);this.mContext = context;initDialog();}protected InputDialogUtils(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {super(context, cancelable, cancelListener);this.mContext = context;initDialog();}private void initDialog() {View view = LinearLayout.inflate(mContext, R.layout.pop_view_session_input, null);setContentView(view);//输入框editText = view.findViewById(R.id.sessionInputEd);Window window = getWindow();window.setGravity(Gravity.BOTTOM);//这里的动画效果自己创建window.setWindowAnimations(R.style.BottomDialog_Animation);//添加发送点击事件view.findViewById(R.id.sessionSendTxt).setOnClickListener(new ClickUtils.OnDebouncingClickListener(Config.IS_GLOBAL_CLICK, Config.MIN_CLICK_DELAY_TIME) {@Overridepublic void onDebouncingClick(View v) {if (listener != null) {listener.getInputTxt(editText);editText.setText("");}}});//添加放大点击事件view.findViewById(R.id.sessionInputBigImg).setOnClickListener(new ClickUtils.OnDebouncingClickListener(Config.IS_GLOBAL_CLICK, Config.MIN_CLICK_DELAY_TIME) {@Overridepublic void onDebouncingClick(View v) {listener.onCancel(editText);}});setCancelable(true);show();//保证自定义得布局文件充满屏幕宽度WindowManager.LayoutParams lp = getWindow().getAttributes();lp.width = (int) (ScreenUtils.getScreenWidth()); //设置宽度getWindow().setAttributes(lp);}}

接下来重写隐藏显示方法,进行逻辑与回显示键盘操作

@Overridepublic void dismiss() {KeyboardUtils.hideSoftInput(editText);//与键盘解绑editText.setFocusable(false);editText.setShowSoftInputOnFocus(false);editText.setFocusableInTouchMode(false);editText.requestFocus();super.dismiss();}@Overridepublic void show() {//显示键盘KeyboardUtils.showSoftInput();//与键盘绑定editText.setFocusable(true);editText.setShowSoftInputOnFocus(true);editText.setFocusableInTouchMode(true);editText.requestFocus();super.show();}

键盘回收方法

public static void hideSoftInput(@NonNull final View view) {InputMethodManager imm =(InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm == null) return;imm.hideSoftInputFromWindow(view.getWindowToken(), 0);}

键盘显示方法

public static void showSoftInput() {InputMethodManager imm = (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm == null) {return;}imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);}

style里面的代码

<!-- dialog有遮罩 --><style name="BottomDialog2" parent="@android:style/Theme.Holo.Dialog"><item name="android:windowFrame">@null</item><!--边框--><item name="android:windowIsFloating">true</item><!--是否浮现在activity之上--><item name="android:windowIsTranslucent">true</item><!--半透明--><item name="android:windowNoTitle">true</item><!--无标题--><item name="android:windowBackground">@color/colorTransparent</item><!--背景透明--><item name="android:backgroundDimEnabled">true</item><!--模糊--></style>

Activity使用方法

if (inputDialogUtils == null) {inputDialogUtils = new InputDialogUtils(this, R.style.BottomDialog2);} else {inputDialogUtils.show();}inputDialogUtils.setListener(new InputDialogUtils.InputDialogListener() {@Overridepublic void onConfirm(int type) {}@Overridepublic void onCancel(EditText editText) {inputDialogUtils.cancel();}@Overridepublic void getInputTxt(EditText editText) {ToastUtils.showShort(editText.getText().toString());inputDialogUtils.dismiss();}});

以上为开发时的需求,如有问题,欢迎各位大佬指正。

开发与学习并进。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。