自定义控件之Dialog
来源:互联网 发布:遮瑕 知乎 编辑:程序博客网 时间:2024/05/16 10:51
简单模仿android3.0的Dialog。
先上图。当然,我写的都是比较简单的,但是按照这种方法,各种布局都是可以实现的。
DialogView:
public class DialogView extends LinearLayout{ public static final int WIDTH = 32; private Context mContext; private LinearLayout contentView;private ImageView icon;private TextView title; private TextView ok;private TextView cancel;private ImageView img; private LayoutInflater inflater; public DialogView(Context c) {this(c, null);} public DialogView(Context c, AttributeSet a) {super(c, a); this.setBackgroundResource(R.drawable.dialog_full_holo_dark);this.setPadding(60, 50, 60, 55);this.setGravity(Gravity.CENTER_HORIZONTAL);this.setOrientation(LinearLayout.VERTICAL); mContext = c;inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //标题布局LinearLayout tLayout = new LinearLayout(c);tLayout.setOrientation(LinearLayout.HORIZONTAL);tLayout.setGravity(Gravity.CENTER_VERTICAL); //标题图片icon = new ImageView(c);tLayout.addView(icon); //标题文字title = new TextView(c);title.setPadding(10, 10, 10, 10);title.setTextColor(Color.WHITE);tLayout.addView(title); this.addView(tLayout); //标题线ImageView hr = new ImageView(c);hr.setBackgroundColor(Color.parseColor("#6698fd"));hr.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 4));this.addView(hr); //内容contentView = new LinearLayout(c);this.addView(contentView); //底部按钮布局LinearLayout bLayout = (LinearLayout)inflater.inflate(R.layout.dialog_button, null); ok = (TextView) bLayout.findViewById(R.id.dlg_ok);ok.setVisibility(View.GONE);cancel = (TextView) bLayout.findViewById(R.id.dlg_cancel);cancel.setVisibility(View.GONE);img = (ImageView) bLayout.findViewById(R.id.dlg_img);img.setVisibility(View.GONE); this.addView(bLayout);} public void setMessage(int res) {setMessage().setText(res);} public void setMessage(String text) {setMessage().setText(text);} public void setMessage(CharSequence ch) {setMessage().setText(ch);} /** * 单条消息 */private TextView setMessage() {LinearLayout layout = new LinearLayout(mContext);layout.setOrientation(LinearLayout.HORIZONTAL);layout.setGravity(Gravity.CENTER_VERTICAL);TextView tv = new TextView(mContext);tv.setPadding(5, 10, 10, 10);layout.addView(tv);addContentView(layout);return tv;} /** * 确定按钮的监听事件 * @param listener */public void setOkListener(OnClickListener listener) {ok.setVisibility(View.VISIBLE);ok.setOnClickListener(listener);updateImage();} /** * 取消按钮的监听事件 * @param listener */public void setCancelListener(OnClickListener listener) {cancel.setVisibility(View.VISIBLE);cancel.setOnClickListener(listener);updateImage();} private void updateImage() {if (ok.getVisibility() == cancel.getVisibility() && ok.getVisibility() == View.VISIBLE) {img.setVisibility(View.VISIBLE);}} public void setIcon(int res) {Drawable d = getResources().getDrawable(res); setIcon(d);} /** * 设置标题图片 * @param d */public void setIcon(Drawable d) {int width = d.getIntrinsicWidth();int height = d.getIntrinsicHeight();boolean flag = width > height;int value;//判断图片是否超过设定大小if (WIDTH < (value = flag ? width : height)) {Matrix m = new Matrix();float degrees = (float)WIDTH / (float)value;m.postScale(degrees, degrees);Bitmap bmp = ((BitmapDrawable)d).getBitmap();bmp = Bitmap.createBitmap(bmp, 0, 0, width, height, m, true); d = new BitmapDrawable(bmp);}this.icon.setImageDrawable(d);} public TextView getTitle() {return title;} public void setTitle(String text) {this.title.setText(text);} public void setTitle(CharSequence ch) {this.title.setText(ch);} public void setTitle(int res) {this.title.setText(res);} public LinearLayout getContentView() {return contentView;} public void setContentView(LinearLayout contentView) {this.contentView = contentView;} public void addContentView(View view) {this.contentView.addView(view);} public void addContentView(int res) {this.contentView.addView(inflater.inflate(res, null));} }
MyDialog:
public class MyDialog extends Activity implements OnClickListener{ public static final int BTN1 = R.id.btn1;public static final int BTN2 = R.id.btn2;public static final int BTN3 = R.id.btn3;public static final int BTN4 = R.id.btn4; private Button mBtn1, mBtn2, mBtn3, mBtn4; private Dialog mDialog;private DialogView mDialogView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); mDialog = new Dialog(this, R.style.FullHeightDialog); } private void init() { mBtn1 = (Button) findViewById(BTN1); mBtn2 = (Button) findViewById(BTN2); mBtn3 = (Button) findViewById(BTN3); mBtn4 = (Button) findViewById(BTN4); mBtn1.setOnClickListener(this); mBtn2.setOnClickListener(this); mBtn3.setOnClickListener(this); mBtn4.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); switch(id) { case BTN1: showDialogByValue(BTN1); break; case BTN2: showDialogByValue(BTN2); break; case BTN3: showDialogByValue(BTN3); break; case BTN4: showDialogByValue(BTN4); break; } } private void showDialogByValue(int value) { mDialogView = new DialogView(this); mDialogView.setTitle(getString(R.string.title_text));mDialogView.setIcon(R.drawable.ic_refresh_holo_dark); switch(value) { case BTN1: mDialogView.setMessage(getString(R.string.message_text)); break; case BTN2: mDialogView.setMessage(getString(R.string.message_text)); mDialogView.setOkListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyDialog.this, getString(R.string.dlg_ok), Toast.LENGTH_LONG).show(); mDialog.dismiss(); } }); break; case BTN3: mDialogView.setMessage(getString(R.string.message_text)); mDialogView.setOkListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyDialog.this, getString(R.string.dlg_ok), Toast.LENGTH_LONG).show(); mDialog.dismiss(); } }); mDialogView.setCancelListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyDialog.this, getString(R.string.dlg_cancel), Toast.LENGTH_LONG).show(); mDialog.dismiss(); } }); break; case BTN4: ListView lv = new ListView(this); ArrayList<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); for (int i = 0; i < 10; i++) {HashMap<String, Object> map = new HashMap<String, Object>();map.put("key", "num " + i);list.add(map);} SimpleAdapter adapter = new SimpleAdapter(this, list, android.R.layout.simple_list_item_1, new String[]{"key"}, new int[]{android.R.id.text1}); lv.setAdapter(adapter); mDialogView.addContentView(lv); break; } mDialog.setContentView(mDialogView); mDialog.show(); } }
FullHeightDialog:
<resources><style name="FullHeightDialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item><!--边框--> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/filled_box</item><!-- --> </style></resources>
- 自定义控件之Dialog
- 自定义控件实践之Dialog
- 提示控件之自定义Dialog
- android自定义控件之Dialog详解
- Android-自定义View之重写控件(自定义Dialog)
- Android-自定义View之重写控件(自定义Dialog)
- 自定义dialog控件
- Android自定义控件-dialog
- Android控件之Dialog(two)列表与自定义弹窗
- 【android控件】dialog自定义布局
- 自定义dialog对话框中的控件
- Dialog中获取自定义控件
- 自定义控件(Dialog篇)
- 微信小程序自定义控件--dialog
- 常用控件之dialog
- android之自定义dialog
- Android之自定义dialog
- Android之自定义dialog
- 2011-07-27 —— 杂记 —— SetEvent 和 PulseEvent 的区别
- __asm____volatile__GCC的内嵌汇编语法AT&T汇编语言语法
- android软键盘的使用
- SQL Server 2005 学习笔记之触发器简介[转]
- 数据库范式那些事[转]
- 自定义控件之Dialog
- 数据库相关知识整理
- 使用PowerDesigner 设计SQL Server 数据库
- 2011-07-27 —— 杂记 —— 包含到 SOURCE 中的文件路径查找
- T-SQL 常用排名函数
- Java多线程
- Android自定义对话框
- Shell编程基础(1)
- Image控件显示图片