代码之家  ›  专栏  ›  技术社区  ›  Waza_Be

EditText支持来自IME的gif图像,androidx-onCommitContent从未调用

  •  1
  • Waza_Be  · 技术社区  · 6 年前

    https://developer.android.com/guide/topics/text/image-keyboard

    import android.content.Context;
    import android.os.Bundle;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.inputmethod.EditorInfo;
    import android.view.inputmethod.InputConnection;
    import android.widget.EditText;
    
    import androidx.core.os.BuildCompat;
    import androidx.core.view.inputmethod.EditorInfoCompat;
    import androidx.core.view.inputmethod.InputConnectionCompat;
    import androidx.core.view.inputmethod.InputContentInfoCompat;
    
    
    public class CoolEditText extends EditText {
        public CoolEditText(Context context) {
            super(context);
        }
    
        public CoolEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CoolEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
    
        @Override
        public InputConnection onCreateInputConnection(EditorInfo editorInfo) {
            final InputConnection ic = super.onCreateInputConnection(editorInfo);
            EditorInfoCompat.setContentMimeTypes(editorInfo,
                    new String[]{"image/gif"});
            Log.e("CVE","onCreateInputConnection");
            final InputConnectionCompat.OnCommitContentListener callback =
                    new InputConnectionCompat.OnCommitContentListener() {
                        @Override
                        public boolean onCommitContent(InputContentInfoCompat inputContentInfo,
                                                       int flags, Bundle opts) {
                            Log.e("CVE","onCommitContent");
                            // read and display inputContentInfo asynchronously
                            if (BuildCompat.isAtLeastNMR1() && (flags &
                                    InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) {
                                try {
                                    inputContentInfo.requestPermission();
                                } catch (Exception e) {
                                    return false; // return false if failed
                                }
                            }
                            return true;  // return true if succeeded
                        }
                    };
            return InputConnectionCompat.createWrapper(ic, editorInfo, callback);
        }
    }
    

    你知道怎么回事吗?代码很简单,我不知道哪里会出错。。。

    注意:正如您在代码中看到的,我记录了“onCreateInputConnection”并将其触发,但从未调用“onCommitContent”

    1 回复  |  直到 6 年前
        1
  •  0
  •   RoxyTips    6 年前

    我不知道你是否找到你的回应,但我也有同样的问题。

    我希望它能帮助别人。

    @罗伯特:

    coolInputText = new CoolInputText(context);
    this.addView(coolInputText);