查看特定View的默認屬性值

  當我在分析focus、touch事件處理代碼時發現,有些屬性對代碼的邏輯有很是重要的影響,好比clickable、focusablehtml

這些屬性。這時咱們天然而然的想到,那麼這些屬性的默認值是什麼呢?在工做中我也不少次有一樣的疑問。當初我也不是android

很清楚,基本都是手動在xml裏面設置下。相信和我同樣的人還有不少,今天我就告訴你們怎麼經過Android源碼來快速查看這些默認值。ide

  好比咱們常常用到的TextView,感受上來講,它應該是不能點擊的,也就是clickable默認應該是false。接下來,咱們經過this

源碼來看看究竟是不是這樣,先來看其2個參數的ctor,代碼以下:spa

    public TextView(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.textViewStyle);
    }

經過代碼咱們看到實際上調用了3個參數的版本,且第3個參數給的是com.android.internal.R.attr.textViewStyle。接着咱們去code

系統的attrs.xml看看,找到了相似這樣的代碼:orm

<!-- Default TextView style. -->
<attr name="textViewStyle" format="reference" />

這些屬性具體的值是在系統的themes.xml文件中設置的,具體見:xml

<style name="Theme">
<item name="textViewStyle">@android:style/Widget.TextView</item>
</style>

<style name="Theme.Holo">
<item name="textViewStyle">@android:style/Widget.Holo.TextView</item>
</style>

<style name="Theme.Holo.Light">
<item name="textViewStyle">@android:style/Widget.Holo.Light.TextView</item>
</style>

而後咱們再去styles.xml文件中看看,這些style是如何設置的,代碼以下:htm

    <style name="Widget.TextView">
        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
        <item name="android:textSelectHandleLeft">?android:attr/textSelectHandleLeft</item>
        <item name="android:textSelectHandleRight">?android:attr/textSelectHandleRight</item>
        <item name="android:textSelectHandle">?android:attr/textSelectHandle</item>
        <item name="android:textEditPasteWindowLayout">?android:attr/textEditPasteWindowLayout</item>
        <item name="android:textEditNoPasteWindowLayout">?android:attr/textEditNoPasteWindowLayout</item>
        <item name="android:textEditSidePasteWindowLayout">?android:attr/textEditSidePasteWindowLayout</item>
        <item name="android:textEditSideNoPasteWindowLayout">?android:attr/textEditSideNoPasteWindowLayout</item>
        <item name="android:textEditSuggestionItemLayout">?android:attr/textEditSuggestionItemLayout</item>
        <item name="android:textCursorDrawable">?android:attr/textCursorDrawable</item>
    </style>

這些就是TextView默認的屬性值,沒設置的clickable、focusable就是false。一樣的方式咱們看看TextView的子類Button是如何設置的:blog

    <style name="Widget.Button">
        <item name="android:background">@android:drawable/btn_default</item>
        <item name="android:focusable">true</item>
        <item name="android:clickable">true</item>
        <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item>
        <item name="android:textColor">@android:color/primary_text_light</item>
        <item name="android:gravity">center_vertical|center_horizontal</item>
    </style>

咱們能夠看到Button默認的focusable和clickable都是true,這裏也設置了其餘幾個常見的屬性如background、textColor、gravity等。

最後咱們看下EditText的,代碼以下:

    <style name="Widget.EditText">
        <item name="android:focusable">true</item>
        <item name="android:focusableInTouchMode">true</item>
        <item name="android:clickable">true</item>
        <item name="android:background">?android:attr/editTextBackground</item>
        <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
        <item name="android:textColor">?android:attr/editTextColor</item>
        <item name="android:gravity">center_vertical</item>
    </style>

相對Button來講,其focusableInTouchMode也默認爲true,這樣保證即便在touch mode下,EditText也能得到focus,用戶可以分清楚

正在接受輸入的控件是哪一個。

  這篇文章算是開發過程當中的小技巧,經過這裏介紹的方法你就能夠很輕鬆的知道任意一個Android view的默認屬性值了。最後推薦一篇

園友的關於自定義樣式&屬性值獲取的文章:http://www.cnblogs.com/angeldevil/p/3479431.html。

相關文章
相關標籤/搜索