【问题标题】:How to evenly space out radiobuttons in Android?如何在Android中均匀分布单选按钮?
【发布时间】:2013-03-04 19:36:44
【问题描述】:

我有三个单选按钮,我想将它们均匀地分布在屏幕上。当我使用android:layout_weight="1" 时,按钮会在屏幕上展开。那么,如何在它们之间拥有相同数量的空间,并且可以在不同的屏幕尺寸上进行缩放?

<RadioGroup 
        android:id="@+id/auton_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="10dp"
        android:layout_below="@id/clear_fields"
                >
        <RadioButton
            android:id="@+id/auton_radio_1"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"

            />
        <!-- android:layout_marginRight="380dp"  --> 
        <RadioButton
            android:id="@+id/auton_radio_2"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"


            />
        <RadioButton
            android:id="@+id/auton_radio_3"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:background="@drawable/auton_col"
            android:layout_weight="1"
            />

    </RadioGroup>

【问题讨论】:

    标签: android radio-button radio-group cellspacing


    【解决方案1】:

    如果您希望它们平均共享屏幕宽度,您需要在每个 View 上设置 android:layout_width="match_parent"。你的 xml 会变成:

    <RadioGroup
        android:id="@+id/auton_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/clear_fields"
        android:orientation="horizontal"
        android:paddingLeft="10dp" >
    
        <RadioButton
            android:id="@+id/auton_radio_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/auton_col" />
        <!-- android:layout_marginRight="380dp" -->
    
        <RadioButton
            android:id="@+id/auton_radio_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/auton_col" />
    
        <RadioButton
            android:id="@+id/auton_radio_3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/auton_col" />
    </RadioGroup>
    

    详细来说,layout_weight 可以有两种使用方式。

    • 如果您在垂直线性布局中有多个视图,并且希望最后一个占据所有剩余空间,则可以将它们的高度设置为 wrap_content 并将最后一个视图的权重设为 1。
    • 如果您希望所有视图共享可用空间,请将所有宽度/高度设置为0dpmatch_parent,并为每个视图赋予相同的权重值。他们将平等分享空间。

    要让您的背景可绘制比例,请在您的 drawable/ 文件夹中创建一个新的 xml,如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:gravity="center"
        android:src="@drawable/auton_col" />
    

    将其命名为您喜欢的任何名称(例如 auton_col_scale.xml)并将该可绘制对象引用为您的背景。

    【讨论】:

    • 谢谢,它起作用了,但由于某种原因,layout_weight 参数使我的RadioButtonss 长两倍。 i.imgur.com/7PZfm1j.png 它们通常只有那个宽度的一半。
    • 您应该将auton_co1 设为可缩放位图。答案是用示例编辑的
    • @rasen58 将单选按钮的android:layout_width 设置为0dp
    • @JamesMcCracken 太棒了!谢谢!将其设为位图会自动缩放吗?
    • 这样做会给你各种选择。您可以在 XML 位图部分阅读here
    【解决方案2】:

    我注意到,为 RadioButton 使用布局权重会导致它们偏离中心对齐,尽管它们确实每个共享 50% 的屏幕(它们是左对齐的)。为每个 RadioButton 设置重力只会导致文本居中 /facepalm

    下面的 XML 展示了如何水平对齐两个单选按钮(可以是任何视图)并将它们居中:

                    <RadioGroup
                        android:id="@+id/radiogroup"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">
    
                        <Space
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"/>
    
                        <RadioButton
                            android:id="@+id/radioyes"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="@string/yes"
                            android:checked="false"/>
    
                        <Space
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"/>
    
                        <RadioButton
                            android:id="@+id/radiono"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="@string/no"
                            android:checked="false"/>
    
                        <Space
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"/>
    
                    </RadioGroup>
    

    【讨论】:

      【解决方案3】:

      设置宽度以匹配每个布局的父级,然后像线性布局一样添加权重。

      <RadioGroup
                  android:id="@+id/radio_group"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginStart="@dimen/bigMarginStart"
                  android:layout_marginTop="@dimen/smallMarginTop"
                  android:layout_marginEnd="@dimen/baseMarginEnd"
                  android:orientation="horizontal"
                  android:weightSum="3"
                  app:layout_constraintStart_toStartOf="parent"
                  app:layout_constraintTop_toTopOf="parent">
      
                  <RadioButton
                      android:id="@+id/all_"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="@dimen/smallMarginTop"
                      android:layout_weight="1"
                      android:background="@drawable/radio_flat_selector"
                      android:button="@android:color/transparent"
                      android:checked="true"
                      android:gravity="center"
                      android:paddingLeft="@dimen/bigPaddingStart"
                      android:paddingTop="@dimen/smallPaddingTop"
                      android:paddingRight="@dimen/bigPaddingStart"
                      android:paddingBottom="@dimen/smallPaddingBottom"
                      android:text="All" />
      
                  <RadioButton
                      android:id="@+id/future_"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:layout_marginStart="@dimen/smallMarginStart"
                      android:layout_marginTop="@dimen/smallMarginTop"
                      android:layout_marginEnd="@dimen/smallMarginEnd"
                      android:layout_weight="1"
                      android:background="@drawable/radio_flat_selector"
                      android:button="@android:color/transparent"
                      android:gravity="center"
                      android:paddingLeft="@dimen/bigPaddingStart"
                      android:paddingTop="@dimen/smallPaddingTop"
                      android:paddingRight="@dimen/bigPaddingStart"
                      android:paddingBottom="@dimen/smallPaddingBottom"
                      android:text="Future" />
      
                  <RadioButton
                      android:id="@+id/direct_"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:layout_marginTop="@dimen/smallMarginTop"
                      android:layout_weight="1"
                      android:background="@drawable/radio_flat_selector"
                      android:button="@android:color/transparent"
                      android:gravity="center"
                      android:paddingLeft="@dimen/bigPaddingStart"
                      android:paddingTop="@dimen/smallPaddingTop"
                      android:paddingRight="@dimen/bigPaddingStart"
                      android:paddingBottom="@dimen/smallPaddingBottom"
                      android:text="Direct" />
      
              </RadioGroup>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-11
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        相关资源
        最近更新 更多