• Android笔记之自定义对话框


    效果如下图

    对话框布局

    dialog_uninstallation_confirmation.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/uninstallation_dialog_background"
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/iconImageView"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_gravity="center"
            android:layout_marginTop="25dp"
            android:layout_marginBottom="30dp"
            tools:src="@mipmap/ic_launcher" />
    
        <TextView
            android:id="@+id/messageTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@android:color/black"
            tools:text="是否卸载CustomDialog" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dp"
            android:layout_marginBottom="15dp">
    
            <TextView
                android:id="@+id/cancelTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:background="@drawable/uninstallation_dialog_button_background"
                android:gravity="center"
                android:padding="18dp"
                android:text="取消"
                android:textColor="@android:color/black" />
    
            <TextView
                android:id="@+id/uninstallTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="15dp"
                android:layout_weight="1"
                android:background="@drawable/uninstallation_dialog_button_background"
                android:gravity="center"
                android:padding="18dp"
                android:text="卸载"
                android:textColor="#FF0000" />
        </LinearLayout>
    </LinearLayout>

    自定义的对话框类

    UninstallationConfirmationDialog.java

    package com.bu_ish.custom_dialog_example;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public abstract class UninstallationConfirmationDialog extends Dialog {
        private ImageView iconImageView;
        private TextView messageTextView;
        private int iconResId;
        private String message;
    
        public abstract void onCancelClicked();
    
        public abstract void onUninstallClicked();
    
        public UninstallationConfirmationDialog(Context context) {
            super(context, R.style.UninstallationConfirmationDialog);
        }
    
        public UninstallationConfirmationDialog setIcon(int resId) {
            this.iconResId = resId;
            return this;
        }
    
        public UninstallationConfirmationDialog setMessage(String message) {
            this.message = message;
            return this;
        }
    
        @Override
        public void show() {
            super.show();
            Window window = getWindow();
            WindowManager.LayoutParams layoutParams = window.getAttributes();
            layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
            window.setAttributes(layoutParams);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.dialog_uninstallation_confirmation);
            iconImageView = findViewById(R.id.iconImageView);
            messageTextView = findViewById(R.id.messageTextView);
            iconImageView.setImageResource(iconResId);
            messageTextView.setText(message);
            findViewById(R.id.cancelTextView).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onCancelClicked();
                    dismiss();
                }
            });
            findViewById(R.id.uninstallTextView).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onUninstallClicked();
                    dismiss();
                }
            });
        }
    }

    对话框style

        <style name="UninstallationConfirmationDialog" parent="@android:style/Theme.Dialog">
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
        </style>

    P.S.

    对话框默认风格是带标题的,通过windowNoTitle设置为无标题

    为保证对话框宽度与屏幕匹配,须通过Window.setAttributes(WindowManager.LayoutParams)设置宽度

    完整Demo链接:https://pan.baidu.com/s/1RItjQZ7v1xMHL7b5C6lLzw,提取码:qbwu

  • 相关阅读:
    SpringBoot-启动原理解析及源码阅读-todo
    SpringBoot-入门简介和优缺点分析
    《机器学习》笔记 第2章——模型评估与选择: 经验误差与过拟合、评估方法、性能度量、比较检验方法、偏差与方差
    《机器学习》笔记 第1章——绪论 : 基本术语/假设空间的基础概念
    【JS 01】 JS中的JSON.stringify后的json字符串后怎么转为Java中String.class可以直接接受的转义json字符串?
    【Java多线程07】 并发安全读取Shell脚本/命令的输出的INFO流和ERR流
    时序预测 03
    时序预测 02
    时序预测 01
    【搬运链接】美团技术团队
  • 原文地址:https://www.cnblogs.com/buyishi/p/10450556.html
Copyright © 2020-2023  润新知