android:自定義Dialog(通用)

自定義Dialog是一個非常常見的需求泣侮,Dialog上可以顯示圖標(biāo)述雾,或者標(biāo)題友酱,顯示1個或者2個兩個按鈕驳庭。

效果如下:

image.png
image.png

先定義Dialog樣式:

<style name="CustomDialog" parent="android:style/Theme.Dialog">    
      <!--背景顏色及和透明程度-->    
      <item name="android:windowBackground">@android:color/transparent</item>    
      <!--是否去除標(biāo)題 -->    
      <item name="android:windowNoTitle">true</item>    
      <!--是否去除邊框-->    
      <item name="android:windowFrame">@null</item>    
      <!--是否浮現(xiàn)在activity之上-->    
      <item name="android:windowIsFloating">true</item>    
      <!--是否模糊-->    
      <item name="android:backgroundDimEnabled">true</item>
</style>

再去定義對話框的布局刑顺,首先來個圓角背景:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
      <solid android:color="#ffffff" />    
      <stroke        
            android:width="0.8dp"        
            android:color="#ffffff" />    
      <!-- 圓角 -->    
      <corners android:radius="6dp" />
</shape>

布局:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minWidth="260dp"
    android:layout_centerInParent="true"
    android:paddingTop="16dp"
    android:background="@drawable/bg_dialog"
    android:orientation="vertical">
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="16dp"
        android:gravity="center"
        tools:text="消息提示"
        android:visibility="visible"
        android:textColor="#333333"
        android:textSize="18sp" />
    <ImageView
        android:id="@+id/image"
        tools:src="@mipmap/p1"
        android:layout_gravity="center"
        android:maxHeight="150dp"
        android:maxWidth="150dp"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:visibility="visible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center|left"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:lineSpacingExtra="3dp"
        android:lineSpacingMultiplier="1.2"
        android:textSize="14dp"
        android:textColor="#999999"
        tools:text="提示消息提示消息提示消息提示消息提示消息提示消息提示消息提示消息" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_marginTop="16dp"
        android:background="#E4E4E4" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/negtive"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:singleLine="true"
            tools:text="No"
            android:textColor="#999999"
            android:textSize="16sp" />

        <View
            android:id="@+id/column_line"
            android:layout_width="1px"
            android:layout_height="match_parent"
            android:background="#E4E4E4" />

        <Button
            android:id="@+id/positive"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
            android:background="@null"
            android:gravity="center"
            android:singleLine="true"
            tools:text="Yes"
            android:textColor="#38ADFF"
            android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>

最后送上Dialog源碼:

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.wzh.myapplication.R;

/**
* description:自定義dialog
*/

public class CommonDialog extends Dialog {
/**
 * 顯示的圖片
 */
private ImageView imageIv ;

/**
 * 顯示的標(biāo)題
 */
private TextView titleTv ;

/**
 * 顯示的消息
 */
private TextView messageTv ;

/**
 * 確認(rèn)和取消按鈕
 */
private Button negtiveBn ,positiveBn;

/**
 * 按鈕之間的分割線
 */
private View columnLineView ;
public CommonDialog(Context context) {
    super(context, R.style.CustomDialog);
}

/**
 * 都是內(nèi)容數(shù)據(jù)
 */
private String message;
private String title;
private String positive,negtive ;
private int imageResId = -1 ;

/**
 * 底部是否只有一個按鈕
 */
private boolean isSingle = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.common_dialog_layout);
    //按空白處不能取消動畫
    setCanceledOnTouchOutside(false);
    //初始化界面控件
    initView();
    //初始化界面數(shù)據(jù)
    refreshView();
    //初始化界面控件的事件
    initEvent();
}

/**
 * 初始化界面的確定和取消監(jiān)聽器
 */
private void initEvent() {
    //設(shè)置確定按鈕被點(diǎn)擊后,向外界提供監(jiān)聽
    positiveBn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ( onClickBottomListener!= null) {
                onClickBottomListener.onPositiveClick();
            }
        }
    });
    //設(shè)置取消按鈕被點(diǎn)擊后饲常,向外界提供監(jiān)聽
    negtiveBn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ( onClickBottomListener!= null) {
                onClickBottomListener.onNegtiveClick();
            }
        }
    });
}

/**
 * 初始化界面控件的顯示數(shù)據(jù)
 */
private void refreshView() {
    //如果用戶自定了title和message
    if (!TextUtils.isEmpty(title)) {
        titleTv.setText(title);
        titleTv.setVisibility(View.VISIBLE);
    }else {
        titleTv.setVisibility(View.GONE);
    }
    if (!TextUtils.isEmpty(message)) {
        messageTv.setText(message);
    }
    //如果設(shè)置按鈕的文字
    if (!TextUtils.isEmpty(positive)) {
        positiveBn.setText(positive);
    }else {
        positiveBn.setText("確定");
    }
    if (!TextUtils.isEmpty(negtive)) {
        negtiveBn.setText(negtive);
    }else {
        negtiveBn.setText("取消");
    }

    if (imageResId!=-1){
        imageIv.setImageResource(imageResId);
        imageIv.setVisibility(View.VISIBLE);
    }else {
        imageIv.setVisibility(View.GONE);
    }
    /**
     * 只顯示一個按鈕的時候隱藏取消按鈕蹲堂,回掉只執(zhí)行確定的事件
     */
    if (isSingle){
        columnLineView.setVisibility(View.GONE);
        negtiveBn.setVisibility(View.GONE);
    }else {
        negtiveBn.setVisibility(View.VISIBLE);
        columnLineView.setVisibility(View.VISIBLE);
    }
}

@Override
public void show() {
    super.show();
    refreshView();
}

/**
 * 初始化界面控件
 */
private void initView() {
    negtiveBn = (Button) findViewById(R.id.negtive);
    positiveBn = (Button) findViewById(R.id.positive);
    titleTv = (TextView) findViewById(R.id.title);
    messageTv = (TextView) findViewById(R.id.message);
    imageIv = (ImageView) findViewById(R.id.image);
    columnLineView = findViewById(R.id.column_line);
}

/**
 * 設(shè)置確定取消按鈕的回調(diào)
 */
public OnClickBottomListener onClickBottomListener;
public CommonDialog setOnClickBottomListener(OnClickBottomListener onClickBottomListener) {
    this.onClickBottomListener = onClickBottomListener;
    return this;
}
public interface OnClickBottomListener{
    /**
     * 點(diǎn)擊確定按鈕事件
     */
    public void onPositiveClick();
    /**
     * 點(diǎn)擊取消按鈕事件
     */
    public void onNegtiveClick();
}

public String getMessage() {
    return message;
}

public CommonDialog setMessage(String message) {
    this.message = message;
    return this ;
}

public String getTitle() {
    return title;
}

public CommonDialog setTitle(String title) {
    this.title = title;
    return this ;
}

public String getPositive() {
    return positive;
}

public CommonDialog setPositive(String positive) {
    this.positive = positive;
    return this ;
}

public String getNegtive() {
    return negtive;
}

public CommonDialog setNegtive(String negtive) {
    this.negtive = negtive;
    return this ;
}

public int getImageResId() {
    return imageResId;
}

public boolean isSingle() {
    return isSingle;
}

public CommonDialog setSingle(boolean single) {
    isSingle = single;
    return this ;
}

public CommonDialog setImageResId(int imageResId) {
    this.imageResId = imageResId;
    return this ;
}

}

好了,下面就是使用了:

private void initDialog() {
        final CommonDialog dialog = new CommonDialog(MainActivity.this);
        dialog.setMessage("這是一個自定義Dialog贝淤。")
                .setImageResId(R.mipmap.ic_launcher)
//                .setTitle("系統(tǒng)提示")
                .setSingle(true).setOnClickBottomListener(new CommonDialog.OnClickBottomListener() {
            @Override
            public void onPositiveClick() {
                dialog.dismiss();
                Toast.makeText(MainActivity.this,"xxxx",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNegtiveClick() {
                dialog.dismiss();
                Toast.makeText(MainActivity.this,"ssss",Toast.LENGTH_SHORT).show();
            }
        }).show();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柒竞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子播聪,更是在濱河造成了極大的恐慌朽基,老刑警劉巖布隔,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踩晶,居然都是意外死亡执泰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門渡蜻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來术吝,“玉大人,你說我怎么就攤上這事茸苇∨挪裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵学密,是天一觀的道長淘衙。 經(jīng)常有香客問我,道長腻暮,這世上最難降的妖魔是什么彤守? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮哭靖,結(jié)果婚禮上具垫,老公的妹妹穿的比我還像新娘。我一直安慰自己试幽,他們只是感情好筝蚕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铺坞,像睡著了一般起宽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上济榨,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天坯沪,我揣著相機(jī)與錄音,去河邊找鬼擒滑。 笑死腐晾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橘忱。 我是一名探鬼主播赴魁,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼卸奉,長吁一口氣:“原來是場噩夢啊……” “哼钝诚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榄棵,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤凝颇,失蹤者是張志新(化名)和其女友劉穎潘拱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拧略,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芦岂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垫蛆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽最。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袱饭,靈堂內(nèi)的尸體忽然破棺而出川无,到底是詐尸還是另有隱情,我是刑警寧澤虑乖,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布懦趋,位于F島的核電站,受9級特大地震影響疹味,放射性物質(zhì)發(fā)生泄漏仅叫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一糙捺、第九天 我趴在偏房一處隱蔽的房頂上張望诫咱。 院中可真熱鬧,春花似錦继找、人聲如沸遂跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幻锁。三九已至,卻和暖如春边臼,著一層夾襖步出監(jiān)牢的瞬間哄尔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工柠并, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岭接,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓臼予,卻偏偏與公主長得像鸣戴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粘拾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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