Edittext 在长按时进行选择但不显示上下文菜单?
Posted
技术标签:
【中文标题】Edittext 在长按时进行选择但不显示上下文菜单?【英文标题】:Edittext that make selection on long click but do not show context menu? 【发布时间】:2016-03-31 05:21:17 【问题描述】:我想提供剪切、复制文本的自定义处理程序。
定位到 Longclick
-
不应出现上下文菜单。
可以使用跟踪器(或拖动器)选择文本。
[更新]
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();
使用上面的代码我可以删除全选、剪切、复制和粘贴。但它仍然显示“文本选择”
下图显示了所需的内容。
【问题讨论】:
【参考方案1】:您想摆脱 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 mode)` 我所说的方法是针对支持库的,希望你知道。
剩下的就是奶酪
【讨论】:
更新问题。请提出一些建议。 mode.finish() 有效,但看起来很丑,菜单出现并隐藏,整个视图抖动,选择不保留【参考方案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>
然后按如下方式创建自定义菜单
我的菜单.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>
最后将actionbar的高度设置为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...这是最终结果
【讨论】:
以上是关于Edittext 在长按时进行选择但不显示上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用选择器在长按时“永久”突出显示 ListView 行,但在正常按下时短暂显示
当用户在移动设备上长按时如何在 div 或输入字段中选择完整的文本
对于 iPhone - 但不是 iOS 模拟器 - UIToolbar UIBarButtonItem 将仅在长按时突出显示,而不是在点击时突出显示