5

画面サイズとデバイスごとに異なるレイアウトを使用しています。特定のレイアウトフォルダでフラグメントを使用しています。コンセプトは素晴らしいです。大画面のタブレットやデバイスの場合、レイアウトファイルを layout-sw600dpに配置すると、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{
//
}
4

2 に答える 2

2

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

各レイアウトで、レイアウトのルートにタグを追加し、すべてのレイアウトルートが同じ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);

これにより、現在使用中のレイアウトルートが返されます。ここで、正確にどのレイアウトであるかを判別し、適切なコードを実行するために、一連のif-elseブロックを使用します。

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...

したがって、基本的にこれを使用すると、実行時にロードされたレイアウトを確認し、適切なコードを実行できます。

于 2012-07-30T08:15:49.463 に答える
1

ここでこの質問と同じ解決策を探していると思いますが、

アプリケーションでAndroidによって選択されているレイアウトを検出するにはどうすればよいですか?

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

  1. 1つ目は、valuesフォルダーにconfigを使用し、そこからxmlファイルから文字列を取得してクロスチェックすることです。(フラグとして使用するため)。

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

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

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

于 2012-07-30T07:40:42.103 に答える