AppCompat支持RTL

时间:2015-06-18 08:45:05

标签: android android-appcompat

我最近一直在研究支持RTL文本和布局。根据{{​​3}},android会自动为API-17支持并切换layoutDirection,这就是添加StartEnd重力的原因。现在的问题是如何以类似的方式为API-17之前提供支持。

此问题之前已被多次询问,一般解决方案是检查区域设置或文本,然后根据需要设置重力。至少它比this post之类的解决方案需要更少的工作量。

我现在重新审视此问题的原因是因为我注意到support-v7-appcompat的更新,现在包含AppCompatTextViewLinearLayoutCompat等类。据我所知,这些支持库的重点是模仿以后Android版本的默认行为。 我创建了一个布局来测试它。

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#80ccffee">
<android.support.v7.widget.AppCompatTextView
      android:id="@+id/textview"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_alignParentBottom="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

当我给textview一个阿拉伯字符串时,它被正确检测为RTL文本并在API-17设备上自动右对齐,其中同时发生API-10设备。我可能误解了AppCompatTextView的目的,但GravityCompat.START的存在向我建议它的意图是解决方法。

然后我将textview包裹在LinearLayoutCompat中,而不是希望布局的方向会影响它,但没有运气。

所以我的问题是:新的AppCompat更新中是否有一种机制可用于支持RTL而无需在代码中设置每个TextView的重力?

1 个答案:

答案 0 :(得分:0)

是的,有!

您可以通过覆盖主题的默认属性来实现所需的目标,如下所述:

转到res->值-> styles.xml

像这样覆盖属性:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="android:textDirection">rtl</item>
    <item name="android:gravity">start</item>
</style>