Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现

转载地址:http://blog.csdn.net/lancees/article/details/7903745


UI系列教程第五课:自定义单选多选对话框的实现

在Android的应用中,常常会用到单选和多选对话框

最简单的方式是直接使用系统自带的对话框

不过有时候出于对应用程序整体风格的考虑

会用到自定义的对话框

说到自定义对话框,无非就是两种实现方式

一种是自定义dialog,另一种就是popwindow

二者皆是设置自定义布局然后再进行一些属性设置

这里包括对话框本身的设置以及对内部控件的监听设置

本文就以常用的单选多选对话框为例来讲解其实现

先来看效果图:

                                                   

 

                                                   

 

再看工程代码结构:

 

看ACTIVITY里的调用

[java]  view plain copy
  1. public class CustomDialogActivity extends Activity implements OnClickListener{  
  2.   
  3.       
  4.     private View mRootView;  
  5.     private Button mBtn1;  
  6.     private Button mBtn2;  
  7.     private Button mBtn3;  
  8.     private Button mBtn4;  
  9.       
  10.     private SingleChoicePopWindow mSingleChoicePopWindow;  
  11.     private MultiChoicePopWindow mMultiChoicePopWindow;  
  12.     private SingleChoiceDialog mSingleChoiceDialog;  
  13.     private MultiChoicDialog mMultiChoicDialog;  
  14.       
  15.       
  16.     private List<String> mSingleDataList;  
  17.     private List<String> mMultiDataList;  
  18.       
  19.     private Context mContext;  
  20.       
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.main);  
  24.           
  25.         mContext = this;  
  26.           
  27.         initView();  
  28.           
  29.         initData();  
  30.     }  
  31.   
  32.       
  33.     public void initView()  
  34.     {  
  35.         mBtn1 = (Button) findViewById(R.id.button1);  
  36.         mBtn1.setOnClickListener(this);  
  37.           
  38.         mBtn2 = (Button) findViewById(R.id.button2);  
  39.         mBtn2.setOnClickListener(this);  
  40.           
  41.         mBtn3 = (Button) findViewById(R.id.button3);  
  42.         mBtn3.setOnClickListener(this);  
  43.           
  44.         mBtn4 = (Button) findViewById(R.id.button4);  
  45.         mBtn4.setOnClickListener(this);  
  46.           
  47.           
  48.         mRootView = findViewById(R.id.rootView);  
  49.     }  
  50.       
  51.     private final static int COUNT = 3;  
  52.       
  53.     public void initData()  
  54.     {  
  55.         mSingleDataList = new ArrayList<String>();  
  56.         mMultiDataList = new ArrayList<String>();  
  57.         boolean booleans[] = new boolean[COUNT * 5];  
  58.           
  59.         for(int i = 0; i < COUNT; i++)  
  60.         {  
  61.             String string1 = "geniuseoe2012 -->" + i;  
  62.             mSingleDataList.add(string1);         
  63.         }  
  64.           
  65.         for(int i = 0; i < COUNT * 2; i++)  
  66.         {  
  67.             String string2 = "talent -->" + i;  
  68.             mMultiDataList.add(string2);  
  69.         }     
  70.           
  71.         initPopWindow(booleans);  
  72.           
  73.         initDialog(booleans);  
  74.       
  75.     }  
  76.       
  77.       
  78.     public void initPopWindow(boolean []booleans)  
  79.     {  
  80.         mSingleChoicePopWindow = new SingleChoicePopWindow(this, mRootView, mSingleDataList);  
  81.           
  82.         mSingleChoicePopWindow.setTitle("genius single title");  
  83.         mSingleChoicePopWindow.setOnOKButtonListener(new OnClickListener() {  
  84.               
  85.             @Override  
  86.             public void onClick(View v) {  
  87.                 // TODO Auto-generated method stub  
  88.                 int selItem = mSingleChoicePopWindow.getSelectItem();  
  89.                 Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();  
  90.             }  
  91.         });  
  92.           
  93.         mMultiChoicePopWindow = new MultiChoicePopWindow(this, mRootView, mMultiDataList, booleans);      
  94.         mMultiChoicePopWindow.setTitle("genius multi title");  
  95.         mMultiChoicePopWindow.setOnOKButtonListener(new OnClickListener() {  
  96.               
  97.             @Override  
  98.             public void onClick(View v) {  
  99.                 // TODO Auto-generated method stub  
  100.                 boolean []selItems = mMultiChoicePopWindow.getSelectItem();  
  101.                 int size = selItems.length;  
  102.                 StringBuffer stringBuffer = new StringBuffer();  
  103.                 for(int i = 0; i < size; i++)  
  104.                 {  
  105.                     if (selItems[i])  
  106.                     {  
  107.                         stringBuffer.append(i + " ");  
  108.                     }  
  109.                       
  110.                 }  
  111.                   
  112.                 Toast.makeText(mContext, "selItems = " + stringBuffer.toString(), Toast.LENGTH_SHORT).show();  
  113.             }  
  114.         });  
  115.     }  
  116.       
  117.     public void initDialog(boolean []booleans)  
  118.     {  
  119.         mSingleChoiceDialog = new SingleChoiceDialog(this, mSingleDataList);  
  120.         mSingleChoiceDialog.setTitle("genius single title");  
  121.         mSingleChoiceDialog.setOnOKButtonListener(new DialogInterface.OnClickListener() {  
  122.   
  123.             @Override  
  124.             public void onClick(DialogInterface dialog, int which) {  
  125.                 // TODO Auto-generated method stub  
  126.                 int selItem = mSingleChoiceDialog.getSelectItem();  
  127.                 Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();  
  128.             }  
  129.               
  130.           
  131.         });  
  132.       
  133.           
  134.           
  135.         mMultiChoicDialog = new MultiChoicDialog(this, mMultiDataList, booleans);  
  136.         mMultiChoicDialog.setTitle("genius multi title");  
  137.         mMultiChoicDialog.setOnOKButtonListener(new DialogInterface.OnClickListener() {  
  138.   
  139.             @Override  
  140.             public void onClick(DialogInterface dialog, int which) {  
  141.                 // TODO Auto-generated method stub  
  142.                 boolean []selItems = mMultiChoicDialog.getSelectItem();  
  143.                 int size = selItems.length;  
  144.                 StringBuffer stringBuffer = new StringBuffer();  
  145.                 for(int i = 0; i < size; i++)  
  146.                 {  
  147.                     if (selItems[i])  
  148.                     {  
  149.                         stringBuffer.append(i + " ");  
  150.                     }  
  151.                       
  152.                 }  
  153.                   
  154.                 Toast.makeText(mContext, "selItems = " + stringBuffer.toString(), Toast.LENGTH_SHORT).show();  
  155.             }  
  156.               
  157.           
  158.         });  
  159.      
  160.     }  
  161.       
  162.       
  163.     @Override  
  164.     public void onClick(View v) {  
  165.         // TODO Auto-generated method stub  
  166.         switch(v.getId())  
  167.         {  
  168.         case R.id.button1:  
  169.             showSingleChoiceWindow();  
  170.             break;  
  171.         case R.id.button2:  
  172.             showMultiChoiceWindow();  
  173.             break;  
  174.         case R.id.button3:  
  175.             showSingleChoiceDialog();  
  176.             break;  
  177.         case R.id.button4:  
  178.             showMultiChoiceDialog();  
  179.             break;  
  180.         }  
  181.     }  
  182.       
  183.       
  184.     public void showSingleChoiceWindow()  
  185.     {  
  186.         mSingleChoicePopWindow.show(true);  
  187.           
  188.     }  
  189.       
  190.     public void showMultiChoiceWindow()  
  191.     {  
  192.         mMultiChoicePopWindow.show(true);  
  193.           
  194.     }  
  195.       
  196.       
  197.     public void showSingleChoiceDialog()  
  198.     {  
  199.         mSingleChoiceDialog.show();  
  200.     }  
  201.       
  202.     public void showMultiChoiceDialog()  
  203.     {  
  204.           
  205.         mMultiChoicDialog.show();  
  206.     }  
  207. }  


以单选popwindow为例,其调用方式如下:

[java]  view plain copy
  1. mSingleChoicePopWindow = new SingleChoicePopWindow(this, mRootView, mSingleDataList);  
  2.           
  3.         mSingleChoicePopWindow.setTitle("genius single title");  
  4.         mSingleChoicePopWindow.setOnOKButtonListener(new OnClickListener() {  
  5.               
  6.             @Override  
  7.             public void onClick(View v) {  
  8.                 // TODO Auto-generated method stub  
  9.                 int selItem = mSingleChoicePopWindow.getSelectItem();  
  10.                 Toast.makeText(mContext, "selItem = " + selItem, Toast.LENGTH_SHORT).show();  
  11.             }  
  12.         });  


1.初始化对象

2.设置标题

3.添加按钮监听

最后在监听回调里通过getSelectItem方法获取选择值即可得到结果值,简洁易用

大家可直接拷贝到项目里再根据具体情况做细微调整即可

不过不知道为什么dialog始终无法填充全屏,所以只好去掉布局的背景色好与周围的暗色融为一体

 

附上链接工程:

http://download.csdn.net/detail/geniuseoe2012/4522431


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值