具有Android + MIUI和setCustomSelectionActionModeCallback的设备 [英] Devices with Android + MIUI and setCustomSelectionActionModeCallback
问题描述
我正在尝试创建自定义选择菜单,但是在具有rom MIUI和Android 6的设备上无法使用.结果是带有 copy
和 select all
项目.在干净的Android下的其他设备和模拟器上,它也可以正常工作.
I'm trying to create custom selection menu but it does not work on a device with rom MIUI and Android 6. The result is common menu with copy
and select all
items. On other devices and simulators under clean Android it works just fine.
代码:
textViewTop.setCustomSelectionActionModeCallback(new android.view.ActionMode.Callback() {
@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
Log.d(LOG_TAG, "onCreateActionMode");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Log.d(LOG_TAG, "onPrepareActionMode");
menu.clear();
int quote_quick = R.drawable.ic_desktop_mac_black_24dp;
int quote_add = R.drawable.ic_computer_black_24dp;
int copy = R.drawable.ic_devices_other_black_24dp;
menu.add(Menu.NONE, QUOTE_START, 3, "").setIcon(quote_quick).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, QUOTE_ADD, 2, "").setIcon(quote_add).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(Menu.NONE, CUSTOM_COPY, 1, "").setIcon(copy).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
推荐答案
所以我想出了一种解决方法,但是只有当您绝对需要它在MIUI设备上工作时,它才有意义.通常有点尴尬:
So I figured out a workaround, but it makes sense only if you absolutely need it to work on MIUI devices. It's generally a little awkward:
我注意到Wikipedia应用程序具有在小米设备上运行的自定义操作,并且在浏览代码后,我发现在 WebView
中选择文本后,它可以正常工作.您基本上可以使用 WebView
并在 Activity
I noticed that the Wikipedia app has custom actions working on a Xiaomi device, and after looking through the code I found out it works fine when the texts is selected in a WebView
.
You can basically use a WebView
and override onActionModeStarted
in your Activity
主动性:
String html = "<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"</head>\n" +
"<body>\n" +
"\n" +
"<h1>WebView text</h1>\n" +
"\n" +
"</body>\n" +
"</html>\n";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.web_view);
webView.setWebViewClient(new WebViewClient());
webView.loadData(html, "text/html", "UTF-8");
}
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);
Menu menu = mode.getMenu();
menu.clear();
mode.getMenuInflater().inflate(R.menu.menu_text_select, menu);
}
菜单:
<item android:id="@+id/id1"
android:title="miui"
app:showAsAction="ifRoom" />
<item android:id="@+id/id2"
android:title="has"
app:showAsAction="ifRoom" />
<item android:id="@+id/id3"
android:title="bugs"
app:showAsAction="ifRoom" />
<item android:id="@+id/id4"
android:title="D:"
app:showAsAction="ifRoom" />
结果:
这篇关于具有Android + MIUI和setCustomSelectionActionModeCallback的设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!