我正在構建一個Android應用程序,該應用程序使用不同的佈局文件夾(即大,xlarge等)基於屏幕大小調整大小。我可以以編程方式選擇Android佈局文件夾嗎?
唯一的問題是,我想爲用戶提供一種在小屏幕和大屏幕布局之間切換的方法,以防他們的預蜂窩平板電腦無法識別xlarge標籤,或者設備距離較近手機的大小,但仍然足夠大,用戶想要使用平板電腦佈局。
有沒有一種方法可以創建按鈕來切換佈局文件夾?我仍然想使用基於屏幕大小的自動文件夾選擇,我也想強制應用程序使用一個文件夾或其他。
這可能嗎?
我正在構建一個Android應用程序,該應用程序使用不同的佈局文件夾(即大,xlarge等)基於屏幕大小調整大小。我可以以編程方式選擇Android佈局文件夾嗎?
唯一的問題是,我想爲用戶提供一種在小屏幕和大屏幕布局之間切換的方法,以防他們的預蜂窩平板電腦無法識別xlarge標籤,或者設備距離較近手機的大小,但仍然足夠大,用戶想要使用平板電腦佈局。
有沒有一種方法可以創建按鈕來切換佈局文件夾?我仍然想使用基於屏幕大小的自動文件夾選擇,我也想強制應用程序使用一個文件夾或其他。
這可能嗎?
安卓團隊鼓勵您使用資源限定符來支持任何種類的多設備支持。例如
佈局小的小屏幕 佈局LDPI與低密度 佈局恩的語言環境設備的設備...
讀this它會幫助你很多
但一般不,沒有編程的方式來做到這一點,也許有一些解決方法,但我不鼓勵這樣做。
而且也許你需要看到片段設計,以瞭解GUI像平板電腦和手機不同設備的發展......
是的,可以。這很簡單!我這樣做是因爲傳統(預API級別13)系統不支持較新的佈局文件夾過濾器。具體來說,我需要區分QVGA(小)和WQVGA(正常)以及其他常規分辨率。
只需將各種佈局文件添加到佈局和佈局文件夾文件夾中即可。
layout
my_layout_default.xml
my_layout_qvga.xml
layout-land
my_layout_default.xml
my_layout_qvga.xml
然後,在運行時選擇適當的佈局:
protected void onCreate(Bundle savedInstanceState)
{
// Some code that uses DisplayMetrics to determine the screen type
ScreenType st = Util.getScreenType(this);
super.onCreate(savedInstanceState);
setContentView(st == ScreenType.ST_QVGA ? R.layout.my_layout_qvga : R.layout.my_layout_default);
// ...
您可以將標記添加到每個佈局以發現哪一個是實際加載,如果你喜歡,例如
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_root_view"
android:tag="st_port_QVGA"
FrameLayout flRoot = (FrameLayout)findViewById(R.id.my_root_view);
Object objTag = flRoot.getTag();
if (objTag instanceof String)
{
String strTag = (String)objTag;
System.out.println("Tag = " + strTag);
}
順便說一句,沒有理由不能將此技術與通常的資源限定符結合使用,例如,像my_layout_default.xml文件添加到其他文件夾。
我遇到了非常相似的情況。我的細節片段通常全屏顯示,但在平板電腦上,它有時可能只佔屏幕寬度的70%(在主細節流程中)。當細節片段在平板電腦上全屏時,它應該使用較大的佈局。當細節片段只有寬度的70%時,它應該使用較小的電話佈局。這是我如何處理它。
我有像這樣
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/fragment_detail_force_phone" />
</LinearLayout>
與fragment_detail_force_phone.xml
包含實際佈局要小屏幕(或當它是被顯示在一個片劑僅70%寬度)fragment_detail.xml。這避免了代碼重複。
大布局在sw600dp/fragment_detail.xml
。當我膨脹細節片段時,我檢查getActivity()
以查看這個片段是否正在狹窄的空間中加載,這意味着我想強制手機佈局。如果是這樣,我膨脹R.layout.fragment_detail_force_phone
。由於該佈局沒有平板電腦版本,因此如果我指定了這個版本,它總是會加載電話代碼。否則,我會膨脹R.layout.fragment_detail
,Android會照常照常進行選擇。
但是選擇了R.layout.my_layout_qvga嗎? '佈局'中的那個?或'layout-land'? –