【发布时间】:2013-12-19 16:56:41
【问题描述】:
当用户从 webview 中选择文本时,我需要提供如下图所示的选项。
我应该重写哪个方法来提供选项?
【问题讨论】:
当用户从 webview 中选择文本时,我需要提供如下图所示的选项。
我应该重写哪个方法来提供选项?
【问题讨论】:
WebView 中的复制功能在 Android 3.0 及更高版本中默认可用。要在低于 3.0 的版本中启用复制,必须添加一些代码。我做的第一件事是在视图底部的Actionbar 中添加一个复制按钮。
查看Copy Text in a WebView in Android
下面是展示如何使用的代码:
public class TryDemoActivity extends Activity implements
OnClickListener {
private WebView webview1;
private Button copyButton;
private Button pasteButton;
private Button highlightButton;
private ClipboardManager clipboard;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview1 = (WebView) findViewById(R.id.webview);
copyButton = (Button) findViewById(R.id.copy);
pasteButton = (Button) findViewById(R.id.paste);
webview1.loadUrl("file:///android_asset/1.1.html");
clipboard =(ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
copyButton.setOnClickListener(this);
pasteButton.setOnClickListener(this);
}
private void emulateShiftHeld(WebView view)
{
try
{
KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
shiftPressEvent.dispatch(view);
registerForContextMenu(view);
Toast.makeText(this, "select_text_now", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Log.e("dd", "Exception in emulateShiftHeld()", e);
}
}
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.copy:
emulateShiftHeld(webview1);
break;
case R.id.paste:
Toast.makeText(this, clipboard.getText(),Toast.LENGTH_SHORT).show();
break;
}
}
}
已编辑:
注意:代码 emulateShiftHeld 在 4.0 中已被弃用,这可能是它在 2.2 中工作而不在 4.0 中工作的原因。
【讨论】: