Vir*_*ngh 4 android android-softkeyboard android-edittext
我试图使用Google键盘等键盘插入表情符号Gboard,edittext但显示吐司This text field does not support GIF insertion from the keyboard。
关于相同有几个问题,但是没有适当的答案。我阅读了给定的文档参考,但没有给出实现。我尝试了此操作,但没有触发onCommitContent-
EditText editText = new EditText(this) {
@Override
public InputConnection onCreateInputConnection(EditorInfo editorInfo) {
final InputConnection ic = super.onCreateInputConnection(editorInfo);
final InputConnectionCompat.OnCommitContentListener callback =
new InputConnectionCompat.OnCommitContentListener() {
@Override
public boolean onCommitContent(InputContentInfoCompat inputContentInfo,
int flags, Bundle opts) {
// 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
}
}
// read and display inputContentInfo asynchronously.
// call inputContentInfo.releasePermission() as needed.
return true; // return true if succeeded
}
};
return InputConnectionCompat.createWrapper(ic, editorInfo, callback);
}
};
Run Code Online (Sandbox Code Playgroud)
但类似Whatsapp,Telegram之类的应用程序支持此功能。我是否需要创建自定义EditText或其他内容?
如您的问题中所述,您似乎没有设置内容的mime类型。我创建了一个EditTextwith回调keyBoardInputCallbackListener,用于检测是否gif/png/jpg/webp通过软键盘插入了任何回调。
public class MyEditText extends android.support.v7.widget.AppCompatEditText {
private String[] imgTypeString;
private KeyBoardInputCallbackListener keyBoardInputCallbackListener;
public MyEditText(Context context) {
super(context);
initView();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
imgTypeString = new String[]{"image/png",
"image/gif",
"image/jpeg",
"image/webp"};
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
final InputConnection ic = super.onCreateInputConnection(outAttrs);
EditorInfoCompat.setContentMimeTypes(outAttrs,
imgTypeString);
return InputConnectionCompat.createWrapper(ic, outAttrs, callback);
}
final InputConnectionCompat.OnCommitContentListener callback =
new InputConnectionCompat.OnCommitContentListener() {
@Override
public boolean onCommitContent(InputContentInfoCompat inputContentInfo,
int flags, Bundle opts) {
// 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
}
}
boolean supported = false;
for (final String mimeType : imgTypeString) {
if (inputContentInfo.getDescription().hasMimeType(mimeType)) {
supported = true;
break;
}
}
if (!supported) {
return false;
}
if (keyBoardInputCallbackListener != null) {
keyBoardInputCallbackListener.onCommitContent(inputContentInfo, flags, opts);
}
return true; // return true if succeeded
}
};
public interface KeyBoardInputCallbackListener {
void onCommitContent(InputContentInfoCompat inputContentInfo,
int flags, Bundle opts);
}
public void setKeyBoardInputCallbackListener(KeyBoardInputCallbackListener keyBoardInputCallbackListener) {
this.keyBoardInputCallbackListener = keyBoardInputCallbackListener;
}
public String[] getImgTypeString() {
return imgTypeString;
}
public void setImgTypeString(String[] imgTypeString) {
this.imgTypeString = imgTypeString;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的活动课程中使用它-
MyEditText myEditText = (MyEditText)findViewbyId(R.id.myEditText);
myEditText.setKeyBoardInputCallbackListener(new KeyBoardInputCallbackListener() {
@Override
public void onCommitContent(InputContentInfoCompat inputContentInfo,
int flags, Bundle opts) {
//you will get your gif/png/jpg here in opts bundle
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |