Android圓角對話框Dialog

需求:模仿iOS樣式Dialog對話框揩悄。

自定義Dialog

核心代碼:

package com.huatec.myapplication.view;

import android.app.Dialog;
import android.content.Context;
import android.view.View;

import com.huatec.myapplication.R;

import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.TextView;

public class Mdialog extends Dialog {

    private Button button_cancel, button_exit;//定義取消與確認按鈕
    private TextView tv;//定義標題文字

    //構造方法
    public Mdialog(Context context) {

        //設置對話框樣式
        super(context, R.style.mdialog);

        //通過LayoutInflater獲取布局
        View view = LayoutInflater.from(getContext()).inflate(R.layout.mdialoglayout, null);
        tv = view.findViewById(R.id.title);   //獲取顯示標題的文本框控件
        button_cancel = view.findViewById(R.id.btn_cancel);    //獲取取消按鈕
        button_exit = view.findViewById(R.id.btn_exit);  //獲取確認退出按鈕
        setContentView(view);  //設置顯示的視圖
    }

    //設置標題
    public void setTv(String content) {
        tv.setText(content);
    }

    //取消監(jiān)聽
    public void setOnCancelListener(View.OnClickListener listener) {
        button_cancel.setOnClickListener(listener);
    }

    //退出監(jiān)聽
    public void setOnExitListener(View.OnClickListener listener) {
        button_exit.setOnClickListener(listener);
    }
}

Dialog樣式:

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

Dialog布局文件: mdialoglayout.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="match_parent"
    android:background="@drawable/mdialog_bg">

    <!--對話框標題區(qū)域-->
    <RelativeLayout
        android:id="@+id/layout_title"
        android:layout_width="280dp"
        android:layout_height="100dp"
        android:gravity="center">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/text_title"
            android:textColor="@color/black"/>

    </RelativeLayout>

    <View
        android:id="@+id/view"
        android:layout_width="280dp"
        android:layout_height="1dp"
        android:layout_below="@id/layout_title"
        android:layout_marginBottom="5dp"
        android:background="@color/grey"/>

    <!--對話框按鈕-->
    <LinearLayout
        android:id="@+id/bottom"
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/view"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <!--取消按鈕-->
        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:text="@string/text_cancel"
            android:textColor="@color/blue"
            android:textSize="18sp"/>

        <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:background="@null"
            android:text="@string/text_exit"
            android:textColor="@color/blue"
            android:textSize="18sp"/>
    </LinearLayout>

</RelativeLayout>

圓角背景:mdialog_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<!--圓角矩形背景-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!--背景顏色-->
    <solid android:color="@color/white"/>

    <!--設置圓角的角度-->
    <corners android:radius="16dp"/>

</shape>

使用它:

package com.huatec.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.huatec.myapplication.view.Mdialog;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

    /**
     * 顯示對話框
     */
    private void showDialog() {
        final Mdialog mdialog = new Mdialog(MainActivity.this);
        //退出
        mdialog.setOnExitListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //如果對話框處于顯示狀態(tài)
                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();
    }
}

效果圖:


2018-05-18 14_03_00.gif

源碼地址:https://github.com/280357392/iosDialog

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涤姊,更是在濱河造成了極大的恐慌堕绩,老刑警劉巖侨赡,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冷蚂,死亡現(xiàn)場離奇詭異覆旱,居然都是意外死亡骇塘,警方通過查閱死者的電腦和手機伊履,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來款违,“玉大人唐瀑,你說我怎么就攤上這事〔宓” “怎么了哄辣?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赠尾。 經(jīng)常有香客問我力穗,道長,這世上最難降的妖魔是什么萍虽? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任睛廊,我火速辦了婚禮,結果婚禮上杉编,老公的妹妹穿的比我還像新娘超全。我一直安慰自己,他們只是感情好邓馒,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布嘶朱。 她就那樣靜靜地躺著,像睡著了一般光酣。 火紅的嫁衣襯著肌膚如雪疏遏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天救军,我揣著相機與錄音财异,去河邊找鬼。 笑死唱遭,一個胖子當著我的面吹牛戳寸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拷泽,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼疫鹊,長吁一口氣:“原來是場噩夢啊……” “哼袖瞻!你這毒婦竟也來了?” 一聲冷哼從身側響起拆吆,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤聋迎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枣耀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霉晕,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年奕枢,在試婚紗的時候發(fā)現(xiàn)自己被綠了娄昆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缝彬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哺眯,到底是詐尸還是另有隱情谷浅,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布奶卓,位于F島的核電站一疯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夺姑。R本人自食惡果不足惜墩邀,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盏浙。 院中可真熱鬧眉睹,春花似錦、人聲如沸废膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丐黄。三九已至斋配,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灌闺,已是汗流浹背艰争。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桂对,地道東北人甩卓。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像接校,于是被迫代替她去往敵國和親猛频。 傳聞我的和親對象是個殘疾皇子狮崩,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容