我正在使用Xamarin for Android,但这同样适用于Android JAVA SDK。 我有一个webview,用户可以使用内置的Android OS句柄在网页上选择文本。我想禁用长按时出现的文本选择操作栏,但不禁用用于进行选择的文本选择句柄。
我尝试重写OnSelectionStart方法,但这没有任何效果。
答案 0 :(得分:1)
由于Android 6.0引入Text selection,我面临同样的问题。感谢paolo.camitini,我找到了。{要解决您的问题,您必须覆盖方法 startActionMode(ActionMode.Callback回调)和公共ActionMode startActionMode(ActionMode.Callback回调,int类型)(来自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;
}
};
}
}