我想为EditText上的基本复制,剪切,粘贴和格式化操作创建自定义界面。但是当我开始选择文本时,文本选择上下文栏显示在顶部。我无法弄清楚如何删除CAB 并仍保持选择文字的能力。
使用@Override
public void run() {
for (int i = table1.getRowCount()-1; i >= 0; i--) {
int modelIndex = table1.convertRowIndexToModel(i);
String status = table1.getModel().getValueAt(modelIndex, 9).toString();
if (status.equalsIgnoreCase("Cleared")) {
deleteRow(table1, table1Model, i);
}
}
}
覆盖setCustomSelectionActionModeCallback
会删除上下文栏,但它也会删除选择文字的功能。
答案 0 :(得分:0)
我设法通过改变styles.xml中的*actionMode*
项的样式来解决这个问题。
想法是制作动作模式动作栏覆盖窗口,高度为1px,透明且默认drawables设置为空白。
styles.xml 风格
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<!--how to hide action mode-->
<item name="android:windowActionModeOverlay">true</item>
<item name="android:actionModeStyle">@style/ActionModeStyleBlank</item>
<item name="android:actionModeBackground">@android:color/transparent</item>
<item name="android:actionModeCopyDrawable">@drawable/blank</item>
<item name="android:actionModeCloseDrawable">@drawable/blank</item>
<item name="android:actionModeCutDrawable">@drawable/blank</item>
<item name="android:actionModePasteDrawable">@drawable/blank</item>
<item name="android:actionModeSelectAllDrawable">@drawable/blank</item>
<item name="android:actionModeSplitBackground">@android:color/transparent</item>
</style>
<!--size should be 1px otherwise full size action bar is shown -->
<style name="ActionModeStyleBlank">
<item name="android:actionBarSize">1px</item>
<item name="android:height">1px</item>
</style>
</resources>
blank.xml drawable
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<size android:height="0px" android:width="0px"></size>
</shape>
答案 1 :(得分:0)
您可以完全删除ActionBarContextView。
因此,请使用以下代码:
tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
removeActionBar(getWindow().getDecorView());
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});
private void removeActionBar(View v) {
ViewGroup viewgroup = (ViewGroup) v;
for (int i = 0; i < viewgroup.getChildCount(); i++) {
View v1=viewgroup.getChildAt(i);
if ( v1 instanceof ViewGroup )
removeActionBar(v1);
if ( v1 instanceof ActionBarContextView ) {
viewgroup.removeView(v1);
}
}
}