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

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

34资源网2022-07-28369

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

分享给朋友:

相关文章

李开复的经典语录32句

李开复的经典语录32句

李开复的经典语录32句分享:…

智能电视和普通电视的区别,智能电视好还是普通电视好?

智能电视和普通电视的区别,智能电视好还是普通电视好?

好多人对智能电视和普通的区别还分不大清楚,今天小编就将智能电视和和普通电视做个简单明了的介绍,希望对大家有所帮助。简单的讲,就是智能电视可以看直播电视,也可以点播一些网络电视来看,这个就是最大的区别。当然,有些智能电视还有储存功能,比如,可…

适合年轻人创业项目,投资小又赚钱多的项目推荐

适合年轻人创业项目,投资小又赚钱多的项目推荐

社会在发展,科技在更新,生活也在发生着翻天覆地的变化。但是,唯一不变的是,年轻人创业的心,一直都没有变过。每个时代都会有很多想创业的年轻人,只是每个时代的年轻人创业项目都有所不同,那么,今天我们就说说适合现在年轻人创业的项目。…

2021年创业的话,试试这几个点子行不行

2021年创业的话,试试这几个点子行不行

想要在平淡的生活工作中发现一些好的创业项目还真没那么容易。2019年即将过去一半,那么大家有没有发现什么2019年最新创业点子呢?哪些项目的市场前景以及利润可观呢?下面跟随快马小编一起来看看吧。说不定能够激发你的创业灵感!…

引流文案微信推广(微商引流推广文案模板)

引流文案微信推广(微商引流推广文案模板)

大家好啊!今天又跟大家分享小技巧啦~往下看↓↓↓ 首先说一下什么样的文案是引流型的?实际上,一句话是将公共域流量定向到您的私有域流量池。其目的是先引流然后慢慢进行信任激活变现。 在标题方面,通常有以下几种类型,今天为大家详细描述一下。 一…

闪客快跑2背景音乐(闪客快打andylaw的微博)

闪客快跑2背景音乐(闪客快打andylaw的微博)

《疯狂跑酷》是一款LowPoly(低多边形)画风的跑酷游戏,一场突如其来的大水淹没了城市,而你在游戏中扮演一名刚下班的男子,需要从被水淹没的城市中逃出生天。…