我最近一直在研究支持RTL文本和布局。根据这个职位的说法,安卓将为API-17自动支持和切换layoutDirection,这就是为什么增加Start和End重力的原因。现在的问题是如何以类似的方式支持pre API-17。
这个问题以前已经问过很多次了,一般的解决办法是检查区域或文本,然后根据需要设置重力。至少,与这这样的解决方案相比,这需要更少的精力。
我现在重新讨论这个问题的原因是我注意到了对support-v7-appcompat的更新,它现在包含AppCompatTextView和LinearLayoutCompat等类。据我所知,这些支持库的目的是模仿以后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的重力?
发布于 2020-04-29 13:31:52
是的,有!
您可以通过覆盖主题的默认属性来实现您想要的结果,如下所述:
转到res -> value -> styles.xml
覆盖以下属性:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="android:textDirection">rtl</item>
<item name="android:gravity">start</item>
</style>https://stackoverflow.com/questions/30910528
复制相似问题