编辑文本,可以长按选择,但不显示上下文菜单?

时间:2015-12-24 22:05:58

标签: android android-edittext onlongclicklistener

我想提供剪切,复制文本的自定义处理程序。

目标在Longclick上

  1. 不应出现上下文菜单。
  2. 可以使用跟踪器(或拖拉机)选择文本。
  3. enter image description here

    [UPDATE]

     protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        edittext = (EditText) findViewById(R.id.notetext);
        . . . .
    
        edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback()
        {
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }
    
            public void onDestroyActionMode(ActionMode mode) {
            }
    
            public boolean onCreateActionMode(ActionMode mode, Menu menu)
            {
                return true;
            }
    
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }
        });
    
      . . . .
    
    }
    
    @Override
    public void onSupportActionModeStarted(android.support.v7.view.ActionMode mode) {
        super.onSupportActionModeStarted(mode);
        View v = new View(MainActivity.this);
        mode.setCustomView(v);
        mode.getMenu().clear();
        mode.getMenu().close();
        mode.finish();
    }
    

    使用上面的代码,我可以删除全选,剪切,复制和粘贴。但它仍显示“文本选择”

    下图显示了所需内容。

    enter image description here

2 个答案:

答案 0 :(得分:2)

你想摆脱ActionMode?并创建自己的??

您可以覆盖此内容并在即将显示默认值时收到通知

  @Override
  public void onSupportActionModeStarted(ActionMode mode) {     
    super.onSupportActionModeStarted(mode);
    //you can add your custom ui here
    mode.setCustomView(....);// it takes a view
}

如果你想关闭它,那么你打电话给mode.finish();你可以在那里打电话来关闭,如果你不需要它就完成它。

当它即将死亡时,它会调用onSupportActionModeFinished(ActionMode模式)`我所声明的方法是支持库,希望你知道。

其余的是奶酪

答案 1 :(得分:2)

最后我对此进行了整理。这个解决方案非常适合我。首先,您需要创建上下文菜单背景,如下所示

menuback.xml

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>
      </shape>
    </item>
  </selector>

然后按如下所示创建自定义菜单

mymenu.xml

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/m" android:title=" " ></item>
  </menu>

现在在

上添加以下行

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">@drawable/menuback</item>
    <item name="actionBarSize">1dp</item>
    <item name="android:actionModeCloseDrawable">@android:color/transparent</item>

</style>

</resources>

最后将操作栏的高程设置为0并实现ActionMode.CallBack,如下所示

       EditText editText=findViewById(R.id.ed);

    getSupportActionBar().setElevation(0);
    editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.getMenu().clear();
            MenuInflater inflater=mode.getMenuInflater();
            inflater.inflate(R.menu.mymenu,menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    });

Ta ... da ...这是最终结果

screenshot