欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android自定义Dialog弹框和背景阴影显示效果

程序员文章站 2022-05-27 10:05:45
本文实例为大家分享了android自定义dialog弹框和背景阴影显示的具体代码,供大家参考,具体内容如下 首先需要自定义一个类,继承dialog im...

本文实例为大家分享了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();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。