如何在显示视图之前找到视图的宽度?

Pav*_*pur 30 android

如何在显示视图之前找到视图的宽度?我不想添加自定义视图并点击OnChanged()中的尺寸.

Dmy*_*lyk 45

Display display = getWindowManager().getDefaultDisplay();
View view = findViewById(R.id.YOUR_VIEW_ID);
view.measure(display.getWidth(), display.getHeight());

view.getMeasuredWidth(); // view width
view.getMeasuredHeight(); //view height
Run Code Online (Sandbox Code Playgroud)

  • 您可能还要记住,如果视图没有膨胀,它的宽度和高度将为0. (6认同)
  • 不推荐使用view.measure(display.getWidth(),display.getHeight()) (4认同)

San*_*hav 30

@dmytrodanylyk - 我认为它将返回宽度和高度为0所以你需要使用以下内容

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View contentview = inflater.inflate(R.layout.YOURLAYOUTNAME, null, false);
contentview.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int width = contentview.getMeasuredWidth();
int height = contentview.getMeasuredHeight();
Run Code Online (Sandbox Code Playgroud)

它会给你正确的高度和宽度.


Adr*_*ano 11

您应该使用OnGlobalLayoutListener在视图上调用的更改,但在绘制之前.

costumView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {

      costumView.getWidth();

    }
});
Run Code Online (Sandbox Code Playgroud)


小智 10

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
view.measure(size.x, size.y);
int width = view.getMeasuredWidth();
int height = view.getMeasuredHeight();
Run Code Online (Sandbox Code Playgroud)