RadioGroup按钮图像被切断

时间:2013-06-15 22:20:56

标签: android android-layout android-resolution

我底部有一个RadioGroup,有四个按钮作为我的应用程序的导航(我知道这对于Android应用程序来说是非标准的,但它是客户想要的)。这是它的外观:

Radio Buttons - Correct

这在我的Nexus 7上看起来很好,在我的IDE中的模拟器和预览中看起来很好。但是,当我将它加载到Galaxy S Note 2时,它的外观如下:

Radio Buttons - Incorrect

图像被截止,因为它们似乎被“移动”到这个特定设备的右侧。我觉得在较小的设备上,它会更加偏斜和截止。当我手动做一个约35dp的负左边距时,它实际上看起来很完美并且它们对齐很好(但当然该解决方案对其他设备不起作用)。

奇怪的是,我的代码似乎没有做任何特别的事情,而且看起来非常简单。仅供参考,即使我将其更改为仅三个按钮,仍然将按钮向右移动,而不是真正居中(尽管只有3个按钮时它们不会被切断)。我无法弄清楚为什么它会这样做,无论我通过调整重力,重量,甚至交换图像来尝试多少事情。我目前只使用/ xhdpi图像,每个图像的大小各约为130x130。

供参考,这是我的布局文件中RadioGroup的基础代码(它在RelativeLayout中):

    <RadioGroup
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tab_radio_group"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal"
            android:background="@drawable/navigation_base"
            android:paddingTop="15dp">
        <RadioButton
                android:id="@+id/button_scan"
                style="@style/navbar_button"
                android:drawableTop="@drawable/scan"/>
        <RadioButton
                android:id="@+id/button_view_order"
                style="@style/navbar_button"
                android:drawableTop="@drawable/view_order"/>
        <RadioButton
                android:id="@+id/button_complete_order"
                style="@style/navbar_button"
                android:drawableTop="@drawable/complete_order"/>
        <RadioButton
                android:id="@+id/button_settings"
                style="@style/navbar_button"
                android:drawableTop="@drawable/settings"/>
    </RadioGroup>

这是navbar_button的样式元素:

    <style name="navbar_button">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:button">@null</item>
        <item name="android:gravity">center_horizontal</item>
        <item name="android:layout_weight">1</item>
        <item name="android:textSize">12dp</item>
    </style>

我可能会遗漏一些明显的东西,但是对此有什么看法?提前谢谢!

2 个答案:

答案 0 :(得分:2)

为了解决这个问题,我最终不得不放弃RadioGroup和RadioButtons,然后我选择了带按钮的简单线性布局。它仍然用于相对简单的代码,它只涉及更改Java代码以使用普通按钮而不是RadioButtons。如果感兴趣的话,这是改变的布局:

<LinearLayout android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:id="@+id/tab_radio_group"
              android:layout_alignParentBottom="true"
              android:orientation="horizontal"
              android:background="@drawable/navigation_base"
              android:paddingTop="15dp">

    <Button
            android:id="@+id/button_scan"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/scan"/>
    <Button
            android:id="@+id/button_view_order"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/view_order"/>
    <Button
            android:id="@+id/button_complete_order"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/complete_order"/>
    <Button
            android:id="@+id/button_settings"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/settings"/>
</LinearLayout>

答案 1 :(得分:0)

不确定这是否是唯一的问题,但我发现在功能setButtonDrawable()中有一个setMinHeight(mButtonDrawable.getIntrinsicHeight());来电,但没有拨打setMinWidth(),所以我延长了RadioButton类,并覆盖了这样的函数:

@Override
public void setButtonDrawable(Drawable d) {
    super.setButtonDrawable(d);
    if (d != null) {
        setMinWidth(d.getIntrinsicWidth());
        refreshDrawableState();
    }
}