当前位置:首页 > 谈天说地

Android自定义对话框的简单实现

34资源网2022-07-28382

本文实例为大家分享了android自定义对话框的具体实现代码,供大家参考,具体内容如下

1、定义对话框的布局

<?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">

    <textview
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textsize="16sp"
        android:layout_margin="4dp"
        android:text="标题"/>
    <textview
        android:id="@+id/content1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textsize="14sp"
        android:text="第一行文字"
        android:layout_margin="4dp"
        android:layout_below="@id/title"
        android:gravity="center"/>
    <textview
        android:id="@+id/content2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textsize="14sp"
        android:text="第一行文字"
        android:layout_margin="4dp"
        android:layout_below="@id/content1"
        android:gravity="center"/>

    <linearlayout
        android:id="@+id/linear"
        android:layout_below="@id/content2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margintop="6dp"
        android:paddingright="20dp"
        android:paddingleft="20dp"
        >
        <button
            android:id="@+id/ok"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:textsize="14sp"
            android:text="确定"/>
        <button
            android:id="@+id/cancel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:textsize="14sp"
            android:text="取消"/>
    </linearlayout>

    <button
        android:id="@+id/know"
        android:layout_below="@id/linear"
        android:gravity="center"
        android:layout_margintop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textsize="14sp"
        android:text="知道了"/>

</relativelayout>

对话框样式(比较丑哈,就是大概这个意思,嘿嘿)

2、定义接口

利用接口回调的方式使对话框消失。

public interface dialoglistener {
    void onclick(mydialog dialog,view view);
}

3、写一个类继承dialog,并重写构造方法

说明:第三个按钮的监听与其他两个不同,前两个使用的是button原声的监听事件,第三个为自定义的接口,目的是获取mydialog,然后通过dismiss()方法使对话框不显示。(接口回调的方式)

public class mydialog extends dialog {
    private textview mtiponeview;
    private textview mtiptwoview;
    private textview mtitleview;
    private button mokview;
    private button mcancelview;
    private button mkonwview;

    private view.onclicklistener moklistener;
    private view.onclicklistener mcancellistener;
    private dialoglistener mknowlistener;

    private string title;
    private string onetip;
    private string twotip;

    private void setondialoglistener(dialoglistener listener){
        this.mknowlistener = listener;
    }


    public mydialog(context context) {
        super(context);
    }
    public mydialog(context context,string title,string onetip,string twotip,view.onclicklistener ok,view.onclicklistener cancel,dialoglistener know) {
        this(context);
        this.title = title;
        this.onetip = onetip;
        this.twotip = twotip;
        moklistener = ok;
        mcancellistener = cancel;
        mknowlistener = know;
    }

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.layout_dialog);
        mcancelview = (button) findviewbyid(r.id.cancel);
        mokview = (button) findviewbyid(r.id.ok);
        mkonwview = (button) findviewbyid(r.id.know);
        mtiponeview = (textview) findviewbyid(r.id.content1);
        mtiptwoview = (textview) findviewbyid(r.id.content2);
        mtitleview = (textview) findviewbyid(r.id.title);

        mtitleview.settext(title);
        mtiptwoview.settext(twotip);
        mtiponeview.settext(onetip);
        mcancelview.setonclicklistener(mcancellistener);
        mokview.setonclicklistener(moklistener);
        mkonwview.setonclicklistener(new view.onclicklistener() {
            @override
            public void onclick(view view) {
                mknowlistener.onclick(mydialog.this,view);
            }
        });
    }
}

通过setviewcontent(r.layout.~)为对话框设置样式;使用构造方法传值。

4、显示对话框

public class customdialogactivity extends appcompatactivity {

    private dialoglistener listener;
    private mydialog mydialog;
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_custom_dialog);

        listener = new dialoglistener() {
            @override
            public void onclick(mydialog dialog, view view) {
                mydialog.dismiss();
            }
        };
    }

    public void showdialog(view view){
         mydialog = new mydialog(customdialogactivity.this, "不知道", "有问题么", "啥问题", new view.onclicklistener() {
            @override
            public void onclick(view view) {
                log.e("----->", "ok");
                //点击按钮发生的事件
            }
        }, new view.onclicklistener() {
            @override
            public void onclick(view view) {
                log.e("----->", "cancle");
                //点击按钮发生的事件
            }
        },listener);

        mydialog.show();

    }
}

注意:一定不要忘了show(),否则对话框不显示。

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

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/19942.html

分享给朋友:

相关文章

英国正在调查一种新出现的变异病毒

英国正在调查一种新出现的变异病毒

新华社伦敦3月11日电(记者张家伟 金晶)英国英格兰公共卫生局11日表示,该国近期确诊两例感染了一种新的变异新冠病毒的病例,目前正在对这一新的变异病毒开展调查。…

苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

现在有很多人用的是苹果手机,因为平时有些人不注意使用方式或者使用充电器比较频繁导致损坏。大家都知道苹果手机和安卓手机的充电器是不一样的,不能用安卓手机的充电器充苹果手机。所以,大家如果苹果手机充电器损坏了,需要购买的话就要买个专门的苹果手机…

单身想找个女朋友,男的去哪里可以找个女朋友

单身想找个女朋友,男的去哪里可以找个女朋友

现在中国的男女比例失调,男的光棍要比女的多出3000w以上,这是个什么概念?代表着有3000w人是找不到对象的。所以很多单身男的就开始发愁了,单身想找个女朋友究竟到哪里找呢?说实话,小编也是一名单身汉,也正在找女朋友,虽然说,我没有找到女朋…

背光键盘怎么开灯(有背光和无背光的区别)

背光键盘怎么开灯(有背光和无背光的区别)

机械键盘轴体一直是以樱桃(Cherry)最受大众欢迎,但近几年国产轴体的快速发展,让很多玩家开始享受到更“廉价”的产品。作为国内外设领军者,雷柏自产的雷柏轴已经获得众多游戏爱好者的好评。雷柏同时还有采用经典樱桃轴的产品,笔者最近收到雷柏V8…

lenovo手机网上哪里买(联想旗舰店官网商城)

lenovo手机网上哪里买(联想旗舰店官网商城)

昨晚联想拯救者电竞手机 2 Pro 正式发布,搭载骁龙 888 旗舰芯片、八指操控体系,配备 6.92 英寸 AMOLED 144Hz 三星定制电竞无孔屏幕,5500mAh 容量电池,堪称 “堆料狂魔”,这款手机于今日 10:00 正式开售…