Android 带输入框圆角Dialog--EditDialog

来源:互联网 发布:通过网络社会治理案例 编辑:程序博客网 时间:2024/04/18 12:19

在做项目二的时候,有一个这样的需求:

带圆角的输入框Dialog

这种效果是iOS中默认的是圆角效果, 在Android中就需要自己写了, 这里拿出来作为我的第一篇正式技术博客分享给大家,随便总结一下 , 其实就是一个组合控件。废话先不多说, 直接上实现代码 :

public class EditDialog extends Dialog implements View.OnClickListener {        private View mView;        private Context mContext;        private LinearLayout mBgLl;        private TextView mTitleTv;        private EditText mMsgEt;        private Button mNegBtn;        private Button mPosBtn;        public EditDialog(Context context) {            this(context, 0, null);        }        public EditDialog(Context context, int theme, View contentView) {            super(context, theme == 0 ? R.style.MyDialogStyle : theme);            this.mView = contentView;            this.mContext = context;            if (mView == null) {                mView = View.inflate(mContext, R.layout.view_enter_edit, null);            }            init();            initView();            initData();            initListener();        }        private void init() {            this.setContentView(mView);        }        private void initView() {            mBgLl = (LinearLayout) mView.findViewById(R.id.lLayout_bg);            mTitleTv = (TextView) mView.findViewById(R.id.txt_title);            mMsgEt = (EditText) mView.findViewById(R.id.et_msg);            mNegBtn = (Button) mView.findViewById(R.id.btn_neg);            mPosBtn = (Button) mView.findViewById(R.id.btn_pos);        }        private void initData() {            //设置背景是屏幕的0.85            mBgLl.setLayoutParams(new FrameLayout.LayoutParams((int) (getMobileWidth(mContext) * 0.85), LayoutParams.WRAP_CONTENT));            //设置默认为10000            mMsgEt.setHint(String.valueOf(10000));        }        private void initListener() {            mNegBtn.setOnClickListener(this);            mPosBtn.setOnClickListener(this);        }        @Override        public void onClick(View v) {            switch (v.getId()) {            case R.id.btn_neg:  //取消,                 if(onPosNegClickListener != null) {                    String mEtValue = mMsgEt.getHint().toString().trim();                    if(!mEtValue.isEmpty()) {                        onPosNegClickListener.negCliclListener(mEtValue);                    }                }                this.dismiss();                break;            case R.id.btn_pos:  //确认                if(onPosNegClickListener != null) {                    String mEtValue = mMsgEt.getText().toString().trim();                    if(!mEtValue.isEmpty()) {    //                  if (mEtValue.length() > 8 || mEtValue.length() < 4 || Integer.parseInt(mEtValue) <= 0) {    //                      //TODO 这里处理条件    //                  }                        onPosNegClickListener.posClickListener(mEtValue);                    }                }                this.dismiss();                break;            }        }        private OnPosNegClickListener onPosNegClickListener;        public void setOnPosNegClickListener (OnPosNegClickListener onPosNegClickListener) {            this.onPosNegClickListener = onPosNegClickListener;        }        public interface OnPosNegClickListener {            void posClickListener(String value);            void negCliclListener(String value);        }        /**         * 工具类         * @param context         * @return         */        public static int getMobileWidth(Context context) {            DisplayMetrics dm = new DisplayMetrics();            ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);            int width = dm.widthPixels; // 得到宽度            return width;        }    }

这里用了一个回调方法, 对外提供, 不用过多解释, 主要说一下要实现圆角, 最主要的是MyDialogStyle这个文件, 在加一个圆角的背景, 看看里面的实现:

res/values/styles.xml

<style name="MyDialogStyle" parent="@android:style/Theme.Dialog">     <!--背景透明-->     <item name="android:windowBackground">@android:color/transparent</item>     <!--没有标题头-->     <item name="android:windowNoTitle">true</item>     <!-- 是否允许背景灰暗 -->     <item name="android:backgroundDimEnabled">true</item></style>

我试的时候只需要上面两个属性就行了, android:backgroundDimEnabled 默认是true, 如果设置成false弹出dialog的时候就背景就会不变暗!

具体用法可以在点击方法中如下调用:

EditDialog editDialog = new EditDialog(this);editDialog.show();editDialog.setOnPosNegClickListener(new EditDialog.OnPosNegClickListener() {    @Override    public void posClickListener(String value) {        Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();        mTv.setText(value);    }    @Override    public void negCliclListener(String value) {        Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();        mTv.setText(value);    }});

实现的效果如下:

这里写图片描述

ps: 希望自己能坚持下去!

自己也第一次使用git上传项目源码到github, 中间也遇到一些问题, 准备在下一篇文章中总结出来 !

点击这里下载源码

0 0
原创粉丝点击