android自定義Dialog彈框和背景陰影顯示效果

這篇文章主要介紹了android自定義Dialog彈框和背景陰影顯示效果 ,具有一定的參考價值,感興趣的小夥伴們可以參考一下

本文實例爲大家分享了android自定義Dialog彈框和背景陰影顯示的具體代碼,供大家參考,具體內容如下

首先需要自定義一個類,繼承Dialog

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import com.zhiziyun.dmptest.bot.R;

/**
 * Created by Administrator on 2018/1/31.
 */

public class CustomDialog extends Dialog {
  private Button yes, no;//確定按鈕
  private TextView titleTv;//消息標題文本
  private TextView messageTv;//消息提示文本
  private String titleStr;//從外界設置的title文本
  private String messageStr;//從外界設置的消息文本
  //確定文本和取消文本的顯示內容
  private String yesStr, noStr;

  private onNoOnclickListener noOnclickListener;//取消按鈕被點擊了的監聽器
  private onYesOnclickListener yesOnclickListener;//確定按鈕被點擊了的監聽器

  /**
   * 設置取消按鈕的顯示內容和監聽
   *
   * @param str
   * @param onNoOnclickListener
   */
  public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {
    if (str != null) {
      noStr = str;
    }
    this.noOnclickListener = onNoOnclickListener;
  }

  /**
   * 設置確定按鈕的顯示內容和監聽
   *
   * @param str
   * @param onYesOnclickListener
   */
  public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) {
    if (str != null) {
      yesStr = str;
    }
    this.yesOnclickListener = onYesOnclickListener;
  }

  public CustomDialog(Context context) {
    super(context, R.style.Dialog_Msg);
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_custom);
    //按空白處不能取消動畫
    setCanceledOnTouchOutside(false);

    //初始化界面控件
    initView();
    //初始化界面數據
    initData();
    //初始化界面控件的事件
    initEvent();

  }

  /**
   * 初始化界面的確定和取消監聽器
   */
  private void initEvent() {
    //設置確定按鈕被點擊後,向外界提供監聽
    yes.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (yesOnclickListener != null) {
          yesOnclickListener.onYesClick();
        }
      }
    });

    no.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (noOnclickListener != null) {
          noOnclickListener.onNoClick();
        }
      }
    });
  }

  /**
   * 初始化界面控件的顯示數據
   */
  private void initData() {
    //如果用戶自定了title和message
    if (titleStr != null) {
      titleTv.setText(titleStr);
    }
    if (messageStr != null) {
      messageTv.setText(messageStr);
    }
    //如果設置按鈕的文字
    if (yesStr != null) {
      yes.setText(yesStr);
    }
  }

  /**
   * 初始化界面控件
   */
  private void initView() {
    yes = (Button) findViewById(R.id.yes);
    no = (Button) findViewById(R.id.no);
    titleTv = (TextView) findViewById(R.id.title);
    messageTv = (TextView) findViewById(R.id.message);
  }

  /**
   * 從外界Activity爲Dialog設置標題
   *
   * @param title
   */
  public void setTitle(String title) {
    titleStr = title;
  }

  /**
   * 從外界Activity爲Dialog設置dialog的message
   *
   * @param message
   */
  public void setMessage(String message) {
    messageStr = message;
  }

  /**
   * 設置確定按鈕和取消被點擊的接口
   */
  public interface onYesOnclickListener {
    public void onYesClick();
  }

  public interface onNoOnclickListener {
    public void onNoClick();
  }

  @Override
  public void show() {
    super.show();
    /**
     * 設置寬度全屏,要設置在show的後面
     */
    WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
    layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT;
    layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT;
    getWindow().getDecorView().setPadding(0, 0, 0, 0);
    getWindow().setAttributes(layoutParams);
  }
}

這是實體類中的style:

<style name="custom_dialog_style" parent="android:Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">false</item>
    <item name="android:windowNoTitle">true</item><!--除去title-->
    <item name="android:backgroundDimEnabled">true</item><!--半透明-->
    <item name="android:windowBackground">@color/transparent</item><!--除去背景色-->
    <item name="android:radius">10dp</item>
</style>

其中@color/transparent是一個透明色

<color name="transparent">#00000000</color>

然後是佈局

<?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="#A5000000">

  <LinearLayout
    android:layout_width="260dp"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/shape_dialog_msg"
    android:orientation="vertical">

    <TextView
      android:id="@+id/title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:layout_margin="15dp"
      android:gravity="center"
      android:text="消息提示"
      android:textColor="@color/colorBlack"
      android:textSize="@dimen/title_text_size" />

    <TextView
      android:id="@+id/message"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:layout_marginLeft="@dimen/padding_left_right4"
      android:layout_marginRight="@dimen/padding_left_right4"
      android:text="提示消息"
      android:textColor="@color/colorBlack"
      android:textSize="@dimen/textsizi3" />

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

    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="@dimen/buttom_height"
      android:orientation="horizontal">

      <Button
        android:id="@+id/no"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@null"
        android:gravity="center"
        android:singleLine="true"
        android:text="取消"
        android:textColor="@color/blue"
        android:textSize="@dimen/textsizi3" />

      <Button
        android:id="@+id/yes"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@null"
        android:gravity="center"
        android:singleLine="true"
        android:text="確 定"
        android:textColor="@color/red"
        android:textSize="@dimen/textsizi3" />

    </LinearLayout>
  </LinearLayout>

</RelativeLayout>

下面是shape_dialog_msg的代碼

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="false">
    <shape android:shape="rectangle" >
      <!-- 填充的顏色 前兩位是透明度-->
      <solid android:color="#f7f6f6"></solid>
      <!-- 設置按鈕的四個角爲弧形 -->
      <!-- android:radius 弧形的半徑 -->
      <corners android:radius="8dip" />
      <!-- padding:Button裏面的文字與Button邊界的間隔 -->
      <padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp" />
    </shape>
  </item>
</selector>

準備工作都做好了,下面就是如何使用了

//點擊彈出對話框
   final CustomDialog customDialog = new CustomDialog(getActivity());
    customDialog.setTitle("消息提示");
    customDialog.setMessage("是否暫停廣告投放?");
    customDialog.setYesOnclickListener("確定", new CustomDialog.onYesOnclickListener() {
       @Override
       public void onYesClick() {
       //這裏是確定的邏輯代碼,別忘了點擊確定後關閉對話框
       customDialog.dismiss();
        }
    });
 customDialog.setNoOnclickListener("取消", new CustomDialog.onNoOnclickListener() {
@Override
   public void onNoClick() {
      customDialog.dismiss();
       }
      });
 customDialog.show();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章