1. 程式人生 > >Android--自定義Dialog,仿IOS對話方塊樣式

Android--自定義Dialog,仿IOS對話方塊樣式

效果:


實現:

1.dialog_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/dialog_bg"
> <!--對話方塊標題區域--> <RelativeLayout android:layout_width="280dp" android:layout_height="100dp" android:id="@+id/layout_title" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height=
"wrap_content" android:id="@+id/title" android:text="11111" android:textColor="@color/black" android:gravity="center"/> </RelativeLayout> <!--對話方塊橫線--> <View android:layout_width="280dp" android:layout_height="1dp"
android:background="@color/grey" android:layout_below="@+id/layout_title" android:layout_marginBottom="10dp"/> <!--對話方塊按鈕區域--> <RelativeLayout android:id="@+id/bottomoll" android:layout_width="280dp" android:layout_height="wrap_content" android:layout_below="@+id/layout_title"> <LinearLayout android:layout_width="280dp" android:layout_height="wrap_content"> <!--取消按鈕--> <Button android:id="@+id/btn_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" android:textColor="@color/blue" android:background="@null" android:textSize="18sp" android:paddingTop="10dp" android:paddingBottom="10dp"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="@color/grey"/> <!--退出按鈕--> <Button android:id="@+id/btn_exit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="確定" android:textColor="@color/blue" android:background="@null" android:textSize="18sp"/> </LinearLayout> </RelativeLayout> </RelativeLayout>

2.在style.xml中設定dialog的樣式:

<!--對話方塊樣式-->
<style name="mdialog" parent="android:style/Theme.Dialog">
    <!-- 背景透明 -->
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 沒有標題 -->
    <item name="android:windowNoTitle">true</item>
    <!-- 背景昏暗 -->
    <item name="android:backgroundDimEnabled">true</item>
</style>

3.建立類繼承Dialog:

public class ConstomDialog extends Dialog {

    /**取消按鈕*/
    private Button button_cancel;

    /**確認按鈕*/
    private Button button_exit;

    /**標題文字*/
    private TextView tv;


    //構造方法
    public ConstomDialog(Context context) {
        super(context, R.style.mdialog);
        //通過LayoutInflater獲取佈局
        View view = LayoutInflater.from(getContext()).
                inflate(R.layout.dialog_layout, null);

        tv = (TextView) view.findViewById(R.id.title);
        button_cancel = (Button) view.findViewById(R.id.btn_cancel);
        button_exit = (Button) view.findViewById(R.id.btn_exit);

        //設定顯示的檢視
        setContentView(view);
    }

    /**
     * 設定顯示的標題文字
     */
    public void setTv(String content) {
        tv.setText(content);
    }


    /**
     * 取消按鈕監聽
     * */
    public void setOnCancelListener(View.OnClickListener listener){
        button_cancel.setOnClickListener(listener);
    }

    /**
     * 退出按鈕監聽
     * */
    public void setOnExitListener(View.OnClickListener listener){
        button_exit.setOnClickListener(listener);
    }
}

4.使用ConstomDialog:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //不顯示系統的標題欄,
        getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN );

        setContentView(R.layout.activity_main);

        findViewById(R.id.tv_showDialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDialog();
            }
        });
    }

    /**
     * 彈出對話方塊
     */
    public void showDialog() {
        //例項化自定義對話方塊
        final ConstomDialog mdialog = new ConstomDialog(this);
        //對話方塊中退出按鈕事件
        mdialog.setOnExitListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //如果對話方塊處於顯示狀態
                if (mdialog.isShowing()) {
                    //關閉對話方塊
                    mdialog.dismiss();
                    //關閉當前介面
                    finish();
                }

            }
        });
        //對話方塊中取消按鈕事件
        mdialog.setOnCancelListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mdialog != null && mdialog.isShowing()) {
                    //關閉對話方塊
                    mdialog.dismiss();
                }
            }
        });
        mdialog.show();

    }


}