首页 > 解决方案 > 检查没有 getInputType 的自定义视图的输入类型

问题描述

我的问题是关于 Android/Java 的。

如何在不创建 attr.xml 的情况下检查自定义视图的输入类型?

我的 main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:inputType="textEmailAddress"
        android:layout_height="wrap_content"
        android:ems="10"/>

    <org.javaforum.input
        android:layout_width="wrap_content"
        android:inputType="textEmailAddress"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Enter your E-Mail"
        />

</LinearLayout>

我的输入.java:

public class input extends TextView{
    public input(Context context, AttributeSet attr) {
        super(context, attr, getIdentifier(attr));
    }
    
    public static int getIdentifier(AttributeSet attr){
        //How can check if input type are textEmailAddress?
    }

    @Override
    public void onFinishInflate() {
        
    }
}

所以我想知道我的自定义视图的输入类型是否设置为“textEmailAddress”。我怎样才能做到这一点?我不能使用 getInputType 方法,因为在我的情况下,对象尚未初始化。如果没有“getInputType”方法,如何解决我的问题?

标签: javaandroidxmlandroid-layoutandroid-custom-view

解决方案


public class Input extends TextView {

    private static final int[] INPUT_TYPE_ATTR = new int[]{android.R.attr.inputType};

    public Input(Context context, AttributeSet attr) {
        super(context, attr, getIdentifier(context, attr));
    }

    public static int getIdentifier(Context context, AttributeSet attr) {
        final TypedArray a = context.obtainStyledAttributes(attr, INPUT_TYPE_ATTR);
        try {
            final int inputType = a.getInt(0, 0);
            if (inputType == (EditorInfo.TYPE_CLASS_TEXT |
                    EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS)) {
                // your logic here
            }
        } finally {
            a.recycle();
        }
        return 0;
    }

    @Override
    public void onFinishInflate() {
        super.onFinishInflate();
    }
}

推荐阅读