更改 AlertDialog 按钮对齐方式

2023-12-03

为更改 AlertDialog(support.v7 之一)内按钮的对齐方式而奋斗了几个小时,因为它们不会根据区域设置视图方向自行对齐,尽管整个应用程序确实左对齐,AlertDialog 中的文本也左对齐。

(你说为什么会发生这种情况?我正在以编程方式将区域设置语言配置为“en”,因为这是我的默认应用程序语言,即使系统区域设置可能是其他语言)。

就像我说的,我不需要触摸对话框内的消息,但作为一个例子,这就是如何改变它的方向:

TextView messageView = (TextView)dialog.findViewById(android.R.id.message);
messageView.setGravity(Gravity.RIGHT); // or LEFT

当然,它不适用于按钮,因为我需要更改布局重力。

以下是我找到按钮的方法(当然是在 AlertDialog.Builder 上调用 show() 之后,否则它们将为空):

AppCompatButton accept = (AppCompatButton)dialog.findViewById(android.R.id.button1);
AppCompatButton cancel = (AppCompatButton)dialog.findViewById(android.R.id.button2);

以下是我尝试更改其父 LinearLayout 内的对齐方式的方法:

((LinearLayout.LayoutParams)accept.getLayoutParams).gravity = Gravity.RIGHT;
((LinearLayout.LayoutParams)cancel.getLayoutParams).gravity = Gravity.RIGHT;

我选择 RIGHT,因为对话框内按钮的一侧始终与文本对齐的一侧相对。(是的 - 我也尝试过向左,没有任何改变)。

这是行不通的。有谁知道如何实现这一目标?看来他们只是被困在自己的位置上。

编辑: 标题也没有对齐,我刚刚确认了这一点(由于某种原因它出现在右侧,就像我的系统配置,而不是像我的区域设置配置)。


问题不在于Gravity设置...当您查看 xml 源时(../sdk/platforms/android-23/data/res/layout/alert_dialog_material.xml),布局的AlertDialog包含这个:

<LinearLayout android:id="@+id/buttonPanel"
    style="?attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" ...>

    <Button android:id="@+id/button3"
        style="?attr/buttonBarNeutralButtonStyle" ... />

    <Space
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible" />

    <Button android:id="@+id/button2"
        style="?attr/buttonBarNegativeButtonStyle" ... />

    <Button android:id="@+id/button1"
        style="?attr/buttonBarPositiveButtonStyle" ... />
</LinearLayout>

有一个Space使用按钮查看。该视图用容器的重量填充容器。因此,您实际上有一个小部件,可以按下右侧父容器中的按钮。

一个简单的解决方案可能是获取父级的按钮容器并删除Space设置重力之前的元素。

// get the container
LinearLayout containerButtons = (LinearLayout) dialog.findViewById(R.id.buttonPanel); 
// remove the Space view
containerButtons.removeView(containerButtons.getChildAt(1)); 
// set a gravity to the children buttons
containerButtons.setGravity(Gravity.RIGHT); 

但是,您应该创建并使用自己的自定义布局,以防将来 Google 的开发发生变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 AlertDialog 按钮对齐方式 的相关文章

随机推荐

  • 如何解决 ASP.NET 中全局文件中的 Ninject 依赖关系?

    我正在将 Ninject 和 Ninject Web 程序集与 Web 表单应用程序一起使用 在 global asax 文件中 我指定了如下绑定 public class Global NinjectHttpApplication pro
  • 并发修改异常

    通过下面的代码片段 我尝试处理电子表格 但需要排除临时列 我知道我这样做的粗略方式 将异常放入 ArrayList 并处理每个列表 并且在当前行列上不断增量是不正当的 但你知道只是完成它 但是我收到了标题错误 我相信这种情况永远不会发生 我
  • 如何格式化数字 0..9 以显示 2 位数字(不是日期)

    我希望始终显示 100 以下的 2 位数字 例如 03 05 15 如何在不使用条件来检查 0 是否低于 10 的情况下附加 0 我需要将结果附加到另一个字符串 所以我不能使用 printf 您可以使用 String format 02d
  • SpriteKit - SKScene 边界不等于 SKView 边界

    最近我创建了一个新的 Xcode 游戏项目 我没有碰任何东西就运行了模板 我期待一个标准你好世界 应用程序 但我注意到一件事 我得到的不是充满背景的场景 而是场景cut在顶部和底部 我怎样才能让它充满整个屏幕 看起来默认的 SpriteKi
  • Flask - 将反馈数据存储到服务器

    我使用烧瓶应用程序作为服务器 我只是返回用户交易 但是 如果交易错误 我需要允许用户向服务器提供反馈 from flask import Flask render template request import pandas as pd p
  • 使用 Angular.js 版本 1.2.18 进行嵌套过滤

    我是第一次尝试 AngularJS 我确实重复了一个基于 JSON 数据的模板 这是一个示例 scope users name first user status name employee name second user status
  • 删除 matplotlib 图上的图例

    要将图例添加到 matplotlib 图中 只需运行legend How to remove情节中的传奇 我最接近的是运行legend 为了从数据中清空图例 但这会在右上角留下一个丑陋的白色矩形 As of 绘图库v1 4 0rc4 a r
  • 有关 SOLR 文档等的问题

    网站 分类广告网站 用户可以投放广告 搜索广告等 我打算使用SOLR进行搜索 然后仅以ID nr s返回结果 然后使用这些ID nr s查询mysql 最后用这些ID s显示结果 目前我在 MySQL 中有大约 30 个表 每个类别一个 1
  • 如何在 Windows 上将 UTF-8 字符串打印到 std::cout?

    我正在用 C 编写一个跨平台应用程序 所有字符串均在内部进行 UTF 8 编码 考虑以下简化代码 include
  • Angular 2 不使用 CORS 保存我的身份验证 Cookie

    我有一个 Angular 2 应用程序 它应该向 Node Express 后端进行身份验证 向后端发送登录请求并接收 cookie 它应该在每个连续请求中发送此 cookie 但事实并非如此 我的角度应用程序中有 class 登录服务 p
  • SCCM 不会更新手动安装的软件

    客户端计算机均为 Windows 10 专业版 64 位 如果我们有MyCompanyApp msi通过SCCM安装后 我们发现使用SCCM可以成功更新它 那里一切正常 然而 如果我要跑MyCompanyApp msi通过双击 MSI 或运
  • 在 wxPython 应用程序中实现我自己的事件循环

    我正在编写一个 wxPython 应用程序 它将进行大量的数据分析和显示 到目前为止 当两个线程尝试同时更改 GUI 中的某些内容时 我编写的方式会导致出现问题 我想做的是建立自己的在主线程上运行的简单队列这样我就可以确保 UI 更新一次发
  • 如何在Python中转换指数并去掉“e+”?

    我从 Python 开始 最近遇到了一个具有大值的数据集 我的一个字段有一个值列表 如下所示 1 3212724310201994e 18 注意e 18在数字的末尾 如何将其转换为浮点数并删除指数而不影响该值 首先 数量is已经是浮点数 您
  • 为什么我的 sizeWithFont:constrainedToSize:lineBreakMode: 总是返回零?

    我正在尝试制作一个 UITableViewCell 根据它显示的字符串的长度来调整其高度 但我对这种方法很着迷 这是我所得到的 NSString text A really long string in here CGSize theSiz
  • 当前曲目的音频信息 iOS Swift

    假设正在播放一首曲目 通过任何应用程序 我想获取歌曲信息 例如名称 当您锁定手机时 它会与专辑封面一起显示在屏幕上 我如何使用 swift 获取该信息 这是获取音频信息的示例函数 import MediaPlayer var url NSU
  • GridView 编辑按钮需要单击 2 次

    当按下 gridview 中的编辑按钮时 只有点击 2 次后才会显示编辑模板 另一个问题 要编辑的字段的值最初显示在 gridview 中 但不显示在编辑模板中 ASP代码
  • 更改几天前的 Php 日期

    我正在 Joumla 上使用一个组件 该组件返回以下格式的日期 2 个月零 6 天前 但我需要像这样显示日期 xx 秒前 或 xx 分钟前 或 xx 小时前 或 xx 天前 开发人员告诉我必须修改这段代码 但我对 Php 完全陌生 今天我一
  • 如何使用jtextfield搜索jtable中的数据?

    我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据 但我无法使用 jtextfield 在 jtable 中实现搜索选项 任何人都可以指导我吗 谢谢 为了搜索表格上的内容 您必须将原始内容存储在某个变量中
  • MongoDB 聚合 - 合并对象数组

    我想使用聚合框架获得 MongoDB 3 4 中对象中所有数组的并集 这是输入 id 001 name something important part foo 1 2 3 bar 4 5 x 6 7 这应该是输出 id 001 name
  • 更改 AlertDialog 按钮对齐方式

    为更改 AlertDialog support v7 之一 内按钮的对齐方式而奋斗了几个小时 因为它们不会根据区域设置视图方向自行对齐 尽管整个应用程序确实左对齐 AlertDialog 中的文本也左对齐 你说为什么会发生这种情况 我正在以