資源文件 Resources

2018-02-24 16:13 更新
  • 命名?遵循前綴表明類型的習(xí)慣,形如type_foo_bar.xml。例如:fragment_contact_details.xml,view_primary_button.xml,activity_main.xml.

組織布局文件?若果你不確定如何排版一個布局文件,遵循一下規(guī)則可能會有幫助。

  • 每一個屬性一行,縮進(jìn)4個空格
  • android:id?總是作為第一個屬性
  • android:layout_****?屬性在上邊
  • style?屬性在底部
  • 關(guān)閉標(biāo)簽/>單獨(dú)起一行,有助于調(diào)整和添加新的屬性
  • 考慮使用Designtime attributes 設(shè)計時布局屬性,Android Studio已經(jīng)提供支持,而不是硬編碼android:text?(譯者注:墻內(nèi)也可以參考stormzhang的這篇博客鏈接)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="@string/name"
        style="@style/FancyText"
        />

    <include layout="@layout/reusable_part" />

</LinearLayout>

作為一個經(jīng)驗(yàn)法則,android:layout_****屬性應(yīng)該在 layout XML 中定義,同時其它屬性android:****?應(yīng)放在 styler XML中。此規(guī)則也有例外,不過大體工作 的很好。這個思想整體是保持layout屬性(positioning, margin, sizing) 和content屬性在布局文件中,同時將所有的外觀細(xì)節(jié)屬性(colors, padding, font)放 在style文件中。

例外有以下這些:

  • android:id?明顯應(yīng)該在layout文件中
  • layout文件中android:orientation對于一個LinearLayout布局通常更有意義
  • android:text?由于是定義內(nèi)容,應(yīng)該放在layout文件中
  • 有時候?qū)?code>android:layout_width?和?android:layout_height屬性放到一個style中作為一個通用的風(fēng)格中更有意義,但是默認(rèn)情況下這些應(yīng)該放到layout文件中。

使用styles?幾乎每個項(xiàng)目都需要適當(dāng)?shù)氖褂胹tyle文件,因?yàn)閷τ谝粋€視圖來說有一個重復(fù)的外觀是很常見的。 在應(yīng)用中對于大多數(shù)文本內(nèi)容,最起碼你應(yīng)該有一個通用的style文件,例如:

<style name="ContentText">
    <item name="android:textSize">@dimen/font_normal</item>
    <item name="android:textColor">@color/basic_black</item>
</style>

應(yīng)用到TextView 中:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/price"
    style="@style/ContentText"
    />

你或許需要為按鈕控件做同樣的事情,不要停止在那里。將一組相關(guān)的和重復(fù)android:****的屬性放到一個通用的style中。

將一個大的style文件分割成多個文件?你可以有多個styles.xml?文件。Android SDK支持其它文件,styles這個文件名稱并沒有作用,起作用的是在文件 里xml的`標(biāo)簽。因此你可以有多個style文件styles.xml,style_home.xml,style_item_details.xml,styles_forms.xml。 不用于資源文件路徑需要為系統(tǒng)構(gòu)建起的有意義,在res/values`目錄下的文件可以任意命名。

colors.xml是一個調(diào)色板?在你的colors.xml文件中應(yīng)該只是映射顏色的名稱一個RGBA值,而沒有其它的。不要使用它為不同的按鈕來定義RGBA值。

不要這樣做

<resources>
    <color name="button_foreground">#FFFFFF</color>
    <color name="button_background">#2A91BD</color>
    <color name="comment_background_inactive">#5F5F5F</color>
    <color name="comment_background_active">#939393</color>
    <color name="comment_foreground">#FFFFFF</color>
    <color name="comment_foreground_important">#FF9D2F</color>
    ...
    <color name="comment_shadow">#323232</color>

使用這種格式,你會非常容易的開始重復(fù)定義RGBA值,這使如果需要改變基本色變的很復(fù)雜。同時,這些定義是跟一些環(huán)境關(guān)聯(lián)起來的,如button或者comment, 應(yīng)該放到一個按鈕風(fēng)格中,而不是在color.xml文件中。

相反,這樣做:

<resources>

    <!-- grayscale -->
    <color name="white"     >#FFFFFF</color>
    <color name="gray_light">#DBDBDB</color>
    <color name="gray"      >#939393</color>
    <color name="gray_dark" >#5F5F5F</color>
    <color name="black"     >#323232</color>

    <!-- basic colors -->
    <color name="green">#27D34D</color>
    <color name="blue">#2A91BD</color>
    <color name="orange">#FF9D2F</color>
    <color name="red">#FF432F</color>

</resources>

向應(yīng)用設(shè)計者那里要這個調(diào)色板,名稱不需要跟"green", "blue", 等等相同。 "brand_primary", "brand_secondary", "brand_negative" 這樣的名字也是完全可以接受的。 像這樣規(guī)范的顏色很容易修改或重構(gòu),會使應(yīng)用一共使用了多少種不同的顏色變得非常清晰。 通常一個具有審美價值的UI來說,減少使用顏色的種類是非常重要的。

像對待colors.xml一樣對待dimens.xml文件?與定義顏色調(diào)色板一樣,你同時也應(yīng)該定義一個空隙間隔和字體大小的“調(diào)色板”。 一個好的例子,如下所示:

<resources>

    <!-- font sizes -->
    <dimen name="font_larger">22sp</dimen>
    <dimen name="font_large">18sp</dimen>
    <dimen name="font_normal">15sp</dimen>
    <dimen name="font_small">12sp</dimen>

    <!-- typical spacing between two views -->
    <dimen name="spacing_huge">40dp</dimen>
    <dimen name="spacing_large">24dp</dimen>
    <dimen name="spacing_normal">14dp</dimen>
    <dimen name="spacing_small">10dp</dimen>
    <dimen name="spacing_tiny">4dp</dimen>

    <!-- typical sizes of views -->
    <dimen name="button_height_tall">60dp</dimen>
    <dimen name="button_height_normal">40dp</dimen>
    <dimen name="button_height_short">32dp</dimen>

</resources>

布局時在寫 margins 和 paddings 時,你應(yīng)該使用spacing_****尺寸格式來布局,而不是像對待String字符串一樣直接寫值。 這樣寫會非常有感覺,會使組織和改變風(fēng)格或布局是非常容易。

避免深層次的視圖結(jié)構(gòu)?有時候?yàn)榱藬[放一個視圖,你可能嘗試添加另一個LinearLayout。你可能使用這種方法解決:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <RelativeLayout
        ...
        >

        <LinearLayout
            ...
            >

            <LinearLayout
                ...
                >

                <LinearLayout
                    ...
                    >
                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

    </RelativeLayout>

</LinearLayout>

即使你沒有非常明確的在一個layout布局文件中這樣使用,如果你在Java文件中從一個view inflate(這個inflate翻譯不過去,大家理解就行) 到其他views當(dāng)中,也是可能會發(fā)生的。

可能會導(dǎo)致一系列的問題。你可能會遇到性能問題,因?yàn)樘幚砥鹦枰幚硪粋€復(fù)雜的UI樹結(jié)構(gòu)。 還可能會導(dǎo)致以下更嚴(yán)重的問題StackOverflowError.

因此盡量保持你的視圖tree:學(xué)習(xí)如何使用RelativeLayout, 如何?optimize 你的布局?和如何使用?``?標(biāo)簽.

小心關(guān)于WebViews的問題.?如果你必須顯示一個web視圖, 比如說對于一個新聞文章,避免做客戶端處理HTML的工作, 最好讓后端工程師協(xié)助,讓他返回一個 "" HTML。?WebViews 也能導(dǎo)致內(nèi)存泄露?當(dāng)保持引他們的Activity,而不是被綁定到ApplicationContext中的時候。 當(dāng)使用簡單的文字或按鈕時,避免使用WebView,這時使用TextView或Buttons更好。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號