web-dev-qa-db-ja.com

プログラムで相対の幅と高さを取得する方法-Androidの線形レイアウト?

相対/線形レイアウトの実行時の寸法が必要でした。

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);

あなたの考えを共有してください。

12
Hiren Patel

さて、私はこの方法で実装しました:

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レイアウトの場合は同じプロセスに従います。

これがお役に立てば幸いです。

2
Hiren Patel

これを試して

@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);
}
16
user2511882

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);
                    }
                });
4
vipul mittal

レイアウトが完全に膨らんでいないため、アクティビティが作成された直後に、ビューまたはレイアウトの正しい高さと幅が得られない場合があります。

そう

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();
    }
0

このようにしてみてください:

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()));

    }

}
0
Shylendra Madda

Kotlinの場合:AndroidXのdoOnLayout拡張関数を使用して、レイアウトの高さまたは幅を取得できます

view.doOnLayout {
  Timber.d("View's Height: ${view.height}")
}

このビューがレイアウトされているときに、指定されたアクションを実行します。ビューがレイアウトされていて、レイアウトを要求していない場合、アクションはすぐに実行されます。それ以外の場合、アクションはビューが次にレイアウトされた後に実行されます。

アクションは、次のレイアウトで1回だけ呼び出され、その後削除されます。 詳細

0