Android实现可输入数据的弹出框

 更新时间:2016年01月11日 16:56:21   作者:无缘公子  
这篇文章主要为大家详细介绍了Android实现可输入数据的弹出框,文章提供了两种方式,示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

之前一篇文章,介绍了如何定义从屏幕底部弹出PopupWindow即《Android Animation实战之屏幕底部弹出PopupWindow》写完之后,突然想起之前写过自定义内容显示的弹出框,就随手写了两个实例,分享出来:

第一种实现方式:继承Dialog

1.1 线定义弹出框要显示的内容:create_user_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/create_user_dialog_view" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:background="@drawable/dialog_load_bg" 
 android:minWidth="200dp" 
 android:orientation="vertical" 
 android:padding="10dp" 
 android:paddingBottom="30dp" 
 android:paddingTop="30dp"> 
 
 <EditText 
 android:id="@+id/text_name" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:background="@drawable/edit_bg" 
 android:hint="姓名" 
 android:minHeight="45dp" 
 android:textSize="18sp" /> 
 
 <EditText 
 android:id="@+id/text_mobile" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="5dp" 
 android:background="@drawable/edit_bg" 
 android:hint="手机号" 
 android:minHeight="45dp" 
 android:textSize="18sp" /> 
 
 <EditText 
 android:id="@+id/text_info" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="5dp" 
 android:background="@drawable/edit_bg" 
 android:gravity="top|left" 
 android:hint="个性签名" 
 android:minHeight="145dp" 
 android:textSize="18sp" /> 
 
 <Button 
 android:id="@+id/btn_save_pop" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="5dp" 
 android:text="保存" /> 
 
</LinearLayout> 

 1.2 定义要弹出的Dialog

public class CreateUserDialog extends Dialog { 
 
 /** 
 * 上下文对象 * 
 */ 
 Activity context; 
 
 private Button btn_save; 
 
 public EditText text_name; 
 
 public EditText text_mobile; 
 
 public EditText text_info; 
 
 
 private View.OnClickListener mClickListener; 
 
 public CreateUserDialog(Activity context) { 
 super(context); 
 this.context = context; 
 } 
 
 public CreateUserDialog(Activity context, int theme, View.OnClickListener clickListener) { 
 super(context, theme); 
 this.context = context; 
 this.mClickListener = clickListener; 
 } 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 // 指定布局 
 this.setContentView(R.layout.create_user_dialog); 
 
 text_name = (EditText) findViewById(R.id.text_name); 
 text_mobile = (EditText) findViewById(R.id.text_mobile); 
 text_info = (EditText) findViewById(R.id.text_info); 
 
 /* 
 * 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置, 可以直接调用getWindow(),表示获得这个Activity的Window 
 * 对象,这样这可以以同样的方式改变这个Activity的属性. 
 */ 
 Window dialogWindow = this.getWindow(); 
 
 WindowManager m = context.getWindowManager(); 
 Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 
 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 
 // p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6 
 p.width = (int) (d.getWidth() * 0.8); // 宽度设置为屏幕的0.8 
 dialogWindow.setAttributes(p); 
 
 // 根据id在布局中找到控件对象 
 btn_save = (Button) findViewById(R.id.btn_save); 
 
 // 为按钮绑定点击事件监听器 
 btn_save.setOnClickListener(mClickListener); 
 
 this.setCancelable(true); 
 } 
} 

1.3 调用弹出框

public void showEditDialog(View view) { 
 createUserDialog = new CreateUserDialog(this,R.style.loading_dialog,onClickListener); 
 createUserDialog.show(); 
} 



private View.OnClickListener onClickListener = new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 
 switch (v.getId()) { 
 case R.id.btn_save: 
 
  String name = createUserDialog.text_name.getText().toString().trim(); 
  String mobile = createUserDialog.text_mobile.getText().toString().trim(); 
  String info = createUserDialog.text_info.getText().toString().trim(); 
 
  System.out.println(name+"——"+mobile+"——"+info); 
  break; 
 } 
 } 
 }; 

第二种实现方式:继承PopupWindow

2.1 定义弹出框布局文件,和1.1定义的一致

2.2 定义要弹出的PopupWindow

public class CreateUserPopWin extends PopupWindow { 
 
 private Context mContext; 
 
 private View view; 
 
 private Button btn_save_pop; 
 
 public EditText text_name; 
 
 public EditText text_mobile; 
 
 public EditText text_info; 
 
 
 public CreateUserPopWin(Activity mContext, View.OnClickListener itemsOnClick) { 
 
 this.mContext = mContext; 
 
 this.view = LayoutInflater.from(mContext).inflate(R.layout.create_user_pop, null); 
 
 text_name = (EditText) view.findViewById(R.id.text_name); 
 text_mobile = (EditText) view.findViewById(R.id.text_mobile); 
 text_info = (EditText) view.findViewById(R.id.text_info); 
 
 btn_save_pop = (Button) view.findViewById(R.id.btn_save_pop); 
 
 // 设置按钮监听 
 btn_save_pop.setOnClickListener(itemsOnClick); 
 
 // 设置外部可点击 
 this.setOutsideTouchable(true); 
 
 
 /* 设置弹出窗口特征 */ 
 // 设置视图 
 this.setContentView(this.view); 
 
 // 设置弹出窗体的宽和高 
 /* 
 * 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置, 可以直接调用getWindow(),表示获得这个Activity的Window 
 * 对象,这样这可以以同样的方式改变这个Activity的属性. 
 */ 
 Window dialogWindow = mContext.getWindow(); 
 
 WindowManager m = mContext.getWindowManager(); 
 Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 
 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 
 
 this.setHeight(RelativeLayout.LayoutParams.WRAP_CONTENT); 
 this.setWidth((int) (d.getWidth() * 0.8)); 
 
 // 设置弹出窗体可点击 
 this.setFocusable(true); 
 
 } 
} 

2.3 调用该弹框组件

public void showEditPopWin(View view) { 
 
 createUserPopWin = new CreateUserPopWin(this,onClickListener); 
 
 createUserPopWin.showAtLocation(findViewById(R.id.main_view), Gravity.CENTER, 0, 0); 
 } 


private View.OnClickListener onClickListener = new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 
 switch (v.getId()) { 
 case R.id.btn_save_pop: 
 
  String name1 = createUserPopWin.text_name.getText().toString().trim(); 
  String mobile1 = createUserPopWin.text_mobile.getText().toString().trim(); 
  String info1 = createUserPopWin.text_info.getText().toString().trim(); 
 
  System.out.println(name1+"——"+mobile1+"——"+info1); 
 
  createUserPopWin.dismiss(); 
  break; 
 } 
 } 
 }; 

以上就是本文的全部内容,希望对大家的学习Android有所帮助。

相关文章

  • Android桌面插件App Widget用法分析

    Android桌面插件App Widget用法分析

    这篇文章主要介绍了Android桌面插件App Widget用法,结合实例形式分析了桌面插件App Widget的功能、布局、创建及使用方法,需要的朋友可以参考下
    2016-08-08
  • Android入门之Toast的使用教程

    Android入门之Toast的使用教程

    Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失!非常常用!本文就来通过一个例子把Toast的使用讲透
    2022-11-11
  • Android随机生成验证码

    Android随机生成验证码

    这篇文章主要为大家详细介绍了Android随机生成验证码的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 多渠道打包详细

    Android 多渠道打包详细

    这篇文章主要介绍了Android 打包类型,主要有命令行打包、IDE 打包、编译器打包,若对此内容感兴趣的话,请继续阅读下文
    2021-09-09
  • Android使用SharedPreferences存储XML文件的实现方法

    Android使用SharedPreferences存储XML文件的实现方法

    这篇文章主要介绍了Android使用SharedPreferences存储XML文件的实现方法,实例分析了SharedPreferences类的基本初始化与文件存储相关技巧,需要的朋友可以参考下
    2016-07-07
  • Android WindowManager深层理解view绘制实现流程

    Android WindowManager深层理解view绘制实现流程

    WindowManager是Android中一个重要的Service,是全局且唯一的。WindowManager继承自ViewManager。WindowManager主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等
    2022-11-11
  • Android线程的优先级设置方法技巧

    Android线程的优先级设置方法技巧

    对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编程来说十分重要
    2016-02-02
  • Kotlin ContentProvider使用方法详解

    Kotlin ContentProvider使用方法详解

    ContentProvider内容提供者,主要用于再不同的应用程序之前实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另外一个程序的数据,同时还能保证数据的安全性
    2022-12-12
  • android开发教程之使用looper处理消息队列

    android开发教程之使用looper处理消息队列

    这篇文章主要介绍了通过HandlerThread对象来实现使用looper处理消息队列的功能,大家参考使用吧
    2014-01-01
  • android实现滑动解锁

    android实现滑动解锁

    这篇文章主要为大家详细介绍了android实现滑动解锁,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论