我在我的应用程序中使用单选按钮作为选项卡。
我已经为它加载了图像,但它们正朝着左侧对齐。如何使它们在中心对齐。
这就是我的XML文件的外观
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="20dip"
android:background="#fff"/>
<RadioGroup android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:checkedButton="@+id/allcontacts"
android:id="@+id/contactgroup">
<RadioButton android:id="@+id/allcontacts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"/>
<RadioButton
android:id="@+id/categories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"/>
<RadioButton android:id="@+id/favourites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1" />
</RadioGroup>
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" android:visibility="gone" />
</LinearLayout>
</TabHost>
答案 0 :(得分:24)
之前我有过类似的问题,我想出来了,所以我试着为你解释一下。
上面是我的应用程序截图,你可以看到,我也做了同样的事情,我有一个菜单对齐屏幕底部,它们是一个RadioGroup和三个RadionButton里面,我希望每个菜单图标对齐RadionButton的中心,当按钮检查事件触发时,阴影图像(9-patch)一起显示
起初,我使用 android:button 属性引用一个drawable选择器,选择器在check和uncheck之间有两个可绘制状态,但是我无法对齐菜单图标中心并使RadionButton填充阴影图像,他们看起来像:
我尝试使用RadionButton包含 android:layout_gravity = center 和 android:gravity = center ,但它也没有生效。之后,我的同事告诉我 android:button 属性是指前景而不是背景,然后我使用 android:background 而不是 android:button 并且它有效,下面是我的代码:
<RadioGroup android:layout_width="match_parent" android:layout_height="60dp"
android:orientation="horizontal" android:background="@drawable/menu_bg">
<RadioButton android:layout_width="0dp" android:layout_height="match_parent"
android:layout_weight="1" android:button="@null" android:checked="true"
android:background="@drawable/menu_item_selector" />
<RadioButton android:layout_width="0dp" android:layout_height="match_parent"
android:layout_weight="1" android:button="@null"
android:background="@drawable/menu_item_selector" />
<RadioButton android:layout_width="0dp" android:layout_height="match_parent"
android:layout_weight="1" android:button="@null"
android:background="@drawable/menu_item_selector" />
</RadioGroup>
menu_item_selector 非常重要,因为它有重力设置:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/menu_item_layer_list" android:state_checked="true" />
<item android:drawable="@drawable/menu_item_layer_list" android:state_pressed="true" />
<item>
<bitmap android:src="@drawable/menu_item_off" android:gravity="center" />
</item>
</selector>
因为当用户转动时我有两个图像绘制按钮状态被检查,阴影背景图像和图标活动状态图像,所以我使用图层列表来实现它,活动图标也有重力设置,下面是 menu_item_layer_list 代码:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/menu_bg_pressed" />
<item>
<bitmap android:src="@drawable/menu_item_on" android:gravity="center" />
</item>
</layer-list>
我不知道解决方案是否完美,因为我总是把它作为一个视图来实现并自己绘制。但我认为Android SDK提供了更方便的组件让我们完成xml配置,我们应该学习并使用它。
答案 1 :(得分:16)
您可以使用空视图在单选按钮之间均匀填充空间。 在这种情况下,我有3个单选按钮,看起来居中,漂亮和整洁。
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<View
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1" />
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="" />
<View
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:checked="true"
android:gravity="center"
android:text="" />
<View
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="" />
<View
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1" />
</RadioGroup>
答案 2 :(得分:10)
在每个RadioButton的xml中尝试android:gravity="center"
。
我看到你是wrap_content,所以从理论上说它不应该做任何事情,但看起来图标是均匀划分的,也许RadioGroup可以均匀地划分空间,所以使用android:gravity会有效果。
值得一试,我猜。
修改强>
试试这个:
<RadioButton android:id="@+id/allcontacts"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:marginLeft="20dp"
android:gravity="center"
android:layout_weight="1"/>
您必须使用android:marginLeft="20dp"
才能使其正确居中,但这样可以让您按照自己的意愿行事。我复制了你的布局并进行了测试,所以我知道它的工作原理! :)
答案 3 :(得分:3)
你可以将你的RadioButton放在FrameLayout中并使它们居中:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/gray_percent"
android:orientation="horizontal" >
<FrameLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1">
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:button="@drawable/rb_temp1"
android:checked="true"
android:gravity="center" />
</FrameLayout>
<FrameLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1">
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:button="@drawable/rb_temp1"
android:gravity="center" />
</FrameLayout>
</RadioGroup>
答案 4 :(得分:1)
尝试在android:layout_gravity="center_horizontal"
上添加RadioGroup
。
答案 5 :(得分:1)
我尝试了上述所有内容,但无效。
我找到了一个更好的解决方案,我想分享。
将按钮设置为@null
;然后将drawable添加到android:drawableTop
或任何其他类型的位置。这将使我们能够将drawables设置为radioButton的其他位置。添加一些padding
或drawablePadding
,以便它不会粘在按钮/文本的任何一侧。
android:background="@drawable/background_paint"
android:drawableTop="@drawable/shape"
android:button="@null"
答案 6 :(得分:1)
在我的情况下,我的单选按钮内容对齐了。我让它们通过设置android对齐中心:背景是一些值,例如@null或某种颜色。 下面是我的布局
<LinearLayout
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<RadioGroup
android:paddingTop="5dp"
android:id="@+id/radioGroupAsTab"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:background="@color/v3_header_bg"
android:fadingEdge="none"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rbDiagnose"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:checked="true"
android:drawableTop="@drawable/v3_tab_diagnose"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:text="@string/tabCaption_health_maintenance"
android:textColor="@color/radio_astab_changecolor"
android:textSize="10sp"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rbHistory"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/v3_tab_history"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:text="@string/tabCaption_history"
android:textColor="@color/radio_astab_changecolor"
android:textSize="10sp"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rbChart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/v3_tab_chart"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:text="@string/tabCaption_graph"
android:textColor="@color/radio_astab_changecolor"
android:textSize="10sp"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rbCyclopedia"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/v3_tab_encyclopedia"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:text="@string/tabCaption_encyclopedia"
android:textColor="@color/radio_astab_changecolor"
android:textSize="10sp"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rbSetting"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@null"
android:button="@null"
android:drawableTop="@drawable/v3_tab_setting"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_vertical|center_horizontal"
android:text="@string/tabCaption_info"
android:textColor="@color/radio_astab_changecolor"
android:textSize="10sp"
android:textStyle="bold" />
</RadioGroup>
</LinearLayout>
答案 7 :(得分:1)
将Radio:gravity =“center”放在RadioGroup标签上。这项工作。
答案 8 :(得分:1)
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="One"/>
<RadioButton
android:id="@+id/rb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Two"/>
</RadioGroup>
答案 9 :(得分:0)
我在我的RadioGroup
中使用了这一行,它运行正常!
android:gravity="center|left"
答案 10 :(得分:0)
在我的情况下是相反的一面,我只是把android:paddingLeft =“0dp”并且它起作用所以你应该尝试android:paddingRight =“0dp”用于radiobuttons