iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android自定义弹出框的方法
  • 589
分享到

Android自定义弹出框的方法

2024-04-02 19:04:59 589人浏览 八月长安
摘要

在开发Android项目的过程中,弹出框真的是我们的常见的一种互动式窗体,但是Android系统自带的弹出框往往都不能满足我们的需要,大多数的时候需要我们自定义一种更漂亮的窗体来来展

开发Android项目的过程中,弹出框真的是我们的常见的一种互动式窗体,但是Android系统自带的弹出框往往都不能满足我们的需要,大多数的时候需要我们自定义一种更漂亮的窗体来来展示给用户。

接下来是我很久之前用的一个自定义弹出框,记录一下,以便自己日后使用。

0、先来一张效果图

1、先定义个一个继承自Dialog的自定义弹框CustomDialog

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
 

public class CustomDialog extends Dialog {
    
    private CustomDialog(Context context) {
        super(context);
    }
 
    private CustomDialog(Context context, int themeResId) {
        super(context, themeResId);
    }
 
    private CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }
 
    
    public static class Builder {
        private TextView tvTitle, tvWarning, tvInfo;
        private Button btnCancel, btnConfirm;
 
        private View mLayout;
        private View.OnClickListener mButtonCancelClickListener;
        private View.OnClickListener mButtonConfirmClickListener;
 
        private CustomDialog mDialog;
 
        public Builder(Context context) {
            mDialog = new CustomDialog(context, R.style.custom_dialog);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // 加载布局文件
            mLayout = inflater.inflate(R.layout.dialog_custom, null, false);
            // 添加布局文件到 Dialog
            mDialog.addContentView(mLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
 
            tvTitle = (TextView) mLayout.findViewById(R.id.tv_title);
            tvWarning = (TextView) mLayout.findViewById(R.id.tv_warning);
            tvInfo = (TextView) mLayout.findViewById(R.id.tv_info);
            btnCancel = (Button) mLayout.findViewById(R.id.btn_cancel);
            btnConfirm = (Button) mLayout.findViewById(R.id.btn_confirm);
        }
 
        
        public Builder setTitle(String title) {
            tvTitle.setText(title);
            tvTitle.setVisibility(View.VISIBLE);
            return this;
        }
 
        
        public Builder setWarning(String waring) {
            tvWarning.setText(waring);
            if (waring == null || waring.equals("")) {
                tvWarning.setVisibility(View.GoNE);
            }
            return this;
        }
 
        
        public Builder setInfo(String message) {
            tvInfo.setText(message);
            return this;
        }
 
        
        public Builder setButtonCancel(String text, View.OnClickListener listener) {
            btnCancel.setText(text);
            mButtonCancelClickListener = listener;
            return this;
        }
 
        
        public Builder setButtonConfirm(String text, View.OnClickListener listener) {
            btnConfirm.setText(text);
            mButtonConfirmClickListener = listener;
            return this;
        }
 
        public CustomDialog create() {
            btnCancel.setOnClickListener(new android.view.View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mDialog.dismiss();
                    mButtonCancelClickListener.onClick(view);
                }
            });
 
            btnConfirm.setOnClickListener(new android.view.View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mDialog.dismiss();
                    mButtonConfirmClickListener.onClick(view);
                }
            });
 
            mDialog.setContentView(mLayout);
            mDialog.setCancelable(true); 
            mDialog.setCanceledOnTouchOutside(false); 
            return mDialog;
        }
    }
}

2、定义CustomDialo布局文件:dialog_custom

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">
 
    <LinearLayout
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:background="@drawable/rect_s_rounded_white"
        android:orientation="vertical">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_10"
            android:layout_marginBottom="@dimen/margin_10"
            android:gravity="center"
            android:orientation="vertical">
 
            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="@dimen/size_18"
                android:textStyle="bold" />
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="@dimen/padding_10">
 
            <TextView
                android:id="@+id/tv_warning"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@android:color/holo_red_dark"
                android:textSize="@dimen/size_14" />
 
            <TextView
                android:id="@+id/tv_info"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_10"
                android:textColor="@android:color/black"
                android:textSize="@dimen/size_14" />
        </LinearLayout>
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_10"
            android:layout_marginBottom="@dimen/margin_10"
            android:gravity="center"
            android:orientation="horizontal"
            android:padding="@dimen/padding_10">
 
            <Button
                android:id="@+id/btn_cancel"
                android:layout_width="110dp"
                android:layout_height="40dp"
                android:layout_marginRight="25dp"
                android:background="@drawable/button_gray_l_rounded_selector"
                android:textColor="@android:color/black"
                android:textSize="@dimen/size_14" />
 
            <Button
                android:id="@+id/btn_confirm"
                android:layout_width="110dp"
                android:layout_height="40dp"
                android:background="@drawable/button_green_l_rounded_selector"
                android:textColor="@android:color/white"
                android:textSize="@dimen/size_14" />
        </LinearLayout>
    </LinearLayout>
 
</LinearLayout>

3、定义CustomDialog样式文件:custom_dialog

<style name="custom_dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">#00000000</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
</style>

4、定义其中按钮样式:button_green_l_rounded_selector和button_gray_l_rounded_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <stroke android:color="@android:color/transparent" android:width="0dp"></stroke>
 
            <gradient android:angle="180"
                android:endColor="@color/button_green"
                android:startColor="@color/button_green"></gradient>
 
            <corners android:radius="50dp"></corners>
        </shape>
    </item>
 
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <stroke android:color="@android:color/transparent" android:width="0dp"></stroke>
 
            <gradient android:angle="180"
                android:endColor="@color/button_green"
                android:startColor="@color/button_green"></gradient>
 
            <corners android:radius="50dp"></corners>
        </shape>
    </item>
 
    <item android:state_pressed="false">
        <shape android:shape="rectangle">
            <stroke android:color="@android:color/transparent" android:width="0dp"></stroke>
 
            <gradient android:angle="0"
                android:endColor="@color/button_green"
                android:startColor="@color/button_green"></gradient>
 
            <corners android:radius="50dp"></corners>
        </shape>
    </item>
 
    <item android:state_focused="false">
        <shape android:shape="rectangle">
            <stroke android:color="@android:color/transparent" android:width="0dp"></stroke>
 
            <gradient android:angle="0"
                android:endColor="@color/button_green"
                android:startColor="@color/button_green"></gradient>
 
            <corners android:radius="50dp"></corners>
        </shape>
    </item>
 
</selector>

5、具体使用

private void showDialog() {
        OnClickListener onCancelClickListener = new OnClickListener() {            
            @Override
            public void onClick(View v) {
                MyDialog.showToast(WarehouseAddActivity.this, "取消");
            }
        };
        
        OnClickListener onConfimClickListener = new OnClickListener() {            
            @Override
            public void onClick(View v) {
                MyDialog.showToast(WarehouseAddActivity.this, "确认");
            }
        };
        
        showInfoDialog("", "请点击确认进行操作", "取消", onCancelClickListener, "确认", onConfimClickListener);
    }
 
protected void showInfoDialog(String waring, String info, String cancelText, OnClickListener cancelOnClick, String confirmText,
            OnClickListener confirmOnClick) {
        CustomDialog.Builder builder = new CustomDialog.Builder(this);
        builder.setTitle("提示");
        builder.setWarning(waring);
        builder.setInfo(info);
        builder.setButtonCancel(cancelText, cancelOnClick);
        builder.setButtonConfirm(confirmText, confirmOnClick);
 
        CustomDialog customDialog = builder.create();
        customDialog.show();
    }

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

--结束END--

本文标题: Android自定义弹出框的方法

本文链接: https://www.lsjlt.com/news/152186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android自定义弹出框的方法
    在开发Android项目的过程中,弹出框真的是我们的常见的一种互动式窗体,但是Android系统自带的弹出框往往都不能满足我们的需要,大多数的时候需要我们自定义一种更漂亮的窗体来来展...
    99+
    2024-04-02
  • Android怎么自定义弹出框
    本篇内容介绍了“Android怎么自定义弹出框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果图先定义个一个继承自Dialog的自定义弹框...
    99+
    2023-07-02
  • Android自定义背景弹出框的方法有哪些
    Android中自定义背景弹出框的方法有以下几种:1. 自定义布局的Dialog:可以通过自定义一个布局文件,然后在Dialog中设置该布局文件作为其内容,从而实现自定义背景弹出框。2. 自定义PopupWindow:可以继承Popup...
    99+
    2023-08-11
    Android
  • Android自定义弹出框dialog效果
    项目要用到弹出框,还要和苹果的样式一样(Android真是没地位),所以就自己定义了一个,不是很像(主要是没图),但是也还可以。废话不多说了,直接上代码先看布局文件<?xml version="1.0" encoding="u...
    99+
    2023-05-31
    android 弹出框 dialog
  • Android怎么自定义背景弹出框
    要自定义背景弹出框,可以按照以下步骤:1. 创建自定义的布局文件。在res/layout目录下创建一个XML文件,例如custom_...
    99+
    2023-08-12
    Android
  • uniapp自定义弹框的方法
    本文实例为大家分享了uniapp自定义弹框,适用所有类型,供大家参考,具体内容如下 效果原理 利用透明页面,点击进入当前页面,内容根据自己需求去实现,随便自定义,出来的效果就是一个...
    99+
    2024-04-02
  • Android编程实现AlertDialog自定义弹出对话框的方法示例
    本文实例讲述了Android编程实现AlertDialog自定义弹出对话框的方法。分享给大家供大家参考,具体如下:弹出对话框,显示自定义的布局文件弹出对话框提示设置密码或登录密码private void showSetPasswordDia...
    99+
    2023-05-30
    android alertdialog 对话框
  • Android自定义弹框Dialog效果
    本文实例为大家分享了Android自定义弹框Dialog效果的具体代码,供大家参考,具体内容如下 1.dialog_delete.xml <xml version=...
    99+
    2024-04-02
  • 小程序自定义弹框的方法
    本文实例为大家分享了小程序自定义弹框的具体代码,供大家参考,具体内容如下 1、页面简单布局 <button bindtap='ElasticFrameClick'>弹框&...
    99+
    2024-04-02
  • Android怎么自定义弹框Dialog效果
    今天小编给大家分享一下Android怎么自定义弹框Dialog效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体效果如下...
    99+
    2023-06-30
  • 小程序自定义弹出框效果
    本文实例为大家分享了小程序自定义弹出框效果的具体代码,供大家参考,具体内容如下 my-pop----api: title ------字符串---------自定义弹窗标题con...
    99+
    2024-04-02
  • jquery如何弹出自定义提示框
    要弹出自定义提示框,可以使用jQuery UI库中的对话框组件。下面是一个示例:首先,确保你已经引入了jQuery和jQuery UI库。然后,可以使用下面的代码创建一个自定义提示框:HTML代码:```html这是一个自定义提示框。...
    99+
    2023-08-11
    jquery
  • android自定义消息弹窗的方法有哪些
    Android中自定义消息弹窗的方法有以下几种:1. 使用AlertDialog:通过创建一个AlertDialog对象,并设置自定...
    99+
    2023-08-16
    android
  • Android中自定义的dialog中的EditText无法弹出输入法解决方案
    1.解决无法弹出输入法:  在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我...
    99+
    2023-05-31
    dialog edittext 输入法
  • Android高德地图marker自定义弹框窗口
    本文实例为大家分享了Android高德地图marker自定义弹框窗口的具体代码,供大家参考,具体内容如下 最终效果: 1.gradle里添加高德地图依赖 implementat...
    99+
    2024-04-02
  • Android 自定义弹出菜单和对话框功能实例代码
    Android 开发当中,可能会存在许多自定义布局的需求,比如自定义弹出菜单(popupWindow),以及自定义对话框(Dialog)。话不多说,直接上图片。 先讲第一种,自定义PopUpWindow1.popupWindowp...
    99+
    2023-05-30
    android 弹出菜单 对话框
  • 小程序开发怎么自定义弹出框
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 微信小程序自定义可滚动的弹出框
    本文实例为大家分享了微信小程序自定义可滚动弹出框的具体代码,供大家参考,具体内容如下 最近在写一个装修的活动,规则是点击按钮弹出加上相应的动画。 首先我们需要一个按钮触发显示(如图,...
    99+
    2024-04-02
  • Android 自定义View 之 Dialog弹窗
    Dialog弹窗 前言正文一、弹窗视图帮助类二、弹窗控制类三、监听接口四、样式五、简易弹窗六、常规使用七、简易使用八、源码 前言   在日常开发中用到弹窗是比较多的,常用于提示作用,比如错误操作提示,余额不足提示,退出登录提...
    99+
    2023-08-18
    自定义Dialog 简易提示弹窗 EasyDialog
  • Android自定义验证码输入框的方法实例
    目录实践过程总结实践过程 前面我们学完了EditText和TextView两个组件,但是,光学不练没意思。 所以今天我们趁热打铁,利用两个组件实现个自定义验证码输入框。 思路前瞻:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作