我为 ActionMode
编写了一个自定义菜单,并将其作为文本选择中的自定义 ActionMode
传递给 TextView.setCustomSelectionActionModeCallback(ActionMode)
过程。它有效,但是当我用 SubMenu
单击项目时,它只显示一秒钟,然后 ActionMode
关闭并且不让我选择子菜单项。当我为我的 itmes 使用 MenuItem.SHOW_AS_ACTION_IF_ROOM
时,当我使用 Overflow item 时也会发生这种情况。
任何想法?
我正在使用 Android ICS
最佳答案
我发现当 EditText
失去焦点时, Action 模式关闭/完成:
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
if (mEditor != null) mEditor.onWindowFocusChanged(hasWindowFocus);
startStopMarquee(hasWindowFocus);
}
注意:EditText
是TextView
的子类。
void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus) {
...
} else {
...
hideControllers();
...
}
}
解决方案
我试着创建这个:
package com.edwardsp.sample.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
public class CustomEditText extends EditText {
public CustomEditText(Context context) {
super(context);
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
}
}
}
并像普通的 EditText
一样使用 CustomEditText
。可以显示操作模式子菜单。我没有在 CustomEditText
中发现奇怪的行为。如果有人从此实现中发现奇怪的行为,请告诉我。
关于android - TextView ActionMode 无法正确显示子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18031643/