我想提供剪切,复制文本的自定义处理程序。
目标在Longclick上
[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();
}
使用上面的代码,我可以删除全选,剪切,复制和粘贴。但它仍显示“文本选择”
下图显示了所需内容。
答案 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 ...这是最终结果