java - 更改 AlertDialog 按钮对齐方式

标签 java android android-alertdialog android-appcompat

为了更改 AlertDialog 中按钮的对齐方式(support.v7 之一),他们已经争论了几个小时,因为它们不会根据语言环境 View 方向自行对齐,尽管整个应用程序确实向左对齐,而且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,因为对话框中按钮的一侧总是与文本对齐的一侧相反。(是的 - 我也尝试了 LEFT,没有任何改变)。

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

编辑: 标题也没有对齐,我刚刚确认了这一点(出于某种原因它出现在右边,比如我的系统配置,而不是我的语言环境配置)。

最佳答案

问题不在于 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 View 。这个 View 用它的重量填充容器。因此,您实际上有一个小部件可以在右侧的父容器中按下按钮。

一个简单的解决方案可能是在设置重力之前获取父按钮容器并删除 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 的开发更改可能发生。

关于java - 更改 AlertDialog 按钮对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620800/

相关文章:

JavaFX:为什么我必须按几次按钮才能背景改变?

java - 安卓 Java : AlertDialog method called from another class causes null pointer exception

Android 闹钟无法使用 AlarmManager

android - 如何使用 android.support.design.widget.TabLayout 创建标签的自定义布局?

Android - 计算原始文件中 .mp3 的数量

android - 亚马逊内购 SDK : No response when testing IAPs in Live App Testing

android - 在 `Thread.setDefaultUncaughtExceptionHandler` 中显示一个对话框

java - 在 Java 中使用 XML 发出 HTTPS Post 请求

java - 以编程方式执行 Java 应用程序

java - 使用 BouncyCaSTLe 创建 CMS 消息时出现 FipsUnapprovedOperationError