2012-07-30 8 views
5

私は異なるスクリーンサイズとデバイスに異なるレイアウトを使用します。特定のレイアウトフォルダでフラグメントを使用します。 大画面のタブレットとデバイスのコンセプトは、レイアウトファイルを layout-sw600dpに置き、Androidはさまざまなデバイスで適切なレイアウトを配信するよう管理しています。Androidのさまざまなレイアウトに異なるプログラミングロジックを分ける最善の方法は何ですか?

どのようなバグですか?コード内でどのようなレイアウトが使用されているかを知るにはどうすればよいですか。 私の断片には、さまざまなレイアウトのコードが少し異なります。

一般的に、私のフラグメント/アクティビティ内でカスタムレイアウトプログラミングロジックを分離するベストプラクティスは何ですか?

私のアプローチは今やハッキーであり、さまざまなレイアウトフォルダと同期していません。

private boolean isTabletDevice() { 
    if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb 
     // test screen size, use reflection because isLayoutSizeAtLeast is 
     // only available since 11 
     Configuration con = getResources().getConfiguration(); 
     try { 
     Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); 
     Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE 
     return r; 
     } catch (Exception x) { 
     x.printStackTrace(); 
     return false; 
     } 
    } 
    return false; 
    } 

、その後

if(isTabletDevice()) { 
//findViewById(R.id.onlyInTabletLayoutButton); 
}else{ 
// 
} 

答えて

2

これは私が個人的に使う方法です:

を各レイアウトでは、私は、レイアウトのルートにTagを追加し、レイアウトの根がすべて同じであることを確認してくださいid。したがって、たとえば、私のようなものになり、レイアウトがあります:

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="landscapehdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

をそして同様に別のものを持っている:レイアウトは、私が使用し、膨張された後、次に

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="portraitmdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

View rootView = (View) findViewById(R.id.rootView); 

現在使用中のレイアウトルートを返します。

String tag = rootView.getTag().toString(); 

if(tag.equals("landscapehdpi")) 
{ 
//Code for the landscape hdpi screen 
} 
else if(tag.equals("portraitmdpi")) 
{ 
//Code for the portrait mdpi screen 
} 
//And so on... 

だから、基本的には実行時にロードされたレイアウトを知っているし、適切なを実行することができ、これを使用した:今、それは正確にレイアウトを決定し、適切なコードを実行するために、私はのif-elseブロックのシリーズを使用しますコード。

1

私は

How can I detect which layout is selected by Android in my application?、あなたはここにこの質問と同じソリューションを探していると思います。

ベストアンサーを表示したい場合は、2つのオプションがあります。

  1. 最初に、値のフォルダにconfigを使用し、XMLファイルから文字列を取得してクロスチェックします。 (フラグとして使用する)。

https://stackoverflow.com/a/11670441/603744

  1. そして、次はあなたのレイアウトにタグを設定し、あなたのコードからタグを取得し、それが印刷されたタグを見つけるために、それに基づいて、それが使用されているもののレイアウトを見つけることです。しかし、このアプローチには少しバグがあることにも注意する必要があります。しかし、私はまだそれらを疲れさせていません。

https://stackoverflow.com/a/11205220/603744

関連する問題