如何更改Dialog的标题与按钮颜色详解

前言

本文主要给大家介绍了如何更改Dialog的标题与按钮颜色的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

android.support.v7.app.AlertDialog

在这个类中第一行就定义了如下变量:

final AlertController mAlert;

AlertDialog的功能的具体实现都在这个AlertController内部封装.

修改按钮颜色

1. AlertDialog.getButton

public Button getButton(int whichButton) {
 return mAlert.getButton(whichButton);
 }

这里的参数whichButton有三种类型:

  • DialogInterface.BUTTON_POSITIVE
  • DialogInterface.BUTTON_NEGATIVE
  • DialogInterface.BUTTON_NEUTRAL

传入对应的参数即可得到对应的Button

Button btnPositive = (Button)AlertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
btnPositive.setTextColor(color);

这种方式只能设置按钮的颜色,而无法设置标题颜色

2 AlertDialog.getWindow

AlertDialog的构造函数如下:

protected AlertDialog(@NonNull Context context, @StyleRes int themeResId) {
 super(context, resolveDialogTheme(context, themeResId));
 mAlert = new AlertController(getContext(), this, getWindow());
 }

这里初始化了AlertController,并传入了getWindow() ,这个getWindow()是AlertDialog继承自Dialog的方法.方法如下:

#Dialog.getWindow()
 public @Nullable Window getWindow() {
 return mWindow;
 }

将这个window对象传入AlertController后,在AlertController源码中可以看到对话框标题和按钮的id,并通过Window.findViewById(id)获取对应的View.

所以这里可以这样得到对话框的标题和按钮:

//标题
TextView tvTitle = (TextView)AlertDialog.getWindow().findViewById(R.id.alertTitle);
//按钮
Button btnPositive = (Button)AlertDialog.getWindow().findViewById(R.id.button1);

然后设置所需要的颜色就可以了.这种方法可以修改Dialog的所有设置了id的控件的字体颜色.

3 反射

3.1 首先拿到AlertController对象

 Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
 mAlert.setAccessible(true);
 Object controller = mAlert.get(dialog);

在AlertController内部查找到需要更改字体颜色的标题和按钮

Button mButtonPositive;
Button mButtonNegative;
Button mButtonNeutral;
private TextView mTitleView;
private TextView mMessageView;

然后通过反射获取对应控件,修改控件颜色即可

 Field mTitleView = controller.getClass().getDeclaredField("mTitleView");
 mTitleView.setAccessible(true);
 TextView tvTitle = (TextView) mTitleView.get(controller);
 tvTitle.setTextColor(Color.GREEN);//更改标题的颜色

三种方式比较起来,第二种是最简单,效率也是最高的

更改Dialog显示的位置

Window window = dialog.getWindow();
 WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM;
lp.x = 100;
lp.y = 100;
window.setAttributes(lp);

这里要注意的是,WindowManager.LayoutParams的x和y坐标,看源码注释如下:

 /**
  * X position for this window. With the default gravity it is ignored.
  * When using {@link Gravity#LEFT} or {@link Gravity#START} or {@link Gravity#RIGHT} or
  * {@link Gravity#END} it provides an offset from the given edge.
  */
 @ViewDebug.ExportedProperty
 public int x;

 /**
  * Y position for this window. With the default gravity it is ignored.
  * When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides
  * an offset from the given edge.
  */
 @ViewDebug.ExportedProperty
 public int y;

如果lp.gravity是默认的,那么x和y即使设置了也是无效的.因此x和y需要和lp.gravity搭配使用才有效果.当然lp.gravity也可以单独使用.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android使用自定义alertdialog实现确认退出按钮

    有时候我们需要在游戏或应用中用一些符合我们样式的提示框(AlertDialog),以下是我在开发一个小游戏中总结出来的.希望对大家有用. 先上效果图: 下面是用到的背景图或按钮的图片 经过查找资料和参考了一下例子后才知道,要实现这种效果很简单.就是在设置alertDialog的contentView. 以下的代码是写在Activity下的,代码如下: public boolean onKeyDown(int keyCode, KeyEvent event) { // 如果是返回键,直接返回到桌面

  • AlertDialog点击按钮不消失的实现方法

    我有一个文本输入对话框,当我点击对话框上的"是"按钮,它会验证输入,然后关闭对话框. 但是,如果输入错误,我想停留在同一个对话框中.. 每一次,无论输入是什么,对话框应该自动关闭,当我点击"否"按钮.我怎么才能禁用这个?在网上找了很多,大部分都是修改布局,添加取消确定什么的,这样并不理想. 现在有个好方案,记录下来先: //重写"确定"(AlertDialog.BUTTON_POSITIVE),截取监听 dialog.getButton(Aler

  • artdialog的图片/标题以及关闭按钮不显示的解决方法

    因其它css样式文件中包含"div{ overflow:hidden; }"引起的artdialog的图片,标题,以及关闭按钮不显示的问题: 如下图:  解决办法:在artdialog的样式文件顶部添加一行:div{ overflow:visible; }  最终效果:

  • Android实现点击AlertDialog上按钮时不关闭对话框的方法

    本文实例讲述了Android实现点击AlertDialog上按钮时不关闭对话框的方法.分享给大家供大家参考.具体如下: 开发过程中,有时候会有这样的需求: 点击某个按钮之后显示一个对话框,对话框上面有一个输入框,并且有"确认"和"取消"两个按钮.当用户点击确认按钮时,需要对输入框的内容进行判断.如果内容为空则不关闭对话框,并toast提示. 使用AlertDialog.Builder创建对话框时,可以使用builder.setNegativeButton和build

  • Android中AlertDialog 点击按钮后不关闭对话框的功能

    这里的问题:当我点击确定按钮,也就是 AlertDialog 里的 PositiveButton 的时候,我们需要判断用户是输入是否符合我们的预期,如果不符合通常提示用户重写输入,且不关闭当前的对话框,但上图中点击按钮后会自动的关闭窗口. 先看原来的这个是怎么写的: private void openDialog() { LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.l

  • 如何更改Dialog的标题与按钮颜色详解

    前言 本文主要给大家介绍了如何更改Dialog的标题与按钮颜色的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. android.support.v7.app.AlertDialog 在这个类中第一行就定义了如下变量: final AlertController mAlert; AlertDialog的功能的具体实现都在这个AlertController内部封装. 修改按钮颜色 1. AlertDialog.getButton public Button getButt

  • 如何使用Bootstrap 按钮实例详解

    Bootstrap 按钮 本章将通过实例讲解如何使用 Bootstrap 按钮.任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <button>, 或 <input> 元素上: 下面的实例演示了上面所有的按钮 class: <!-- 标准的按钮 --> <button type="button" class=&q

  • Android 中FloatingActionButton(悬浮按钮)实例详解

    Android 中FloatingActionButton(悬浮按钮)实例详解 一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 二.使用准备, 在as 的 build.grade文件中写上 compile 'com.android.support:design:22.2.0' 三.使用说明 <android.support.design.widget.FloatingActionButton android:id="@+id/floa

  • vue更改数组中的值实例代码详解

    根据下标更改时 vm为新建的vue对象 ind为数组 第一个e为在数组ind中e索引位置 第二个e为更改为值e vm.$set(vm.ind,e,e) 常规更改 arr为数组 //添加 arr.push(1); //删除 arr.splice(*,*); //替换 arr.splice(*,*,*); splice方法 实例 例子 1 在本例中,我们将创建一个新数组,并向其添加一个元素: <script type="text/javascript"> var arr = n

  • Windows 下更改 jupyterlab 默认启动位置的教程详解

    起序:本文是在 python 自己的虚拟环境下做的,不是在 Anaconda 下做的. 一.安装 想要更改 jupyterlab 的默认启动位置,是不是得先安装 jupyterlab 呀,只需要在自己的 python 虚拟环境 中执行下面命令即可. pip install jupyterlab 二.执行 执行结束后,会在 C:\Users\用户名\.jupyter 目录下找到 jupyter_notebook_config.py. jupyter notebook --generate-conf

  • Jetpack Compose重写TopAppBar实现标题多行折叠详解

    目录 前言 MediumTopAppBar 阅读源码 核心 解决方法 重写TopAppBarLayout 完整代码 前言 想用composes实现类似掘金的文章详细页面的标题栏 上滑隐藏标题后标题栏显示标题 compose.material3下的TopAppBar不能嵌套滚动 MediumTopAppBar 便使用了MediumTopAppBar一开始用着没什么问题,但是标题字数多了,MediumTopAppBar就不支持了,最多就两行,进入源码一看就明白了 @ExperimentalMater

  • JavaGUI使用标签与按钮方法详解

    目录 1.标签 2.按钮 1.标签 类:JLabel 作用:显示文本或者提示信息 构造函数: new JLabel(); new JLabel(Icon icon);//设置图标 new JLabel(Icon icon,int aligment);//设置图标+水平对齐方式 new JLabel(String str,int aligment);//设置文本+水平对齐方式 new JLabel(String str,Icon icon,int aligment);//设置文本+图标+水平对齐方

  • Bootstrap按钮组件详解

    按钮组和下拉菜单组件一样,需要依赖于button.js插件才能正常运作. 结构方面:使用一个类名为btn-group的容器,把多个按钮放在这个容器中. 按钮组也是一个独立的组件,所以可以找到相应的源码文件: Less:buttons.less Sass:_buttons.scss Css:Bootstrap.css 3131行~3291行 <div class="btn-group"> <button type="button" class=&qu

  • Android中快速便捷的实现圆角按钮方法详解

    前言 大家应该都知道,圆角按钮是我们在做界面时常常遇到的UI样式.通常的办法,是做一个drawable,比如这样: <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充的颜色

  • Android如何自定义EditText光标与下划线颜色详解

    前言 最近在写些小Demo复习基础,在用到EditText的时候突然发现之前几乎没有注意到它的光标和下划线的颜色,于是花了不少时间,看了不少博客,现在就来总结和分享一下收获,话不多说了,来一起看看详细的介绍: 1.第一印象:原生的EditText 我们要在原生的EditText上修改,首先当然要认识一下它的本来面目.在Android Studio中新建一个工程,让MainActivity继承于AppCompatActivity(为什么要这样做,后面再说),然后在MainActivity的布局中放

随机推荐