我从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”从不被调用
答案 0 :(得分:0)
我不知道您是否找到了答复,但我遇到了同样的问题。 我通过以编程方式创建新的CoolEditText成功。
我希望它将对某人有所帮助。
@Robert:
coolInputText = new CoolInputText(context);
this.addView(coolInputText);