自定义控件之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> 


 

原创粉丝点击