アクティビティの表示サイズを知るにはどうすればよいですか?
アクティビティを実際のサイズにしようとしています。getHeight()
およびgetWidth()
の高さと幅ではありません。
これにより、画面がフルサイズになります。
アクティビティの正確な高さを知る方法を見つけました。タイトルバーとタスクバーの背後にある利用可能なすべての画面を埋めるビューがある場合は、getBottom()
を使用してその実際の高さを取得します。アクティビティ。
I 思考Activity.getWindow()
とWindow.getDecorView()
を見て、その幅/高さを取得します。
ルートレイアウトを使用してそれを行いましたが、問題は、onCreate/onStart/onResumeメソッドが最初に実行されているときに、この情報(幅と高さ)を取得できないことです。
その後、ルートレイアウト(LinearLayout/FrameLayout/TableLayout/etc)からサイズを取得できます。私の場合、FrameLayoutを使用していました。
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getMeasuredWidth() );
Log.d(TAG, "height " + f.getMeasuredHeight() );
または:
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getRight() );
Log.d(TAG, "height " + f.getBottom() );
ここから編集----------------------------------------------- ---------
OnCretedメソッドでこの情報を取得する方法を見つけましたが、アクティビティが複数ある場合に限ります。私の場合、2番目のアクティビティを呼び出すメインアクティビティがあります。
Second_activityを呼び出す前のmain_activityで、新しいItentによって、second_activityの追加情報を追加できます。最初のアクティビティで必要なコードは次のとおりです。
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("width", f.getMeasuredWidth());
i.putExtra("height", f.getMeasuredHeight());
startActivity(i);
その後、2番目のアクティビティで、それを行う2番目のアクティビティのonCreateメソッドでこの情報を取得できます。
int width = getIntent().getExtras().getInt("width");
int height = getIntent().getExtras().getInt("height");
時間の節約になる答えがもっと好きです。
myActivity.getWindow().getDecorView().getHeight();
myActivity.getWindow().getDecorView().getWidth();
DataBindingを使用している場合(そうあるべきです)、binding.getRoot().getHeight()
を呼び出すことができます。ここでbinding
は、DataBindingUtil.setContentView()
またはその他のViewDataBinding
メソッドで作成されたDataBindingUtil
です。レイアウトのサイズが決まるまで待つ必要があります。これは次のようにできます。
binding.getRoot().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = binding.getRoot().getHeight();
}
});
OnGlobalLayoutListenerを削除する必要があります。削除しないと、レイアウトが変更されるたびにこれが実行されます。
getDefaultSize
関数を使用して正しいビューサイズを取得する簡単な方法があります。アクティビティ全体にまたがるビューの場合、次のアプローチを使用してアクティビティクライアント領域のディメンションを取得できます。
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int viewWidth = getDefaultSize(getWidth(), widthMeasureSpec);
int viewHeight = getDefaultSize(getHeight(), heightMeasureSpec);
...
}
アクティビティ全体でビューを拡張するには:
MyView testView = new MyView(this);
LinearLayout testViewGroup = new LinearLayout(this);
testView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.addView(testView);
setContentView(testViewGroup);
アクティビティの高さを取得します。
public static int getActivityHeight(Activity activity)
{
return activity.findViewById(Android.R.id.content).getHeight();
}
アクティビティの幅を取得する
public static int getActivityWidth(Activity activity)
{
return activity.findViewById(Android.R.id.content).getWidth();
}
OnCreate()/ onStart()/ onResume()メソッドで高さと幅を0として取得します。理由は、サイズがまだ設定されていないことです。現在のサイズを知りたい場合は、このメソッドのいずれかでオブザーバーを使用し、現在のサイズを取得したときに必要なことを行うことをお勧めします。
constraint_layoutは、以下のコードのレイアウトルート要素です。
ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraint_layout);
constraintLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
constraintLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int width = constraintLayout.getWidth();
int height = constraintLayout.getHeight();
doSmthMethod(width, height);
}
});