android - InputType 对自定义 EditText 没有影响

标签 android android-edittext android-custom-view android-inputtype

我创建了这个扩展自 AppCompatEditText 的自定义 View :

    public class NoteEditText extends AppCompatEditText {

    // INTERFACES ----------------------------------------------------------------------------------------------------
    public interface OnKeyPreImeListener {
        void onKeyPreIme(int keyCode, KeyEvent event);
    }


    // ATTRIBUTES ----------------------------------------------------------------------------------------------------
    private MovementMethod movementMethod;
    private KeyListener keyListener;
    private OnKeyPreImeListener onKeyPreImeListener;


    // CONSTRUCTORS ----------------------------------------------------------------------------------------------------
    public NoteEditText(Context context) {
        super(context);

        this.movementMethod = this.getMovementMethod();
        this.keyListener = this.getKeyListener();
    }

    public NoteEditText(Context context, AttributeSet attrs) {
        super(context, attrs);

        this.movementMethod = this.getMovementMethod();
        this.keyListener = this.getKeyListener();
    }

    public NoteEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        this.movementMethod = this.getMovementMethod();
        this.keyListener = this.getKeyListener();
    }


    // SETTERS ----------------------------------------------------------------------------------------------------
    public void setOnKeyPreImeListener(OnKeyPreImeListener onKeyPreImeListener) {
        this.onKeyPreImeListener = onKeyPreImeListener;
    }


    // METHODS ----------------------------------------------------------------------------------------------------
    public void enable() {
        this.setMovementMethod(this.movementMethod);
        this.setKeyListener(this.keyListener);
        this.setFocusableInTouchMode(true);
        this.setImeOptions(EditorInfo.IME_ACTION_DONE);
        this.setRawInputType(InputType.TYPE_CLASS_TEXT);
    }

    public void disable() {
        this.setMovementMethod(null);
        this.setKeyListener(null);
    }

    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (this.onKeyPreImeListener != null)
            this.onKeyPreImeListener.onKeyPreIme(keyCode, event);

        return true;
    }

}

我这样调用它:

    <com.company.adapters.items.NoteEditText
    android:id="@+id/note"
    style="@style/AppTheme.SubItem"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/content_margin_xs"
    android:gravity="center_vertical"
    android:hint=""
    android:imeOptions="actionDone"
    android:inputType="textMultiLine|textCapSentences|textNoSuggestions"
    android:minHeight="@dimen/content_subitem_height"
    android:visibility="gone"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/note_icon"
    app:layout_constraintTop_toBottomOf="@+id/name" />

它运行良好,除了“textMultiLine|textCapSentences|textNoSuggestions”输入类型。 “textCapSentences”和“textNoSuggestions”均未应用,但“textMultiLine”正在运行。

如果我使用完全相同的配置但使用原始的 EditText View ,则所有 inputTypes 都有效......非常奇怪。

最佳答案

    this.setRawInputType(InputType.TYPE_CLASS_TEXT);

来自您的启用功能。这是覆盖输入类型。

关于android - InputType 对自定义 EditText 没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264388/

相关文章:

android - Android应用程序中的QR码解码和编码

android - App42 - 需要 Proguard 设置(因为 Debug模式有效而 Release模式失败)

java - Android:将编辑文本字段链接到按钮

java - Android Studio Java EditText 包含单词

android - 如何允许仅在edittext android的最左边位置插入字符

java - 如何使用gradle在android项目中生成jacoco报告

android - 如何更改用户点击的android GridView 中的图像?

Android自定义 View 将可见屏幕保存到位图

android - 在android中的微调器中设置背景颜色、边框和箭头图标

android - 在我的案例中使用库项目中的自定义 View