更改文本在单选按钮上显示的一侧

时间:2010-04-13 17:43:09

标签: android user-interface

我想知道是否有办法切换文本出现在android中的单选按钮上的那一面?

6 个答案:

答案 0 :(得分:16)

我想做同样的事情,而不必扩展另一个类(或者两个,因为你必须至少扩展CompoundButton RadioButton),这应该是实现的一部分从最开始。因为我使用的是一个RadioGroup,如果你把布局容器中的RadioButton和TextView放在一起就无法工作。诚然,我的解决方案不仅仅是一种hackish,而且 - 它有效。

1)将Padding设置为40 2)将布局边距设置为-36dp

此时,原始单选按钮将位于视图外部,文本视图将位于最左侧,边距为4dp。

3)将Drawable右键设置为@android:drawable / btn_radio

您现在将拥有一个本地RadioButton,其左侧是文本,右侧是一个按钮,可以与RadioGroup一起使用。

@CommonsWare

值得一提的是,针对这个特定问题提出人机界面指南是非常具有讽刺意味的。特别是考虑到调整RadioButton布局以将按钮放在最右边,可以实现与Spinner菜单布局的一致性。我完全赞同你对此事的看法 - 但NickTFried很可能试图弥补Android在这方面的“悬挂”。

答案 1 :(得分:9)

正如Ravi Vyas指出的那样,您可以使用TextViewRadioButton自行完成此操作。从我对源代码的阅读中,RadioButton没有任何固有的内容来重新定位按钮相对于文本。

此外,请记住,仅仅因为这是可能的并不意味着这是一个好主意。例如,在iPhone上,如果您过多地使用此应用程序,可能不允许发送应用程序,因为它们具有应用程序必须遵守的人机界面指南。 Android为您提供了更多绳索 - 不要让用户使用它。

答案 2 :(得分:8)

如果您使用单个“单选按钮”,CheckedTextView可以正常工作。

但是我需要在组中的单选按钮之间保留切换功能,这样对我来说效果更好:

        <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:button="@null"
            android:drawableRight="@android:drawable/btn_radio"
            android:gravity="left|center_vertical"
            android:layout_marginLeft="-32dp"
            android:text="Radio Button 1" />

        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:button="@null"
            android:drawableRight="@android:drawable/btn_radio"
            android:gravity="left|center_vertical"
            android:layout_marginLeft="-32dp"
            android:text="Radio Button2" />

    </RadioGroup>

根据需要调整android:layout_marginLeft

答案 3 :(得分:6)

对于RTL语言,Arabic使用:

        <RadioGroup
            android:id="@+id/rgNewsFilter"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <RadioButton
                android:id="@+id/rbAllNews"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="-32dp"
                android:button="@null"
                android:drawableRight="@android:drawable/btn_radio"
                android:gravity="right|center_vertical"
                android:text="ذنيسبمنشخصث"
                android:textColor="#ffffff" />

            <RadioButton
                android:id="@+id/rbMyTeam"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="-32dp"
                android:button="@null"
                android:drawableRight="@android:drawable/btn_radio"
                android:gravity="right|center_vertical"
                android:text="تشسيبتسيتبتسيب"
                android:textColor="#ffffff" />
        </RadioGroup>

答案 4 :(得分:2)

这可以使用CheckedTextView完成;见android RadioButton option on the right side of the text

答案 5 :(得分:0)

Android有一个内置的布局,您可以使用 - android.R.layout.simple_list_item_single_choice

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<CheckedTextView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeightSmall"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorSingle"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />

如果要修改它,可以将上述内容复制粘贴到新的XML文件中,然后使用<include>标记将其包含在其他布局中(Apache 2.0 License下)。您也可以将其用作列表项,并保持不变。