android AlertDialog去除黑邊白邊自定義佈局

自定義佈局文件

 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_height="fill_parent" android:layout_width="fill_parent"
  4. >
  5. <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"
  6. android:background="@drawable/popup_title" android:id="@+id/about_us_rel01">
  7. <TextView android:id="@+id/about_us_title" android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="關於我們" android:layout_marginLeft="20dip" android:textSize="20dip"/>
  10. </RelativeLayout>
  11. <RelativeLayout android:layout_height="wrap_content"android:layout_below="@+id/about_us_rel01"
  12. android:background="@drawable/popup_bg" android:id="@+id/about_us_rel02"
  13. android:layout_width="fill_parent" android:gravity="center" >
  14. <ListView android:id="@+id/test_alertdialog_listview"
  15. android:layout_height="wrap_content" android:layout_width="wrap_content"
  16. ></ListView>
  17. </RelativeLayout>
  18. </RelativeLayout>

 

 

  1. java代碼
  2. final String[] datas ={"data1","data2"};
  3. LayoutInflater inflater = this.getLayoutInflater();
  4. View view = inflater.inflate(R.layout.test_alertdialog_listview,null);
  5. ListView lv = (ListView)view.findViewById(R.id.test_alertdialog_listview);
  6. lv.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,datas));
  7. lv.setOnItemClickListener(new OnItemClickListener(){
  8. @Override
  9. public void onItemClick(AdapterView<?> parent, View view,
  10. int position, long id) {
  11. alertdialog.dismiss();
  12. Toast.makeText(TestAndroid.this, datas[position], Toast.LENGTH_LONG).show();
  13. }
  14. });
  15. alertdialog = new AlertDialog.Builder(this)
  16. // .setView(view);
  17. .setItems(datas, new DialogInterface.OnClickListener() {
  18. @Override
  19. public void onClick(DialogInterface dialog, int which) {
  20. // TODO Auto-generated method stub
  21. }
  22. })
  23. .create();
  24. // 在此使用setview方法可以設置佈局文件和alertdialog四周邊框的距離,可以消除黑邊框
  25. alertdialog.setView(view, 0, 0, 0, 0);
  26. alertdialog.show();

 

 

 

此外,我們還可以通過設置dialog的樣式來定義,消除邊框

 

使用樣式文件,在values 目錄下新建styles.xml文件,編寫如下代碼:

 

 

  1. <resources>
  2. <style name="dialog" parent="@android:style/Theme.Dialog">
  3. <item name="android:windowFrame">@null</item>
  4. <item name="android:windowIsFloating">true</item>
  5. <item name="android:windowIsTranslucent">false</item>
  6. <item name="android:windowNoTitle">true</item>
  7. <item name="android:background">@android:color/black</item>
  8. <item name="android:windowBackground">@null</item>
  9. <item name="android:backgroundDimEnabled">false</item>
  10. </style>
  11. </resources>

調用時,使用AlerDialog的接口類,Dialog 接口編寫如下代碼:

 

  1. Dialog dialog =
  2. Dialog(SetActivity.this, R.style.dialog);
  3. dialog.setContentView(R.layout.test);
  4. dialog.show();

 

下面我們查看一下Dialog的源碼文件,裏面的構造函數爲如下:

 

 

  1. public Dialog(Context context, int theme) {
  2. mContext =new ContextThemeWrapper(context, theme ==0? com.android.internal.R.style.Theme_Dialog : theme);
  3. mWindowManager = (WindowManager)context.getSystemService("window");
  4. Window w = PolicyManager.makeNewWindow(mContext);
  5. mWindow = w;
  6. w.setCallback(this);
  7. w.setWindowManager(mWindowManager, null, null);
  8. w.setGravity(Gravity.CENTER);
  9. mUiThread = Thread.currentThread();
  10. mDismissCancelHandler =
  11. new DismissCancelHandler(this);
  12. }

 

 

 

這裏面我們可以看出,Android 使用了默認的構造函數爲Dialog 設置樣式,如果沒有爲其設置樣式,即默認加載事先編寫好的樣式文件,Dialog 一共由多個9.png的圖片構成,大部分都是帶有邊框的9.png圖片,所以就是爲什麼我們上邊的樣式文件要將其背景去除掉。這個東西搞了我好久,希望對你有幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章