Android 自定义对话框

转于:http://blog.csdn.net/luck_apple/article/details/6874491

-------------------------------------------------------------------------------

先看效果:

         

这是我做的一个拨号器强的面板,拨号的时候会查询手机中的联系人,显示在拨号面板上方,点击弹出透明对话框供选择。

这次重点是透明对话框。

先看对话框的theme,style文件:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <style  
  4.         name="selectorDialog"  
  5.         parent="@android:style/Theme.Dialog">  
  6.         <item name="android:windowFrame">@null</item><!--边框-->  
  7.         <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->  
  8.         <item name="android:windowIsTranslucent">false</item><!--半透明-->  
  9.         <item name="android:windowNoTitle">true</item><!--无标题-->  
  10.         <item name="android:windowBackground">@drawable/selector_dialog_bg</item><!--背景透明-->  
  11.         <item name="android:backgroundDimEnabled">false</item><!--模糊-->  
  12.         <item name="android:backgroundDimAmount">0.6</item>  
  13.     </style>  
  14. </resources>  

对话框背景@drawable/selector_dialog_bg:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:shape="rectangle">  
  4.     <solid android:color="#333333"/>  
  5.     <stroke    
  6.         android:width="2dp"    
  7.         android:color="#99CC33" />  
  8.     <padding   
  9.         android:left="5dp"   
  10.         android:top="5dp"   
  11.         android:right="5dp"  
  12.         android:bottom="5dp" />  
  13.     <corners android:radius="8dp" />  
  14. </shape>  

然后是对话框的布局:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:orientation="vertical" >  
  7.       
  8.     <ListView  
  9.         android:id="@+id/selector_dialog_listview"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:cacheColorHint="#00000000"  
  13.         android:scrollbars="none"  
  14.         android:dividerHeight="1.0dip"  
  15.         android:divider="#C4C4C4" />  
  16.               
  17. </LinearLayout>  


程序中:

[java] view plain copy
  1. final View view = LayoutInflater.from(this).inflate(R.layout.selector_dialog, null);  
  2.         selectorDialog = new Dialog(DialerActivity.this, R.style.selectorDialog);  
  3.         selectorDialog.setContentView(view);  
  4.           
  5.         final BaseAdapter adapter = new SelectorAdapter(DialerActivity.this, selectorList);  
  6.         ListView listView = (ListView) view.findViewById(R.id.selector_dialog_listview);  
  7.         listView.setOnItemClickListener(new OnItemClickListener() {  
  8.   
  9.             @Override  
  10.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  11.                 //对话框中事件处理  
  12.             }  
  13.               
  14.         });  
  15.         listView.setAdapter(adapter);  
  16.         selectorDialog.show();  
  17.         selectorDialog.setCanceledOnTouchOutside(true);  
  18.           
  19.         WindowManager windowManager = getWindowManager();  
  20.         Display display = windowManager.getDefaultDisplay();  
  21.         WindowManager.LayoutParams lp = selectorDialog.getWindow().getAttributes();  
  22.         lp.width = (int)(display.getWidth() * 0.9);  
  23.         if(selectorList.size() > 7) {  
  24.             lp.height = (int)(display.getHeight() * 0.9);  
  25.         }  
  26.         lp.alpha = 0.8f;  
  27.         selectorDialog.getWindow().setAttributes(lp);  



其实主要是通过WindowManager.LayoutParams给对话框设置属性。

猜你喜欢

转载自yuemeiqing2008-163-com.iteye.com/blog/2045712