zoukankan      html  css  js  c++  java
  • Android 自定义界面的弹出框(可输入数据)

        上午写了一篇博文,介绍了如何定义从屏幕底部弹出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;
                }
            }
        };


    源码下载地址(免费):http://download.csdn.net/detail/zuiwuyuan/9075977
  • 相关阅读:
    servlet多线程同步问题
    servlet之request
    servlet方法
    非静态内部类不能有静态成员
    接口与抽象类的区别
    枚举
    Install CUDA 6.0 on Ubuntu 14.04 LTS
    Introduction to Deep Learning Algorithms
    codeblocks 使用汇总
    矩阵奇异值分解(SVD)及其应用
  • 原文地址:https://www.cnblogs.com/hehe520/p/6329974.html
Copyright © 2011-2022 走看看