2012-01-20 17 views
2

さまざまなレイアウトフォルダ(大、大きいなど)を使用して画面サイズに基づいてサイズを変更するAndroidアプリを構築しています。Androidレイアウトフォルダをプログラムで選択することはできますか?

唯一の問題は、xlargeタグを認識できないプリハニカムタブレットがある場合や、デバイスが近くにある場合に、ユーザーが小さな画面レイアウトと大きな画面レイアウトを切り替える方法を提供することです携帯電話のサイズにもかかわらず、ユーザーがタブレットレイアウトを使用するのに十分な大きさです。

レイアウトフォルダを切り替えるボタンを作成する方法はありますか?私はまだ画面サイズに基づいて自動フォルダの選択を使用したい、私はちょうどまた、1つのフォルダまたは他のアプリケーションを使用するようにアプリを強制することができるようにしたい。

これは可能ですか?

答えて

6

アンドロイドチームは、あらゆるタイプの複数のデバイスをサポートするためのリソース修飾子を使用することをおすすめします。例えば

レイアウト、小さな小さな画面低密度 レイアウトエンロケールのためのデバイスのための レイアウトLDPIを持つデバイスのための...

は、それはあなたに大いに役立つでしょうthisを読ん

しかし、一般的にいいえ、これを行うためのプログラム的な方法はありません。おそらくいくつかの回避策がありますが、私はそれを行うことを奨励しません。

はまた、多分あなたは、タブレットや携帯電話などのさまざまなデバイスのためのGUIの開発を理解するためのフラグメントデザインを確認する必要があります...

1

はい、できます。それは簡単です!従来の(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); 
    // ... 

あなたが好きな場合は、例えば、実際にロードされた1発見するために、各レイアウトにタグを追加することができます

<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のようなファイルを他のフォルダに追加してください。

+0

しかし、 'R.layout.my_layout_qvga'が選択されましたか? 「レイアウト」のもの?または 'layout-land'? –

0

私はかなり似たような状況に直面しました。私の詳細部分は通常フルスクリーンで表示されますが、タブレットでは画面の幅の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> 

小さな画面(または時にわずか70%の幅を有するタブレットに表示されます)のための実際のレイアウトを含むfragment_detail_force_phone.xmlと等fragment_detail.xmlを有します。これにより、コードの重複が回避されます。

大きなレイアウトはsw600dp/fragment_detail.xmlです。ディテール・フラグメントを膨張させるときに、getActivity()をチェックして、このフラグメントが狭いスペースにロードされているかどうかを確認します。つまり、フォン・レイアウトを強制します。その場合、私はR.layout.fragment_detail_force_phoneを膨らませます。レイアウトのタブレット版がないので、それを指定すると常に電話コードが読み込まれます。それ以外の場合は、私はR.layout.fragment_detailを膨らませ、アンドロイドはいつものように適切に選択します。

関連する問題