android 中获取按钮大小时的错误值

Wrong value when get size of button in android

我在 XML 文件中有一个按钮,其大小(以 dp 为单位)设置如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    >

    <FrameLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginTop="80dp"
        android:layout_marginBottom="80dp"
        android:layout_centerInParent="true"
        >

        <Button
            android:id="@+id/btn1"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:scaleType="fitCenter"/>

        <Button
            android:id="@+id/btn2"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:scaleType="fitCenter"/>
    </FrameLayout>
</RelativeLayout>

我按照 getWidth() and getHeight() of View returns 0 中的答案来获取按钮的大小。然而,它 return 一个错误的值 300,300 而不是 10dp 和 50dp。我的代码中发生了什么?谢谢大家

Button btn=(Button) findViewById(R.id.btn1);
btn.measure(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
width_btn = btn.getMeasuredWidth();
height_btn = btn.getMeasuredHeight();
Log.d("TAG", String.valueOf(index)+String.valueOf(width_btn)+","+String.valueOf(height_btn));

从布局文件可以看出,按钮的高度和宽度是固定的。您可以在 dimens.xml 文件中定义按钮的宽度和高度,如下所示:

<dimen name="btn_width">50dp</dimen>
 <dimen name="btn_hieght">10dp</dimen>

现在将这些高度和宽度设置为布局

android:layout_width="@dimen/btn_width"
android:layout_height="@dimen/btn_hieght"

现在可以获取宽度和高度了

float hieght = getResources().getDimension(R.dimen.btn_hieght);
 float width  = getResources().getDimension(R.dimen.btn_width);

As Mike suggest, remove btn.measure line.

添加代码到onPause 值将不会为0。 因为当你使用getWidth getMeasureWidth时。视图不能测量,布局,绘制。