3

我已经覆盖了此链接中给出的 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

4 回答 4

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它的提示,则可以在您的自定义视图中访问。

于 2014-08-06T16:21:29.090 回答
1

您无法访问“android”属性。您可以getHint()在调用super()构造函数后使用。如果您想创建自己的属性,请遵循本教程

于 2012-11-22T10:04:10.157 回答
1

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

于 2012-11-22T10:05:32.747 回答
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>

自定义输入字段.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
    }
}

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

于 2020-04-13T16:34:25.943 回答