底部弹出带输入dialog
来源:互联网 发布:java中des加密解密 编辑:程序博客网 时间:2024/05/01 16:30
dialog代码,基本与普通写法一样,只是加一个回调方法
package com.cn.wq.dialog;import android.app.Activity;import android.content.DialogInterface;import android.support.v7.app.AlertDialog;import android.util.Log;import android.view.Gravity;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.EditText;import android.widget.TextView;import com.cn.wq.dialog.view.ResizeLayout;/** * Created by dick on 2017/9/22. */public class DialogInputUtils { private static DialogInputUtils instance; private AlertDialog dialog; private EditText mEditText; private TextView mTvSend; private boolean isShowInput = false; private OnTalkClickListener onTalkClick; private DialogInputUtils() { } public static DialogInputUtils getInstance() { if (instance == null) { synchronized (DialogInputUtils.class) { if (instance == null) { instance = new DialogInputUtils(); } } } return instance; } public void setOnTalkClick(OnTalkClickListener onTalkClick) { this.onTalkClick = onTalkClick; } public interface OnTalkClickListener { void onTalkClick(String content); } /** * cid救援单ID * * @param activity */ public void showInputDialog(final Activity activity) { AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.Dialog_Fullscreen); final View view = LayoutInflater.from(activity).inflate(R.layout.dialog_edittext, null); builder.setView(view); builder.setCancelable(true); //设置按钮是否可以按返回键取消,false则不可以取消 //创建对话框 dialog = builder.create(); dialog.setCanceledOnTouchOutside(true); //设置弹出框失去焦点是否隐藏,即点击屏蔽其它地方是否隐藏 final Window dialogWindow = dialog.getWindow(); dialogWindow.setGravity(Gravity.BOTTOM); addListener(view); dialog.show(); //获取焦点// //设置大小 setDialog(activity); } private void setDialog(final Activity activity) { WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); lp.x = 0; lp.y = 0; lp.width = WindowManager.LayoutParams.MATCH_PARENT; final int height = (int) activity.getResources().getDimension(R.dimen.parent_list_height); lp.height = height; dialog.getWindow().setAttributes(lp); mEditText = (EditText) dialog.getWindow().findViewById(R.id.edt_text); mTvSend = (TextView) dialog.getWindow().findViewById(R.id.tv_send); mEditText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_BACK) { dialog.dismiss(); } return false; } }); mEditText.postDelayed(new Runnable() { @Override public void run() { KeyboardUtils.showSoftInput(mEditText); } }, 150); //自动弹出输入法框 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(final DialogInterface dg) { //调用系统输入法 if (isShowInput) { KeyboardUtils.toggleSoftInput(activity); } } }); mTvSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.w("input", "点击了发送"); if (DialogInputUtils.this.onTalkClick != null) { DialogInputUtils.this.onTalkClick.onTalkClick(mEditText.getText().toString()); } } }); } private void addListener(View view) { final ResizeLayout rootLayout = (ResizeLayout) view.findViewById(R.id.resize_layout); rootLayout.setListener(new ResizeLayout.Listener() { @Override public void onSoftKeyboardShown(boolean isShowing) { Log.w("input", "--------->isShowingL:" + isShowing); isShowInput = isShowing; } }); }}
2 resizeLayout 内容,由于需要监听dialog的关闭与打开,系统提供的方法很不管用,只能通过自定义方式实现,在这里我是通过dialog打开与关闭时的坐标变化,来判断dialog是打开还是关闭状态
package com.cn.wq.dialog.view;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.widget.EditText;import android.widget.LinearLayout;import com.cn.wq.dialog.R;public class ResizeLayout extends LinearLayout { private static int count = 0; private final int keyHeight; private EditText editText; private int[] position = new int[2]; private final int screenHeight; public ResizeLayout(Context context, AttributeSet attrs) { super(context, attrs); //获取屏幕高度 screenHeight = ScreenUtils.getScreenHeight(context); //阀值设置为屏幕高度的1/3 keyHeight = screenHeight / 3; Log.w("input", "screenHeight:" + screenHeight); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b);// Log.w("input " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b=" + b); if (editText == null) { editText = (EditText) this.findViewById(R.id.edt_text); } if (editText != null) { editText.getLocationOnScreen(position); Log.w("input", "\t position on screenY:" + position[1]); if (listener != null) listener.onSoftKeyboardShown(position[1] < screenHeight * 0.7); } } public interface Listener { public void onSoftKeyboardShown(boolean isShowing); } private Listener listener; public void setListener(Listener listener) { this.listener = listener; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }}
3 layout比较简单
<?xml version="1.0" encoding="utf-8"?><com.cn.wq.dialog.view.ResizeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/resize_layout" 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:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/edt_text" android:layout_width="match_parent" android:layout_height="40dp" android:layout_centerVertical="true" android:hint="说说看" android:background="@drawable/edit_bg_shape" android:textSize="15sp" android:imeOptions="actionDone" android:paddingLeft="20dp" /> <TextView android:id="@+id/tv_send" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:gravity="center" android:paddingRight="20dp" android:text="发送" android:textSize="17sp" android:textColor="@android:color/holo_green_dark" /> </RelativeLayout> </LinearLayout></com.cn.wq.dialog.view.ResizeLayout>
[传送门](http://download.csdn.net/download/wqbs369/10001740)
阅读全文
0 0
- 底部弹出带输入dialog
- dialog底部自动弹出
- android Dialog 底部弹出
- android 弹出底部dialog
- 底部弹出自定义Dialog
- 底部弹出自定义dialog
- Android底部弹出Dialog
- dialog底部弹出框
- 底部弹出全屏dialog
- 底部弹出dialog模板
- 带输入框DIalog自动弹出软键盘
- Dialog 实现底部弹出菜单
- Android自定义底部弹出Dialog
- 仿苹果底部弹出Dialog
- Dialog从底部弹出 在底部位置
- 自定义Dialog之底部弹出Dialog
- 带输入的Dialog
- 底部弹出密码输入框
- SPI学习之:极性CPOL和相位CPHA
- 国庆长假自驾游推荐路线
- ffmpeg中音频格式与解码器的对应关系
- Windows Server 2008 R2下将nginx安装成windows系统服务
- 期末考试&开学考汇报
- 底部弹出带输入dialog
- vi/vim 命令
- 无穷小落地生根在中国,让我们举杯同庆!
- java向文件中写入内容,字节流,字符流,缓冲,复制文件,设置字符编码 实例
- 棋盘问题 dfs
- 不要把爱底线放低
- NOIP2016模拟赛 运 (DP+逆元)
- Ubuntu常用软件安装
- 【JAVA自学笔记】1、自动装箱(拆箱)