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

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

34资源网2022-07-28398

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

分享给朋友:

相关文章

全职妈妈自己创业干点什么好?适合全职妈妈创业的项目分享

全职妈妈自己创业干点什么好?适合全职妈妈创业的项目分享

作为全职妈妈的你肯定还在担心家里的开支问题吧?因为生活压力太大,很多全职妈妈想着在家照顾孩子的同时想通过自己的努力创业。那么,全职妈妈自己创业干点什么好呢?下面,小编整理了四个适合全职妈妈创业的项目,大家一起来看看吧。…

抱怨是一种毒药,比较有深度的好文

抱怨是一种毒药,比较有深度的好文

问:怎么每天 都能免费收到这种 好文章呢?…

名人名言大全,分享100句

名人名言大全,分享100句

名人名言100句:…

扫地机器人市场的2021:后浪翻涌,前浪头疼

扫地机器人市场的2021:后浪翻涌,前浪头疼

编者按:本文来自锋见,创业邦经授权发布。 转眼2021年已接近尾声,2022年即将来临。回顾过去这一年,注定是不平凡的一年,特别是对于扫地机器人行业来说,2021年发生了不少大事,对行业影响深远。今天我们就来盘点和点评一下。 科技改变生活,…

刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

编者按:本文来自雷达财经(ID:leidacj),创业邦经授权发布。 作者|张凯旌 编辑|深海 京东在私募股权投资上又有新动作。 11月29日,由刘强东、章泽天、李瑞玉共同持股的海南三亚天博产业私募基金管理有限公司(下称“海南天博私…

个人云存储哪个品牌好(云存储十大品牌排行榜)

个人云存储哪个品牌好(云存储十大品牌排行榜)

最近越来越多的视频博主开始在安利“私有云”存储,很多人觉得听起来偏硬核,平时也用不上,就没有过多去了解。可能是“云”这个概念容易让人觉得门槛很高,其实私有云没有大家想象中那么复杂,它的用法也可以很简单,并且能给我们的移动生活带来很多便利。…