Android 带输入框圆角Dialog--EditDialog
2016-01-20 17:51
615 查看
在做项目二的时候,有一个这样的需求:
这种效果是iOS中默认的是圆角效果, 在Android中就需要自己写了, 这里拿出来作为我的第一篇正式技术博客分享给大家,随便总结一下 , 其实就是一个组合控件。废话先不多说, 直接上实现代码 :
这里用了一个回调方法, 对外提供, 不用过多解释, 主要说一下要实现圆角, 最主要的是MyDialogStyle这个文件, 在加一个圆角的背景, 看看里面的实现:
res/values/styles.xml
我试的时候只需要上面两个属性就行了, android:backgroundDimEnabled 默认是true, 如果设置成false弹出dialog的时候就背景就会不变暗!
具体用法可以在点击方法中如下调用:
实现的效果如下:
ps: 希望自己能坚持下去!
自己也第一次使用git上传项目源码到github, 中间也遇到一些问题, 准备在下一篇文章中总结出来 !
点击这里下载源码
这种效果是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, 中间也遇到一些问题, 准备在下一篇文章中总结出来 !
点击这里下载源码
相关文章推荐
- Android 讲解:通知栏
- android权重的巧妙运用
- Android开发中,有哪些让您觉得相见恨晚的方法、类或接口
- Android换肤之——Theme换肤
- view 的滑动冲突
- Android WebView 中 addJavascriptInterface 接口无效问题
- Android版本对应的 API Level
- Android画图之抗锯齿
- Android 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- android 把控件放在屏幕任意位置
- 使用Android Studio新建Project并建立多个module
- Android Studio 简单介绍和使用问题小结
- android中初始化listview问题1
- 框架模式 MVC 在Android中的使用
- Android动画学习笔记-Android Animation
- 【Android基础学习】Android设置Activity背景色透明
- Android Studio 打包时取消打某一个jar包
- android 省市县地址选择器
- Android开发笔记(五十四)数据共享接口ContentProvider
- Android-自定义PopupWindow