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

时间:2018-05-28 06:19:22

标签: android gif ime

我从Developer页面跟踪了整个过程,除了我使用androidx新工具以支持gif插入 - doc: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);
    }
}

不幸的是,当我尝试使用GBoard时,我不断收到“此应用不支持gif插入消息”

知道可能出错的是什么?代码非常简单,我不知道错误可能在哪里......

注意:正如您在代码中看到的那样,我记录了“onCreateInputConnection”并且被触发,但是“onCommitContent”从不被调用

1 个答案:

答案 0 :(得分:0)

我不知道您是否找到了答复,但我遇到了同样的问题。 我通过以编程方式创建新的CoolEditText成功。

我希望它将对某人有所帮助。

@Robert:

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