大家在開發 App 時,是否想設計一個自己專屬的 Dialog ,把 Dialog 的背景變成透明呢?
別急別急~
僅需四個步驟就能達成願望囉!
讓我們來瞧瞧該怎麼做吧!
首先你要先準備一份你自己設計的 Dialog 背景圖,本文背景圖的名稱為 dialog_bg.png,切記如果不想風格只有四四方方的話,一定要用 png 檔,這樣才能使你的 Dialog 不再是四方形。
接著是設定 Dialog 的風格,你在 drawable 中建置一份 xml ,名稱可以自訂,本文文件為 selector_dialog_bg.xml ,若沒有 drawable 的資料夾,則自己創建一份即可。
路徑:res/drawable/selector_dialog_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"><!--形狀-->
<!--內容-->
<solid android:color="#00000000"/>
<!--邊框-->
<stroke
android:width="5dp"
android:color="#0099CC33" />
<!--內容物件的距離-->
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp" />
<!--框角矩形的程度-->
<corners android:radius="5dp" />
</shape>
再來是設定 Dialog layout 的風格,你要在一份叫 styles.xml 的文件中進行編輯,而編輯的內容與功能依照下方指令設定即可。
路徑:res/values/styles.xml
<style name="selectorDialog" parent="@android:style/Theme.Dialog">
<!-- 邊框 -->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 整個 layout 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 拿掉標題 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景透明 -->
<item name="android:windowBackground">@drawable/selector_dialog_bg</item>
<!-- 由 XML 設定 Dialog 視窗是否變暗 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 亮度從 0 到 1.0 -->
<item name="android:backgroundDimAmount">0.2</item>
</style>
來到 layout 的部分,裡頭的 xml 有兩份,一份為進到 Activity 時對應的 xml ,一份則為呼叫 Dialog 時對應的 xml ,本文分別為 activity_dialog_bg02.xml 與 dialog_mod.xml 。
路徑:res/layout/activity_dialog_bg02.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ffff" >
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Show dialog" />
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Activity word is blue."
android:textColor="#0000ff"
android:textSize="50dp" />
</RelativeLayout>
路徑:res/layout/dialog_mod.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/dialog_bg" >
<TextView
android:layout_width="230dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:text="Dialog word is red."
android:textColor="#ff0000"
android:textSize="40dp" />
</RelativeLayout>
最後來到程式的部分囉!在這個部份我們將會對物件進行實體化,並且進行操作設定。
名稱:DialogBG02
@SuppressLint("NewApi")
public class DialogBG02 extends Activity {
private Button btn_show;
private Dialog dialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog_bg02);
btn_show = (Button) this.findViewById(R.id.btn);
btn_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 設定模組與 Dialog 的風格
dialog = new Dialog(DialogBG02.this, R.style.selectorDialog);
dialog.setContentView(R.layout.dialog_mod);
// 由程式設定 Dialog 視窗外的明暗程度, 亮度從 0f 到 1f
WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();
lp.dimAmount=0.2f;
dialog.getWindow().setAttributes(lp);
dialog.show();
}
});
}
}
咱們來瞧瞧最後做出來的成果吧!
沒有留言:
張貼留言