如何在自定义视图中获取android默认属性

时间:2017-06-16 08:20:04

标签: android android-widget android-custom-view custom-view android-attributes

我创建了一个包含RelativeLayoutEditText的简单自定义视图:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edt_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</RelativeLayout>

此外,我在res/values/attrs.xml中添加了一些自定义属性,并在自定义视图构造函数中检索这些属性,一切正常。

现在,我想在自定义视图中检索EditText默认属性,例如我想在自定义视图中获取android:text属性。

我的自定义视图类(简化):

public class CustomEditText extends RelativeLayout {
    private int panCount;

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs,
            R.styleable.CustomEditText, 0, 0);
        try {
            this.panCount = typedArray.getInt(R.styleable.CustomEditText_panCount, 16);
        } finally {
            typedArray.recycle();
        }
    }
}

如果不在res/values/attrs.xml重新声明文字属性,我怎么能这样做?

4 个答案:

答案 0 :(得分:11)

您可以将android:text添加到声明的syleable中。但一定不要重新声明它。

<declare-styleable name="CustomEditText">
    <attr name="android:text" />
</declare-styleable>

然后从样式中获取此值,就像使用索引为R.styleable.CustomEditText_android_text的任何其他属性一样。

CharSequence text = typedArray.getText(R.styleable.CustomEditText_android_text);

答案 1 :(得分:0)

我认为你做不到。 在xml中为edittext添加一个id,如果要检索editText的值,只需使用:

edittext.getText().toString()

答案 2 :(得分:0)

我认为这是不可能的,因为您的自定义视图扩展了 relativeLayout ,并且它没有此属性。如果直接从 EditText 或TextView扩展,则可以访问android:text或其他属性。

答案 3 :(得分:0)

您可以使用

等布局来构建它
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
    android:id="@+id/edittext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="My Custom View" />
</RelativeLayout>

您的customview类将是这样的

public class CustomEditText extends RelativeLayout {
    LayoutInflater mInflater;

    public CustomView(Context context) {
        super(context);
        mInflater = LayoutInflater.from(context);
        init();

    }

    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mInflater = LayoutInflater.from(context);
        init();
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mInflater = LayoutInflater.from(context);
        init();
    }

    // Here you can access your edittext text
    public void init() {
        View v = mInflater.inflate(R.layout.custom_view, this, true);
        EditText et = (TextView) v.findViewById(R.id.edittext);
        et.setText(" Custom RelativeLayout");
    }
}