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

这种效果是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;        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110

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

res/values/styles.xml

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

我试的时候只需要上面两个属性就行了, 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);    }});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

实现的效果如下:

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

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

点击这里下载源码

更多相关文章

  1. Android(安卓)中TabLayout自定义选择背景滑块的实例代码
  2. android 源码下载及编译
  3. Android源码分析-全面理解Context
  4. Android(安卓)PopupWindow使用,轻松实现微博主界面(二)
  5. 在Android(安卓)Studio中为jar添加source源码
  6. Dalvik虚拟机加载类的机制
  7. Android(安卓)ListView自定义和选中效果
  8. Android平台源码下载以及编译--ubuntu 11.04
  9. 开始: 其实对Android我只是略知皮毛中的皮毛,但是为什么会突然想来

随机推荐

  1. 关于Android的post,get、cookie网络获取的
  2. windows10 环境下编译 Android(安卓)Pjsi
  3. Android模拟器访问Tomcat和IIS7
  4. [Android]获取其他应用的logcat
  5. Android 手势的识别和控制 GestureDeteco
  6. 4.0后configChanges失效的解决
  7. Android(安卓)上成功实现了蓝牙的一些Pro
  8. android proc 进程信息解析
  9. iOS 与 Android 生命周期对比
  10. 单项选择RadioButton和多项选择CheckBox