转载地址:http://blog.csdn.net/lancees/article/details/7903745
UI系列教程第五课:自定义单选多选对话框的实现
在Android的应用中,常常会用到单选和多选对话框
最简单的方式是直接使用系统自带的对话框
不过有时候出于对应用程序整体风格的考虑
会用到自定义的对话框
说到自定义对话框,无非就是两种实现方式
一种是自定义dialog,另一种就是popwindow
二者皆是设置自定义布局然后再进行一些属性设置
这里包括对话框本身的设置以及对内部控件的监听设置
本文就以常用的单选多选对话框为例来讲解其实现
先来看效果图:
再看工程代码结构:
看ACTIVITY里的调用
- public class CustomDialogActivity extends Activity implements OnClickListener{
- private View mRootView;
- private Button mBtn1;
- private Button mBtn2;
- private Button mBtn3;
- private Button mBtn4;
- private SingleChoicePopWindow mSingleChoicePopWindow;
- private MultiChoicePopWindow mMultiChoicePopWindow;
- private SingleChoiceDialog mSingleChoiceDialog;
- private MultiChoicDialog mMultiChoicDialog;
- private List<String> mSingleDataList;
- private List<String> mMultiDataList;
- private Context mContext;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mContext = this;
- initView();
- initData();
- }
- public void initView()
- {
- mBtn1 = (Button) findViewById(R.id.button1);
- mBtn1.setOnClickListener(this);
- mBtn2 = (Button) findViewById(R.id.button2);
- mBtn2.setOnClickListener(this);
- mBtn3 = (Button) findViewById(R.id.button3);
- mBtn3.setOnClickListener(this);
- mBtn4 = (Button) findViewById(R.id.button4);
- mBtn4.setOnClickListener(this);
- mRootView = findViewById(R.id.rootView);
- }
- private final static int COUNT = 3;
- public void initData()
- {
- mSingleDataList = new ArrayList<String>();
- mMultiDataList = new ArrayList<String>();
- boolean booleans[] = new boolean[COUNT * 5];
- for(int i = 0; i < COUNT; i++)
- {
- String string1 = "geniuseoe2012 -->" + i;
- mSingleDataList.add(string1);
- }
- for(int i = 0; i < COUNT * 2; i++)
- {
- String string2 = "talent -->" + i;
- mMultiDataList.add(string2);
- }
- initPopWindow(booleans);
- initDialog(booleans);
- }
- public void initPopWindow(boolean []booleans)
- {
- mSingleChoicePopWindow = new SingleChoicePopWindow(this, mRootView, mSingleDataList);
- mSingleChoicePopWindow.setTitle("genius single title");
- mSingleChoicePopWindow.setOnOKButtonListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int selItem = mSingleChoicePopWindow.getSelectItem();
- Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();
- }
- });
- mMultiChoicePopWindow = new MultiChoicePopWindow(this, mRootView, mMultiDataList, booleans);
- mMultiChoicePopWindow.setTitle("genius multi title");
- mMultiChoicePopWindow.setOnOKButtonListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- boolean []selItems = mMultiChoicePopWindow.getSelectItem();
- int size = selItems.length;
- StringBuffer stringBuffer = new StringBuffer();
- for(int i = 0; i < size; i++)
- {
- if (selItems[i])
- {
- stringBuffer.append(i + " ");
- }
- }
- Toast.makeText(mContext, "selItems = " + stringBuffer.toString(), Toast.LENGTH_SHORT).show();
- }
- });
- }
- public void initDialog(boolean []booleans)
- {
- mSingleChoiceDialog = new SingleChoiceDialog(this, mSingleDataList);
- mSingleChoiceDialog.setTitle("genius single title");
- mSingleChoiceDialog.setOnOKButtonListener(new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- int selItem = mSingleChoiceDialog.getSelectItem();
- Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();
- }
- });
- mMultiChoicDialog = new MultiChoicDialog(this, mMultiDataList, booleans);
- mMultiChoicDialog.setTitle("genius multi title");
- mMultiChoicDialog.setOnOKButtonListener(new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // TODO Auto-generated method stub
- boolean []selItems = mMultiChoicDialog.getSelectItem();
- int size = selItems.length;
- StringBuffer stringBuffer = new StringBuffer();
- for(int i = 0; i < size; i++)
- {
- if (selItems[i])
- {
- stringBuffer.append(i + " ");
- }
- }
- Toast.makeText(mContext, "selItems = " + stringBuffer.toString(), Toast.LENGTH_SHORT).show();
- }
- });
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- switch(v.getId())
- {
- case R.id.button1:
- showSingleChoiceWindow();
- break;
- case R.id.button2:
- showMultiChoiceWindow();
- break;
- case R.id.button3:
- showSingleChoiceDialog();
- break;
- case R.id.button4:
- showMultiChoiceDialog();
- break;
- }
- }
- public void showSingleChoiceWindow()
- {
- mSingleChoicePopWindow.show(true);
- }
- public void showMultiChoiceWindow()
- {
- mMultiChoicePopWindow.show(true);
- }
- public void showSingleChoiceDialog()
- {
- mSingleChoiceDialog.show();
- }
- public void showMultiChoiceDialog()
- {
- mMultiChoicDialog.show();
- }
- }
以单选popwindow为例,其调用方式如下:
- mSingleChoicePopWindow = new SingleChoicePopWindow(this, mRootView, mSingleDataList);
- mSingleChoicePopWindow.setTitle("genius single title");
- mSingleChoicePopWindow.setOnOKButtonListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int selItem = mSingleChoicePopWindow.getSelectItem();
- Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();
- }
- });
1.初始化对象
2.设置标题
3.添加按钮监听
最后在监听回调里通过getSelectItem方法获取选择值即可得到结果值,简洁易用
大家可直接拷贝到项目里再根据具体情况做细微调整即可
不过不知道为什么dialog始终无法填充全屏,所以只好去掉布局的背景色好与周围的暗色融为一体
附上链接工程:
http://download.csdn.net/detail/geniuseoe2012/4522431