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();

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

(0)

相关推荐

  • Android实现万能自定义阴影控件实例代码

    目录介绍 01.阴影效果有哪些实现方式 02.实现阴影效果Api 03.设置阴影需要注意哪些 04.常见Shape实现阴影效果 05.自定义阴影效果控件 06.如何使用该阴影控件 07.在recyclerView中使用注意点 01.阴影效果有哪些实现方式 阴影效果有哪些实现方式 第一种:使用CardView,但是不能设置阴影颜色 第二种:采用shape叠加,存在后期UI效果不便优化 第三种:UI切图 第四种:自定义View 否定上面前两种方案原因分析? 第一个方案的CardView渐变色和阴影效

  • Android编程使用自定义shape实现shadow阴影效果的方法

    本文实例讲述了Android编程使用自定义shape实现shadow阴影效果的方法.分享给大家供大家参考,具体如下: 直接上xml文件, 并且附上相应的解析: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_p

  • android自定义按钮示例(重写imagebutton控件实现图片按钮)

    由于项目这种类型的图片按钮比较多,所以重写了ImageButton类. 复制代码 代码如下: package me.henji.widget; import android.content.Context;import android.graphics.ColorMatrix;import android.graphics.ColorMatrixColorFilter;import android.util.AttributeSet;import android.view.MotionEvent

  • 轻松实现可扩展自定义的Android滚轮时间选择控件

    项目需求中有个功能模块需要用到时间选择控件,但是android系统自带的太丑了,只能自己优化下,结合WheelView实现滚轮选择日期,好像网上也挺多这种文章的.但是适用范围还是不同,希望这个能够对需求相同的朋友有一定帮助.控件标题还有年月日时分秒这些可以自己控制是否显示,先来看效果. 1.有年月日时分的开始时间 2.只有年月日的结束时间 3.用于有时身份证到期的时间选择(分为勾选长期和直接选择时间两种,另外长期后面自己也可以进行扩展) 4.项目结构 5.直接贴代码,代码里面注释很详细 <spa

  • Android自定义表格控件满足人们对视觉的需求

    Android平台已经给我们提供了很多标准的组件,如:TextView.EditView.Button.ImageView.Menu等,还有许多布局控件,常见的有:AbsoluteLayout.LinerLayout.RelativeLayout.TableLayout等.但随着人们对视觉的需求,基本组件已无法满足人们求新求异的要求,于是我们常常会自定义组件,用来实现更美观的UI界面. 实现自定义控件通常有两种途径,一种是继承View类,重写其中的重要方法,另一种是继承ViewGroup类,通过

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android自定义控件ImageView实现点击之后出现阴影效果

    今天美工 直接给我一张图片,要我实现图片点击之后有阴影效果,当时想到了ImageButton,随即自己写了个Demo,发现ImageButton继承ImageView 会有一个默认的背景样式,而且在布局中设计src(前景) 太丑,于是自己写了个自定义控件ImageView实现了点击之后,点击区域有一个灰色的阴影效果,如下: 添加监听回调等; 布局文件代码: <?xml version="1.0" encoding="utf-8"?> <Linear

  • Android 自定义阴影效果详解及实例

    Android 自定义阴影效果详解及实例 Android5.X中,Google为其增加了两个属性 android:elevation=" " 与 android:translationZ=" ",对应垂直方向上的高度变化.系统会自动增加阴影效果. 在TabLayout中增加android:elevation=" 8dp" ,效果如下: 箭头指向的就是系统为我们默认提供,结果差强人意.那我们是不是可以自定义阴影,不使用系统提供的. 自定义阴影效果

  • android图像绘制(四)自定义一个SurfaceView控件

    自定义控件(类似按钮等)的使用,自定义一个SurfaceView. 如某一块的动态图(自定义相应),或者类似UC浏览器下面的工具栏. 如下图示例:  自定义类代码: 复制代码 代码如下: public class ImageSurfaceView extends SurfaceView implements Callback{ //用于控制SurfaceView private SurfaceHolder sfh; private Handler handler = new Handler();

  • android 自定义控件 自定义属性详细介绍

    自定义控件在android中无处不见,自定义控件给了我们很大的方便.比如说,一个视图为imageview ,imagebutton ,textview 等诸多控件的组合,用的地方有很多,我们不可能每次都来写3个的组合,既浪费时间,效率又低.在这种情况下,我们就可以自定义一个view来替换他们,不仅提升了效率并且在xml中运用也是相当的美观. 一.控件自定义属性介绍 以下示例中代码均在values/attrs.xml 中定义,属性均可随意命名. 1. reference:参考某一资源ID. 示例:

随机推荐