アプリが現在使用しているレイアウト (layout-normal、layout-large など) をプログラムで判断するにはどうすればよいですか? getWindowManager().getDefaultDisplay().getMetrics(metrics) 呼び出しが表示されますが、画面密度のみを処理しているように見えますが、アプリが使用しているレイアウトは必要ありません。実行時にビューの配置の一部をプログラムで動的に変更する必要があるため、情報が必要です。
前もって感謝します。
アプリが現在使用しているレイアウト (layout-normal、layout-large など) をプログラムで判断するにはどうすればよいですか? getWindowManager().getDefaultDisplay().getMetrics(metrics) 呼び出しが表示されますが、画面密度のみを処理しているように見えますが、アプリが使用しているレイアウトは必要ありません。実行時にビューの配置の一部をプログラムで動的に変更する必要があるため、情報が必要です。
前もって感謝します。
これを行う非常に簡単な方法は、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
}
私も同じ問題を抱えていました。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
}
次のコードが役立ちます。対応する画面サイズまたは密度カテゴリを印刷しました。あなたがやりたいことは何でもできます!
//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");
}
同じものを探していました!私は2つの同様の質問/回答を見つけました:
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言語で質問する方法がわからなかったことです。それがおそらく、同じ質問が非常に多くの異なる方法で行われた、そしておそらくそうあるべきである理由です。
ViewGroup view = (ViewGroup)getWindow().getDecorView();
LinearLayout content = (LinearLayout)view.getChildAt(0);
int id = content.getId();
id は、使用しているレイアウトを示します (XML で id タグを設定すると仮定します)。