在MainActivity中检查View的尺寸

时间:2018-07-13 12:22:45

标签: java android

我想获取在activity_main.xml中定义的View的尺寸,以基于高度和宽度创建一个Bitmap。将它们写入textView会显示0或停止应用程序。我检查了此视图是否为null,但不是。我可以这样获取视图尺寸吗?

代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textView = (TextView) findViewById(R.id.textView);

    View view = (View) findViewById(R.id.view);
    int x = view.getMeasuredWidth();
    int y = view.getHeight();
    int radius = 10;

    textView.setText(view.getHeight());

// if (view == null) textView.setText("View is null");
// else textView.setText("View is not null");

    Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);

这是actvity_main.xml:

<View
    android:id="@+id/view"
    android:layout_width="400dp"
    android:layout_height="400dp"
    android:layout_marginLeft="44dp"
    android:layout_marginStart="44dp"
    android:layout_marginTop="136dp"
    android:background="@color/green"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/textView"
    android:layout_width="209dp"
    android:layout_height="48dp"
    android:layout_marginLeft="44dp"
    android:layout_marginStart="44dp"
    android:layout_marginTop="28dp"
    android:text="TextView"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

4 个答案:

答案 0 :(得分:1)

您正在此行TextView的{​​{1}}中设置整数值。尝试将其转换为String,然后进行如下设置。

textView.setText(view.getHeight());

要获取视图,请在textView.setText(String.valueOf(view.getHeight())); 中的上方行或按以下方式使用

onResume

我希望它对你有用 谢谢

答案 1 :(得分:1)

只要视图尚未布置,

getWidth和height将返回0。

为了在适当的时候获取尺寸,您有2个选择:

  1. 在onCreate中添加ViewTreeObserver,并在调用它时将其删除。

2.(我认为更容易)在视图底部添加一个可运行的视图:

    view.post(new Runnable() {
            @Override
            public void run() {
                int x = view.getMeasuredWidth();
                int y = view.getHeight();
            }
        })

post()方法回调仅在视图放大后才被调用。

快乐的编码

答案 2 :(得分:0)

  

您可以尝试此解决方案

int height;
int width;
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); 
viewTreeObserver .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override public void onGlobalLayout () {
        view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        height = view.getLayoutParams().height;
        width = view.getLayoutParams().width;
    }
});

答案 3 :(得分:0)

只需使用此代码:)

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

    int height = displayMetrics.heightPixels;
    int width = displayMetrics.widthPixels;

现在您可以在项目中使用heightwidth变量