从AttributeSet获取提示属性值

时间:2012-11-22 09:38:25

标签: android view attributes android-edittext

我已覆盖 this link 中提供的EditText。

现在在布局中声明此字段时我正在使用

<com.and.ab1209.ClearableEditText
android:id=”@+id/edit_text_clearable”
android:layout_width=”fill_parent”
android:hint="My Hint Goes here"
android:layout_height=”wrap_content” />

如何在任何这些构造函数中检索此提示值。

 public ClearableEditText(Context context, AttributeSet attrs, int defStyle){...}
 public ClearableEditText(Context context, AttributeSet attrs){...}

我该怎么做?

4 个答案:

答案 0 :(得分:4)

您可以通过在视图构造函数中执行以下操作来访问标准xml属性:

final String xmlns="http://schemas.android.com/apk/res/android";
//If you had a background attribute this is the resource id
int backgroundResource = attrs.getAttributeResourceValue(xmlns, "background", -1);
//This is your views hint
String hint = attrs.getAttributeValue(xmlns, "hint");

如果您的视图继承自TextView并不重要,如果您使用android:hint指定提示,则可以在自定义视图中访问该提示。

答案 1 :(得分:1)

您无法访问“android”属性。调用getHint()构造函数后,您可以使用super()。 如果您想创建自己的属性,请点击this tutorial

答案 2 :(得分:1)

在构造函数中使用this.getHint()

答案 3 :(得分:0)

您可以通过在您的属性集中定义android-namespaced属性来使用它。例如:

attrs_custom_input_field.xml

<resources>
    <declare-styleable name="CustomInputField">
        <attr name="android:hint" format="string" />
        <attr name="android:text" format="string" />
    </declare-styleable>
</resources>

CustomInputField.kt

class CustomInputField : ConstraintLayout {
    // ....

    // init called from all constructors
    private fun init(attrs: AttributeSet?, defStyle: Int) {
        val a = context.obtainStyledAttributes(
                attrs, R.styleable.CustomInputField, defStyle, 0)

        val hint = a.getString(R.styleable.CustomInputField_android_hint)
        val text = a.getString(R.styleable.CustomInputField_android_text)

        a.recycle()

        // use hint and text as you want
    }
}

您应该仅定义现有属性,否则,您将在编辑器中收到错误消息