Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 覆盖longClick()上的默认行为_Android_Textview_Onlongclicklistener - Fatal编程技术网

Android 覆盖longClick()上的默认行为

Android 覆盖longClick()上的默认行为,android,textview,onlongclicklistener,Android,Textview,Onlongclicklistener,我有一个文本视图。当长时间单击时,长时间单击的文本段应突出显示,并出现上下文操作菜单,提供一些附加选项 但是,如果文本高亮显示,则上下文操作菜单与所需菜单不同。另一方面,如果显示所需的上下文操作菜单,则文本不会突出显示 我已经能够将其归零到onlongclicklister中的onLongClick函数中的return语句。具体地说,如果onLongClick函数返回true(使用单击),则会显示上下文操作菜单,但由于长时间单击从未传递到文本选择工具,因此不会被激活。但是,如果onLongCli

我有一个
文本视图
。当长时间单击时,长时间单击的文本段应突出显示,并出现上下文操作菜单,提供一些附加选项

但是,如果文本高亮显示,则上下文操作菜单与所需菜单不同。另一方面,如果显示所需的上下文操作菜单,则文本不会突出显示

我已经能够将其归零到
onlongclicklister
中的
onLongClick
函数中的
return
语句。具体地说,如果
onLongClick
函数
返回true
(使用单击),则会显示上下文操作菜单,但由于长时间单击从未传递到文本选择工具,因此不会被激活。但是,如果
onLongClick
函数返回
false
,则单击将传递给一个函数,该函数将触发带有选择的文本的
复制+粘贴的默认行为

守则:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class HelloTxtView extends Activity {

    //private EditText ed;
    private TextView ed;

    //actionmode callback.
    private ActionMode mActionMode;
    private ActionMode.Callback mActionModeCallback;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_txt_view);

        ed = (TextView) findViewById(R.id.txtview);
        ed.setFocusable(true);
        ed.setText("Hello World! Let's select some text!!");

        initActionModeCallbacks();

        ed.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                Log.v(this.toString(), "Long click.");
                ed.setCursorVisible(true);

                Log.v(this.toString(), "Starting actionmodecallback.");
                mActionMode = HelloTxtView.this.startActionMode(mActionModeCallback);
                v.setSelected(true);

                return false;
            }
        });
    }

    public void initActionModeCallbacks() {

        /*
         * This function initializes the callbacks.
         */

        mActionModeCallback = new ActionMode.Callback() {

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                //nothing to do here.
                Log.v(this.toString(), "Preparing action mode.");
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {
                Log.v(this.toString(), "Destroy action mode.");
                //mActionModeCallback = null;
            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                Log.v(this.toString(), "Creating new action mode menu.");
                //inflate a new menu.
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.options_menu, menu);
                Log.v(this.toString(), "Done inflating menu.");
                return true;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                Log.v(this.toString(), "An item was clicked.");
                switch(item.getItemId()) {
                case R.id.dictLookup:
                    Log.v(this.toString(), "Look up dictionary.");
                    break;

                case R.id.readFromHere:
                    Log.v(this.toString(), "Start reading from here:" + ed.getSelectionStart());
                }
                return false;
            }
        };
    }
}
我的问题:
1.如何覆盖
文本视图的默认行为?

2.如何使用上下文操作菜单获得文本选择?

如果您想在文本选择上获得自定义上下文操作模式,则可以执行以下操作

    ed = (TextView) findViewById(R.id.txtview);
    ed.setText("Hello World! Let's select some text!!");
    initActionModeCallbacks();
    ed.setTextIsSelectable(true);
    ed.setCustomSelectionActionModeCallback(mActionModeCallback);

    ed.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            Log.v(this.toString(), "Long click.");
            ed.setCursorVisible(true);
            v.setSelected(true);

            return false;
        }
    });
在onCreateActionMode(ActionMode模式,菜单菜单)中,如果要删除标准选择项,可以调用

menu.clear();
还要注意的是,菜单中的项目需要有SHOW_AS_ACTION_ALWAYS标志,因为溢出按钮不起作用,导致焦点改变