有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对话框按钮对齐

关于更改AlertDialog(support.v7 one)中按钮的对齐方式,已经争论了好几个小时,因为它们不会按照区域设置视图方向对齐,尽管整个应用程序确实向左对齐,AlertDialog中的文本也对齐

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

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

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

当然,它对按钮不起作用,因为我需要改变布局重力

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

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

下面是我如何尝试在其父LinearLayout内更改它们的对齐方式:

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

我选择了右边,因为对话框中按钮的一侧总是与文本对齐的一侧相对(是的——我也试过左,没有改变)

这不管用。有人知道如何做到这一点吗?看来他们只是固守自己的位置

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


共 (1) 个答案

  1. # 1 楼答案

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

    一个简单的解决方案可能是在设置重力之前获取父级的buttons容器并移除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); 
    

    不过,你应该创建并使用自己的自定义布局,以防将来谷歌的开发可能会发生变化