Android 開發之布局細節對比:RTL模式

來源:互聯網
上載者:User

前言

講真,好久沒寫部落格了,2016都過了一半了,趕緊重新撿起來。(個人感慨,和內容無關……
所謂RTL,顧名思義也就是Right To Left,是一種阿拉伯語、波斯語等情況下從右往左的閱讀方式。當所開發的App等面向海外使用者時需要做這個適配。

從Android 4.2開始支援原生的RTL模式,對此之前的版本我也不想多做說明,這些老版本要是還支援那Android片段化就沒完沒了了。

本文

如何查看效果

首先要說的是,想要看RTL模式,不必去把手機中的語言/國家設定到阿拉伯等,只需要在“開發人員選項”中勾選“強制使用從右至左的布局方向“,這樣真的是方便太多了。

此處以MIUI為例,大家也不妨自己動手試試。

如圖,原本左右兩側的控制項發生了對調,值得注意的是圖中紅色方框標註的表徵圖發生了翻轉(更標準的說法是”鏡像“)。

如何支援RTL

是不是很有意思呢,那麼如果在你的App中適配RTL呢?

1,需要在資訊清單檔總隊RTL的支援做一個聲明,放到< application >節點下。

android:supportsRtl="true"
2,將布局中的”left、right“相關的屬性換成對應的”start、end“屬性。

這一步可能用說的不夠清晰,看代碼看圖!

    <Button
        android:id="@+id/button"
        android:text="A"
        android:layout_width="60dp"
        android:layout_height="40dp" />

    <Button
        android:id="@+id/button2"
        android:text="B"
        android:layout_toRightOf="@id/button"
        android:layout_width="60dp"
        android:layout_height="40dp" />

    <Button
        android:id="@+id/button3"
        android:text="C"
        android:layout_toRightOf="@id/button2"
        android:layout_width="60dp"
        android:layout_height="40dp" />

應該可以看出來這是在一個相對布局中,預設情況下是這樣的:

開啟RTL後,卻是這樣的:

為什麼B、C按鈕不見了?因為根據屬性,它們都在A的右邊,這已經超出的螢幕邊界。

如果我們對布局做一點修改:

android:layout_toRightOf
改成
android:layout_toEndOf

如果有left,也照搬改成start就好。

頁面不想支援RTL怎麼辦

有一些介面你不想它支援RTL,或者它本身不需要支援,那又該如何呢?比如說撥號介面,難道要把數字鍵也鏡像過去嗎:

只需要加上這麼一句就好了呀。

layoutDirect可以使用4種屬性:
ltr:從左往右
rtl:從右往左
inherit:從上層視圖中繼承
locale:由Locale決定

分別對應的int值為0,1,2,3。
圖片怎麼辦
只需要建立一個檔案夾,把鏡像後的圖片放進去即可,代碼中不用做任何修改。

drawable-ldrtl-xhdpi
drawable-xhdpi

解析度是一一對應的


當然了,除了對映像做預先處理外,要是想用代碼直接控制也是可以的。

private ImageView image2;

// 省略

image2 =  (ImageView) findViewById(R.id.image2);

Drawable arrow = getResources().getDrawable(R.drawable.arrow);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    if (arrow != null) {
       arrow.setAutoMirrored(true);
    }
}
image2.setImageDrawable(arrow);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.