Android 自定義dialog,實現右上角顯示一個控制元件按鈕

RockoZZ發表於2014-05-26

轉載請註明出處:http://blog.csdn.net/bbld_/article/details/27070531


這裡是使用自定義dialog的佈局實現,並去除原生dialog的標題。

以下是dialog佈局的xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="50dp"
    android:background="@android:color/transparent"
    android:gravity="center" >

    <LinearLayout
        android:id="@+id/LL_this"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="9dp"
        android:layout_marginRight="9dp"
        android:layout_marginTop="9dp"
        android:background="@drawable/rounded_background"
        android:orientation="vertical" >

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="30dp"
            android:shrinkColumns="1" >

            <TableRow>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="課室: " />

                <TextView
                    android:id="@+id/txt_pre_entry_dialog_classroom"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="資料異常" />
            </TableRow>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/gray" />

            <TableRow>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="老師: " />

                <TextView
                    android:id="@+id/txt_pre_entry_dialog_teacher"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="資料異常" />
            </TableRow>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/gray" />

            <TableRow>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="課程: " />

                <TextView
                    android:id="@+id/txt_pre_entry_dialog_course"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="資料異常" />
            </TableRow>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/gray" />

            <TableRow>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="班級: " />

                <TextView
                    android:id="@+id/txt_pre_entry_dialog_classes"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="資料異常" />
            </TableRow>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_marginBottom="10dp"
                android:background="@color/gray" />
        </TableLayout>
    </LinearLayout>

    <ImageButton
        android:id="@+id/dialog_pre_entry_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/cancel" />

</RelativeLayout>


這裡我寫了其它的一些表格佈局的東西,所以看起來多了一點,其實起到做用的屬性程式碼也就幾行。因為要實現在右上角偏移突出顯示一個關閉的Button,這裡就使用RelativeLayout了。上面的程式碼中第6、13、14、15行起了主要作用,有什麼作用效果大家動下手修改修改就知道了。


然後就要到程式碼裡去設定dialog了,如下:

private Dialog allMsg;
//Dialog的佈局View
private View allMsgView;

// 通過LayoutInflater找到改佈局
allMsgView = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.dialog_all_pre_entry_msg, null);
//建立Dialog
allMsg = new AlertDialog.Builder(this).create();
//設定點選外邊緣不消失,2.x的應該是預設不消失的
allMsg.setCanceledOnTouchOutside(false);
//findView佈局裡的控制元件
imgBtn_dialog = (ImageButton) allMsgView.findViewById(R.id.dialog_pre_entry_close);
imgBtn_dialog.setOnClickListener(this);

txt_dialog_classroom = (TextView) allMsgView.findViewById(R.id.txt_pre_entry_dialog_classroom);
txt_dialog_course = (TextView) allMsgView.findViewById(R.id.txt_pre_entry_dialog_course);
txt_dialog_teacher = (TextView) allMsgView.findViewById(R.id.txt_pre_entry_dialog_teacher);
txt_dialog_classes = (TextView) allMsgView.findViewById(R.id.txt_pre_entry_dialog_classes);

然後在你需要彈出的地方呼叫如下:

//兩句的順序不能調換
allMsg.show();
allMsg.getWindow().setContentView((RelativeLayout) allMsgView);

取消顯示,在關閉按鈕的監聽裡關閉dialog就行了:

	/**
	 * 按鈕監聽
	 */
	@Override
	public void onClick(View v)
	{
		switch (v.getId())
		{
		// dialog的圖片取消button
		case R.id.dialog_pre_entry_close:
			allMsg.dismiss();
			break;
		default:
			break;
		}
	}


效果圖:



demo下載地址:http://download.csdn.net/detail/bbld_/8118911




相關文章