2017-03-31 54 views
2

我有一個TextView在我的活動中應該是visible通常,但gone爲平板設備。Android - 如何根據設備在xml中設置可見性?

我知道我可以創建適用於平板電腦一個新的佈局文件,但好像很多重複的,所以我試圖做的就是在我的(單)佈局文件,像設定...

android:visibility="@string/my_textview_visibility"

...對於TextView。然後,在我的字符串資源文件,設置...

<string name="my_textview_visibility">gone</string>(在值/ strings.xml中

......還有......

<string name="my_textview_visibility">visible</string>(在價值觀sw720dp /strings.xml

...隱藏平板電腦的TextView。

但是,當我嘗試這樣做時,應用程序在嘗試顯示該活動時崩潰。

我需要使用常量,而不是上面的字符串值 - 例如,

"visible" - >0

"gone" - >8

..和,如果是這樣,是什麼從我的XML文件中添加/引用這些值的正確方法?

或者還有其他更好的方法嗎?

注意 - 我不想在我的Java代碼中以編程方式顯示/隱藏TextView

+0

任何理由,你不想以編程方式做到這一點是不正確的?因爲它非常簡單。 – randy

+0

是的,我寧願控制XML中的所有佈局,並儘可能保持Java獨立。 –

回答

3

您應該使用/values/integers/代替:

值/ integers.xml

<integer name="my_textview_visibility">0</integer> <!-- 0 = View.VISIBLE --> 

價值觀sw720dp/integers.xml

<integer name="my_textview_visibility">2</integer> <!-- 2 = View.GONE --> 

然後叫像這樣:

android:visibility="@integer/my_textview_visibility" 
+0

只是爲了完成,你不必使用'/ values/integers /'和'strings.xml'。你只需要定義一個類型爲'integer'的android資源。 –

+0

傳統上,聲明這些整數的最佳位置在哪裏? –

+1

我不認爲有一個約定。一個好主意可能是擁有所有整數的'values/integers.xml'文件,類似於通常用'values/strings.xml'完成的文件。 –

0

正如您所說,最好的辦法是爲tablets創建一個特定的layout,其中TextView將被隱藏。然而,這有可能使用xml boolean resources要做到:(爲res/values-sw600dp/):

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

因爲sw600dp限定符僅適用於Android 3.2的上方平臺。如果你想確保這項技術適用於所有平臺(3之前)。2),在res/values-xlarge文件夾中創建相同的文件:在你活動

<resources> 
    <bool name="isTablet">false</bool> 
</resources> 

然後:

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

然後,在 「標準」 值文件(如res/values/),您的布爾設置爲false ,你可以得到這個值,並檢查您是否在平板大小的設備上運行:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 
if (tabletSize) { 
    // do something 
} else { 
    // do something else 
} 

字體:Determine if the device is a smartphone or tablet?

+1

這個問題明確指出:'NB - 我不想在我的Java代碼中以編程方式顯示/隱藏TextView.' –

3

ChrisStillwell的回答是正確的。但值根據Android文檔

enter image description here

+0

你是對的,我原來的答案中的'8'值給出錯誤。我沒有仔細檢查這些值,只是按照OP所說的去做。感謝您的更正。 – ChrisStillwell

+0

我從這裏得到了'8':https://developer.android.com/reference/android/view/View.html#GONE –

+1

我明白了,但是你想使用屬性值而不是java常數值。 https://developer.android.com/reference/android/view/View.html#attr_android:visibility –