获取android

时间:2016-09-18 03:33:17

标签: android android-layout android-widget android-button

我有一个按钮,在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));

2 个答案:

答案 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。