使用AttributeSet.getAttributeIntValue()的困难

时间:2011-03-20 22:08:02

标签: android

我的应用需要扩展ImageView的高度和宽度。我认为这应该有效:

package my.android.test;

public class TestImageView extends ImageView
{
    private int mWidth=0;
    private int mHeight=0;

    public TestImageView(Context context, AttributeSet as)
    {
        super(context, as);
        final String xmlns="http://schemas.android.com/apk/res/android";
        mWidth = as.getAttributeIntValue(xmlns, "layout_width", 0);
        mHeight = as.getAttributeIntValue(xmlns, "layout_height", 0);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        //do stuff
    }
}

但它不起作用。 getAttributeIntValue()返回0,尽管布局XML中定义了layout_height:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:fillViewport="true"
          android:background="#fffcb95a"

<LinearLayout android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"

<FrameLayout android:layout_width="fill_parent"
             android:layout_height="wrap_content"

    <RelativeLayout android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:padding="6dip"

        <my.android.test.TestImageView
                    android:id="@+id/TestImageViewID" 
                    android:layout_width="100dip"
                    android:layout_height="100dip"
                    android:src="@drawable/icon"
                    android:scaleType="centerCrop" />

    </RelativeLayout

</FrameLayout

</LinearLayout
</ScrollView

该怎么办?

2 个答案:

答案 0 :(得分:2)

请注意原始尝试不起作用的原因 - layout_width和layout_height实际上不包含整数,它们是保持尺寸。您需要通过Context / Theme.obtainStyledAttributes检索这些内容,这样您就可以将它们作为可以转换为像素的TypedValue来获取。

答案 1 :(得分:1)

只需致电getWidth()getHeight()