相対/線形レイアウトの実行時の寸法が必要でした。
activity_home.xml:
<RelativeLayout
Android:id="@+id/rlParent"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
</RelativeLayout>
HomeActivity.Java:
private int width, height;
RelativeLayout rlParent = (RelativeLayout) findViewById(R.id.rlParent);
w = rlParent.getWidth();
h = rlParent.getHeight();
Log.i("Width-Height", width+"-"+height);
あなたの考えを共有してください。
さて、私はこの方法で実装しました:
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layout);
ViewTreeObserver viewTreeObserver = linearLayout.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
linearLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = linearLayout.getMeasuredWidth();
int height = linearLayout.getMeasuredHeight();
}
});
この例は、Linearレイアウトの場合、Relativeレイアウトの場合は同じプロセスに従います。
これがお役に立てば幸いです。
これを試して
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
updateSizeInfo();
}
private void updateSizeInfo() {
RelativeLayout rlayout = (RelativeLayout) findViewById(R.id.rlayout);
w = rlayout.getWidth();
h = rlayout.getHeight();
Log.v("W-H", w+"-"+h);
}
OnGlobalLayoutListenerを相対レイアウトのViewTreeObserverにアタッチできます。これは、ビューがウィンドウにアタッチされ、実際の高さがウィンドウに割り当てられたときに呼び出されます。
final RelativeLayout rl_cards_details_card_area = (RelativeLayout) findViewById(R.id.rl_cards_details_card_area);
rl_cards_details_card_area.getViewTreeObserver()
.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
int w = rl_cards_details_card_area.getWidth();
int h = rl_cards_details_card_area.getHeight();
Log.v("W-H", w + "-" + h);
rl_cards_details_card_area.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
}
});
レイアウトが完全に膨らんでいないため、アクティビティが作成された直後に、ビューまたはレイアウトの正しい高さと幅が得られない場合があります。
そう
1.実行可能なメソッドを数秒後にトリガーして、幅と高さのプロパティを取得する関数を呼び出すこともできます。
2.ビューツリーオブザーバーを使用できます
l = (RelativeLayout)findviewbyid(R.id.rl_cards_details_card_area);
ViewTreeObserver observer = l.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
ActivityClassName.this.getProperties();
l.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
}
});
void getProperties() {
int a= l.getHeight();
int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,1000).show();
}
このようにしてみてください:
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.Button;
import Android.widget.RelativeLayout;
import Android.widget.TextView;
public class AndroidResizeView extends Activity {
TextView textMyTextView;
Button myButton;
RelativeLayout rlayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hightk);
rlayout = (RelativeLayout) findViewById(R.id.rlayout);
textMyTextView = (TextView) findViewById(R.id.textView1);
myButton = (Button) findViewById(R.id.button1);
myButton.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
updateSizeInfo();
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
updateSizeInfo();
}
private void updateSizeInfo() {
textMyTextView.setText(String.valueOf("Width: "
+ rlayout.getWidth() + "height ::" + rlayout.getHeight()));
}
}
Kotlinの場合:AndroidXのdoOnLayout拡張関数を使用して、レイアウトの高さまたは幅を取得できます
view.doOnLayout {
Timber.d("View's Height: ${view.height}")
}
このビューがレイアウトされているときに、指定されたアクションを実行します。ビューがレイアウトされていて、レイアウトを要求していない場合、アクションはすぐに実行されます。それ以外の場合、アクションはビューが次にレイアウトされた後に実行されます。
アクションは、次のレイアウトで1回だけ呼び出され、その後削除されます。 詳細