10

アプリが現在使用しているレイアウト (layout-normal、layout-large など) をプログラムで判断するにはどうすればよいですか? getWindowManager().getDefaultDisplay().getMetrics(metrics) 呼び出しが表示されますが、画面密度のみを処理しているように見えますが、アプリが使用しているレイアウトは必要ありません。実行時にビューの配置の一部をプログラムで動的に変更する必要があるため、情報が必要です。

前もって感謝します。

4

6 に答える 6

32

これを行う非常に簡単な方法は、ID とタグを親レイアウトに設定することonCreate()です。findViewById()getTag()

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/my_activity_view"
    android:tag="big_screen" >
        // misc views~
</RelativeLayout>

そして、あなたのonCreate方法では、

if(findViewById(R.id.my_activity_view).getTag().equals("big_screen")) {
    // do stuff
}
于 2013-02-08T03:30:34.767 に答える
22

私も同じ問題を抱えていました。layout/ layout-sw600dp/を使用している場合layout-sw720dp、次のことがうまくいきました。

Configuration config = activity.getResources().getConfiguration();

if (config.smallestScreenWidthDp >= 720) {
  // sw720dp code goes here
}
else if (config.smallestScreenWidthDp >= 600) {
  // sw600dp code goes here
}
else {
  // fall-back code goes here
}
于 2013-12-17T20:11:18.140 に答える
3

次のコードが役立ちます。対応する画面サイズまたは密度カテゴリを印刷しました。あなたがやりたいことは何でもできます!

//Determine screen size
    if ((getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
    {     
        Log.d("Screen Size: ", "LARGE");

    }
    else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {     
        Log.d("Screen Size: ", "NORMAL");

    } 
    else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {     
        Log.d("Screen Size: ", "SMALL");
    }
    else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {     
        Log.d("Screen Size: ", "XLARGE");
    }
    else {
        Log.d("Screen Size: ","UNKNOWN_CATEGORY_SCREEN_SIZE");
    }




    //Determine density
    DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int density = metrics.densityDpi;

        if (density==DisplayMetrics.DENSITY_HIGH) {
            Log.d("Screen Density: ","HIGH");
        }
        else if (density==DisplayMetrics.DENSITY_MEDIUM) {
            Log.d("Screen Density: ","MEDIUM");
        }
        else if (density==DisplayMetrics.DENSITY_LOW) {
            Log.d("Screen Density: ","LOW");
        }
        else if (density==DisplayMetrics.DENSITY_XHIGH) {
            Log.d("Screen Density: ","XHIGH");
        }
        else if (density==DisplayMetrics.DENSITY_XXHIGH) {
            Log.d("Screen Density: ","XXHIGH");
        }
        else {
            Log.d("Screen Density: ","UNKNOWN_CATEGORY");
        }
于 2014-01-30T04:44:42.287 に答える
2

同じものを探していました!私は2つの同様の質問/回答を見つけました:

ScreenLayoutの取得

ScreenLayoutビットマスクの使用

3つの質問はすべて基本的に同じですが、結果を得るには両方の答えが本当に必要です。

このコードを使用して、アクティビティ内のレイアウトサイズを取得しました。

int layoutSize = getResources().getConfiguration().screenLayout;
layoutSize = layoutSize & Configuration.SCREENLAYOUT_SIZE_MASK;

最初の行はレイアウトサイズを返しますが、これはほぼ最大サイズの数値になりますint

2行目は、指定されたマスクを使用してレイアウトサイズをANDします。マスクの値は、10進数で15、16進数でFです。

返される値は0〜3です。画面サイズに対応する値とサイズマスクの値は、android.content.res.Configurationクラスの定数として定義されています:AndroidConfigruationDocumentation

layoutSize前の2行の後で行う必要があるのは、返されたをConfigurationの事前定義された値と比較する、ある種のswitchステートメントを用意することSCREENLAYOUT_SIZE_XXXです。

これを使用するのに遅すぎないことを願っています。私の問題は、正確なAndroid言語で質問する方法がわからなかったことです。それがおそらく、同じ質問が非常に多くの異なる方法で行われた、そしておそらくそうあるべきである理由です。

于 2012-07-26T14:41:46.173 に答える
0
ViewGroup view = (ViewGroup)getWindow().getDecorView();
LinearLayout content = (LinearLayout)view.getChildAt(0);
int id = content.getId();

id は、使用しているレイアウトを示します (XML で id タグを設定すると仮定します)。

于 2012-05-21T16:55:14.297 に答える