android中AlertDialog包含EditText时弹出键盘(dia和软键盘同时弹出)

来源:互联网 发布:美国人性格 知乎 编辑:程序博客网 时间:2024/05/17 22:43

原文

实现的关键之处就是给AlertDialog添加一个显示监听器,显示的时候将键盘显示出来。

主程序:

[java] view plain copy
  1. package com.example.alertdialog;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.content.Context;  
  6. import android.content.DialogInterface;  
  7. import android.content.DialogInterface.OnShowListener;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.inputmethod.InputMethodManager;  
  11. import android.widget.EditText;  
  12. import android.widget.Toast;  
  13.   
  14. public class MainActivity extends Activity {  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.     }  
  21.       
  22.     public void onClick(View v){  
  23.         if(v.getId() == R.id.btn_show_dialog){  
  24.             showDialog(this);  
  25.         }  
  26.     }  
  27.       
  28.     public void showDialog(final Context context){  
  29.         AlertDialog.Builder dialog = new AlertDialog.Builder(context);  
  30.         dialog.setTitle("请输入验证码");  
  31.           
  32.         final EditText et = new EditText(context);  
  33.         et.setHint("in put your confirm code");  
  34.           
  35.         dialog.setView(et);//给对话框添加一个EditText输入文本框  
  36.           
  37.         //给对话框添加一个确定按钮,同样的方法可以添加一个取消按钮  
  38.         dialog.setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  39.             @Override  
  40.             public void onClick(DialogInterface arg0, int arg1) {  
  41.                 Toast.makeText(context, "提交验证码……"3000).show();  
  42.             }  
  43.         });  
  44.           
  45.         //下面是弹出键盘的关键处  
  46.         AlertDialog tempDialog = dialog.create();  
  47.         tempDialog.setView(et, 0000);  
  48.           
  49.         tempDialog.setOnShowListener(new OnShowListener() {  
  50.             public void onShow(DialogInterface dialog) {  
  51.                 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  52.                 imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);  
  53.             }  
  54.         });   
  55.           
  56.         tempDialog.show();        
  57.     }  
  58.   
  59. }  
布局文件:

[html] view plain copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical"  
  6.     >  
  7.   
  8.     <TextView  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="弹出对话框包含EditText时自动显示键盘" />  
  12.     <Button  
  13.         android:id="@+id/btn_show_dialog"   
  14.         android:text="输入验证码"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_gravity="center"  
  18.         android:onClick="onClick"  
  19.         />  
  20.   
  21. </LinearLayout>  

运行之后点击按钮则弹出对话框,同时弹出键盘。


上面的对话框中的控件简单,所以用java代码实现的布局,如果控件较多,需要用xml进行布局,这时解决办法可以参考下面的文章

http://www.cuiweiyou.com/671.html

关键之处是用View alertDialogView = View.inflate(HomeActivity.this, R.layout.自定义布局, null);加载自定义的对话框布局文件,然后上文中的

[java] view plain copy
  1. AlertDialog tempDialog = dialog.create();  
  2.         tempDialog.setView(et, 0000);  
tempDialog传入自定义布局的view对象,即上面的alertDialogView
阅读全文
0 0
原创粉丝点击