我有一个按钮,在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中的答案来获取按钮的大小。但是,它返回错误的值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));
答案 0 :(得分:2)
从布局文件中可以清楚地看到按钮的高度和宽度是固定的。您可以在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);
正如Mike建议的那样,删除btn.measure line。
答案 1 :(得分:0)
将代码添加到onPause,该值不会为0。 因为当你使用getWidth getMeasureWidth.the视图不是mesure,layout,draw。