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时。视图不能测量,布局,绘制。
我在 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时。视图不能测量,布局,绘制。