我将创建一个应用程序,用户将输入我的应用程序的网站网址。然后我使用 WebView 在我的应用程序中显示此页面。
如你所知,当用户点击上下文中的任何一段较长的文本时,Android 光标将会出现,然后我们可以选择任意数量的文本。
选择后,我们会看到“COPY、SHARE、SELECT ALL”等。
我的问题是,当用户选择文本时,我想向他们展示不同的选项。假设“MyCOPY、SendTwitter、SendMessage”。
我怎样才能做到这一点?
到目前为止我做了什么?
这是代码:
private WebView view;
private final String TAG = MainActivity.class.getSimpleName();
private ActionMode actionMode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.view = findViewById(R.id.webView);
view.loadUrl("https://stackoverflow.com/questions/28385768/android-how-to-check-for-successful-load-of-url-when-using-webview-loadurl");
view.setWebViewClient(new MyWebViewClient());
Log.d(TAG, view.getUrl());
view.setOnLongClickListener((v) -> {
if (actionMode != null)
return false;
actionMode = startSupportActionMode(actionCallBack);
return true;
});
}
startSupportActionMode(actionCallBack) 的位置
private ActionMode.Callback actionCallBack = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
actionMode.getMenuInflater().inflate(R.menu.custommenu, menu);
actionMode.setTitle("Choose");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.example_item_1:
Toast.makeText(MainActivity.this, "Option 1 selected", Toast.LENGTH_SHORT).show();
actionMode.finish();
return true;
case R.id.example_item_2 :
Toast.makeText(MainActivity.this, "Option 2 selected", Toast.LENGTH_SHORT).show();
actionMode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
actionMode = null;
}
};
最佳答案
您可以实现ActionMode.Callback界面可根据选择创建您自己的菜单。
An action mode's lifecycle is as follows:
onCreateActionMode(ActionMode, Menu) once on initial creation
onPrepareActionMode(ActionMode, Menu) after creation and any time the ActionMode is invalidated onActionItemClicked(ActionMode, MenuItem) any time a contextual action button is clicked onDestroyActionMode(ActionMode) when the action mode is closed
只需确保您的 TextView 允许文本选择 (android:textIsSelectable="true"
)
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
// Called each time the action mode is shown. Always called after onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
shareCurrentItem();
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
};
然后调用 startActionMode()
在适当的时候启用上下文操作模式 ( source ),例如在 setOnLongClickListener 内
关于java - Android WebView - 2018年文本选择监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53325530/