【发布时间】:2013-12-13 11:10:48
【问题描述】:
我正在使用适用于 Android 的 Xamarin,但这同样适用于 Android JAVA SDK。 我有一个 webview,用户可以使用内置的 Android OS 句柄在网页上选择文本。我想禁用长按时出现的文本选择操作栏,但不禁用用于进行选择的文本选择句柄。
我已尝试覆盖 OnSelectionStart 方法,但这没有任何效果。
【问题讨论】:
我正在使用适用于 Android 的 Xamarin,但这同样适用于 Android JAVA SDK。 我有一个 webview,用户可以使用内置的 Android OS 句柄在网页上选择文本。我想禁用长按时出现的文本选择操作栏,但不禁用用于进行选择的文本选择句柄。
我已尝试覆盖 OnSelectionStart 方法,但这没有任何效果。
【问题讨论】:
由于 Android 6.0 引入了Text selection,我面临同样的问题。感谢paolo.camitini,我找到了 .要解决您的问题,您必须重写方法 startActionMode(ActionMode.Callback callback) 和 public ActionMode startActionMode(ActionMode.Callback callback, int type)(来自 SDK 23)。这是我的实现:
import android.content.Context;
import android.util.AttributeSet;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.webkit.WebView;
public class EpubWebView extends WebView {
public EpubWebView(Context context) {
super(context);
}
public EpubWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EpubWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public EpubWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
super(context, attrs, defStyleAttr, privateBrowsing);
}
@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
return new ActionMode() {
@Override
public void setTitle(CharSequence title) {
}
@Override
public void setTitle(int resId) {
}
@Override
public void setSubtitle(CharSequence subtitle) {
}
@Override
public void setSubtitle(int resId) {
}
@Override
public void setCustomView(View view) {
}
@Override
public void invalidate() {
}
@Override
public void finish() {
}
@Override
public Menu getMenu() {
return null;
}
@Override
public CharSequence getTitle() {
return null;
}
@Override
public CharSequence getSubtitle() {
return null;
}
@Override
public View getCustomView() {
return null;
}
@Override
public MenuInflater getMenuInflater() {
return null;
}
};
}
@Override
public ActionMode startActionMode(ActionMode.Callback callback, int type) {
return new ActionMode() {
@Override
public void setTitle(CharSequence title) {
}
@Override
public void setTitle(int resId) {
}
@Override
public void setSubtitle(CharSequence subtitle) {
}
@Override
public void setSubtitle(int resId) {
}
@Override
public void setCustomView(View view) {
}
@Override
public void invalidate() {
}
@Override
public void finish() {
}
@Override
public Menu getMenu() {
return null;
}
@Override
public CharSequence getTitle() {
return null;
}
@Override
public CharSequence getSubtitle() {
return null;
}
@Override
public View getCustomView() {
return null;
}
@Override
public MenuInflater getMenuInflater() {
return null;
}
};
}
}
【讨论】: