禁用Android webview的文本选择栏,但保留文本选择句柄(Xamarin)

时间:2013-11-27 17:09:07

标签: android xamarin.android

我正在使用Xamarin for Android,但这同样适用于Android JAVA SDK。 我有一个webview,用户可以使用内置的Android OS句柄在网页上选择文本。我想禁用长按时出现的文本选择操作栏,但不禁用用于进行选择的文本选择句柄。

我尝试重写OnSelectionStart方法,但这没有任何效果。

1 个答案:

答案 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;
            }
        };
    }
}