【问题标题】:How to set text position to the right of a Switch (like CheckBox)如何将文本位置设置在开关的右侧(如 CheckBox)
【发布时间】:2017-08-31 14:08:24
【问题描述】:

如何将文本位置设置在 Switch 右侧 在 LinearLayout 中对齐 Switch 和 TextView ?我试图在我的 style.xml 按钮中覆盖 CheckBox 按钮样式,但我不知道如何获取 Switch 按钮参考?

【问题讨论】:

  • 尝试设置android:gravity="RIGHT"属性。
  • @TasosMoustakas 不,它不起作用。

标签: java android xml


【解决方案1】:

我最近遇到了同样的问题,因为我不想像我遇到的所有答案所建议的那样将我的布局包装在一个额外的容器中。

我发现通过在开关中添加 android:layoutDirection="rtl" 可以更改文本的方向,因为 Android 知道该视图应该由从右到左阅读的人阅读/使用。

请参阅下面的完整 sn-p,包括拇指和文本之间的额外填充

<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:switchPadding="16dp"
    android:layoutDirection="rtl"
    android:text="Your Text" />

更新

我决定更新此内​​容以供将来参考,因为 cmets 中的声明是错误的,并且操作“不接受”此答案,即使问题状态为“未在 LinearLayout 中对齐 Switch 和 TextView”,而当前接受的答案确实如此.

提供的解决方案是告诉特定小部件更改其布局方向,并通过这样做将其从“LTR”(从左到右)翻转到“RTL”(从右到左)。

如果您不愿意嵌套布局,这是一个可行的解决方案。

测试

  1. 将小部件布局方向设置为“RTL”
  2. 运行应用程序
  3. 转到设置 > 开发人员选项 > 强制 RTL 布局方向
  4. 观察布局

所有其他小部件的方向将翻转为“RTL”,因为默认情况下它们位于“LTR”上,并且 Switch 不会发生任何事情,因为它已经处于正确的配置中。检查下面的图片。

布局方向“LTR”默认

布局方向“RTL”

【讨论】:

  • 这不会导致 RTL 布局出现问题吗?
  • 这也反映了导致用户体验问题的开关本身。
  • @Dogcat 在否决我的答案之前,您是否阅读过操作问题?当您更改布局方向时,显然会更改开关方向。这是许多人的解决方案,并且由于操作没有提供有关所需 UI 的要求,因此多次解决了他的问题。如果您正在寻找适合您的 UI/UX 的特定解决方案,您应该发布自己的问题或尝试按照下面的答案进行操作。
  • 是的,我有,您的解决方案超出了 OP 的要求。我想说的是,应用“rtl”不仅会更改文本对齐方式,还会翻转可绘制的开关本身:它变为“不活动时在右侧的圆圈 - 活动时在左侧的圆圈”。这确实是一个 UI/UX 问题,只会让您的用户感到困惑,因为在几乎所有其他应用程序中,LTR 拼写系统反之亦然。
  • 这就是为什么被称为“layoutDirection”,它显然会翻转一切。您犯的错误是假设所有 UI/UX 要求都完全相同,这是完全错误的。即使是 Material Design Guideline 也只是 Google 本身并不一直遵循的指南。所以在现实世界中,Switch 将在不同的情况下与其他小部件组合使用或单独使用,这就是为什么该解决方案适用于 op 并且多次适用于我的原因。
【解决方案2】:

有两种方式,但不推荐使用负填充,所以第二种方式。

=>使用单独的文本视图

        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:layout_height="wrap_content">
            <Switch
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/switch1" />
            <TextView
                android:layout_width="wrap_content"
                android:text="This is a switch"
                android:layout_height="wrap_content" />
        </LinearLayout>

编辑 - 没有直接的方法,只能使用负填充、父布局或任何自定义库。 请参阅herehere
忘记这个并使用this library

【讨论】:

  • 感谢您的回答,但这正是我不想做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2018-08-04
  • 2020-09-27
  • 2017-12-05
相关资源
最近更新 更多