文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

本文实例为大家分享了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(),否则对话框不显示。

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯