问题描述
我在delphi下,我使用android框架创建了一个编辑.当我将主题设置为 Theme.DeviceDefault.Light.NoActionBar 时,我可以在EditText中选择一些文本,并且弹出一个带有全选/剪切/复制/粘贴/等"的弹出窗口见下图.
I m under delphi and i use the android framework to create an edit. When i set the theme to Theme.DeviceDefault.Light.NoActionBar then i can select some text in my EditText and i have a popup with "select all/cut/copy/paste/etc" like you can see on the picture below.
但是,当我选择 Theme.Material.Light.NoActionBar 或 Theme.Holo.Light.NoActionBar 时,我无法选择我的EditText中的任何文本(我没有左右文本选择手柄),当然,我没有任何复制/粘贴弹出窗口
However, when i select Theme.Material.Light.NoActionBar or Theme.Holo.Light.NoActionBar then i can't select any text in my EditText (i have no right or left text selection handles) and off course i don't have any copy/paste popup
他们是否有办法在Theme_Material_Light_NoActionBar上显示此复制/粘贴弹出窗口?
Is their any way to have this copy/paste popup on Theme_Material_Light_NoActionBar ?
Theme.DeviceDefault.Light.NoActionBar
Theme.DeviceDefault.Light.NoActionBar
Theme_Material_Light_NoActionBar
Theme_Material_Light_NoActionBar
Theme.Holo.Light.NoActionBar
Theme.Holo.Light.NoActionBar
注意1:
当我将屏幕移至水平方向时,edittext将占据所有可用空间,然后我可以看到我的左右文本选择手柄,如下图所示,但是我认为这是因为主题交换为 Theme .DeviceDefault.Light.NoActionBar ,当我将屏幕移至水平位置但不确定时:
When i move the screen to the horizontal then the edittext take all the available space, and then i can see my right and left text selection handles like on the picture below, but i think it's because theme swap to Theme.DeviceDefault.Light.NoActionBar when i move the screen to the horizontal but i m not sure :
注意2 :
在我的editText上,当我执行 setCustomSelectionActionModeCallback (新Callback(){})时,从未调用过Callback :(我认为这是不正常的吗?editText中的什么可以禁止回调?
On my editText, when i do setCustomSelectionActionModeCallback(new Callback() {}) then the Callback is never called :( this is not normal i think ? What in the editText can forbid the callback ?
注意2 :
我可以在所有主题中选择文本(但是我不能从课程中复制文本),但是在Theme.DeviceDefault.Light.NoActionBar中除外,我看不到左右文本选择手柄.
I can select text in all theme (but i can't copy it off course), but except in Theme.DeviceDefault.Light.NoActionBar i can't see the right and left text selection handle.
注意3 :
Theme.DeviceDefault.Light.NoActionBar仅在某些电话(例如三星银河)上显示左右文本选择手柄.在其他方面,它是行不通的.
Theme.DeviceDefault.Light.NoActionBar show the right and left text selection handle only on some phones like the samsung galaxy. On some other it's didn't work.
注意4 :
我部分找到了问题的根源!这是因为我通过WindowManager.addView(view,layout_params)创建了视图,并以此方式startactionmodeforChild返回null,这禁止显示操作栏和文本选择句柄.现在,如果我在edittext中执行以下操作:
i found partially the source of the problem! it's because i create my view via the WindowManager.addView(view, layout_params) and in this way startactionmodeforChild return null and this forbid the actionbar and the text selection handles to be show. Now if i do something like this in my edittext :
@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
Activity host = (Activity) this.getContext();
return host.getWindow().getDecorView().startActionMode(callback);
}
然后,我可以看到左右文本操作手柄(但不能在棉花糖上使用,它仅在棒棒糖上起作用,我不知道为什么).我现在的问题是显示了操作栏,但显示为空:(里面什么都没画(但是我可以看到剪切/复制/过去控件位于转储视图层次结构的内部).所以现在我没有在寻找一种方法用弹出菜单代替此操作栏(如图片Theme.DeviceDefault.Light.NoActionBar上的).有什么主意吗?
then i can see the right and left text action handles (but not on marshmallow, it's work only on lollipop this i don't know why). My problem now is that the actionbar is showed, but it's showed empty :( nothing is draw inside (but i can see that the cut/copy/past control are inside in the dump view hierarchie). So now i m not looking for a way to replace this actionbar by a popup menu instead (like on the picture Theme.DeviceDefault.Light.NoActionBar). Any idea ?
推荐答案
在您的活动中添加关注
ActionMode mActionMode;
,您必须创建一个ActionMondeCallback接口
and you have to create an ActionMondeCallback interface
class ActionBarCallback implements ActionMode.Callback
{
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.contextual_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int id = item.getItemId();
if(id == R.id.item_delete)
{
tv.setText("");
Toast.makeText(MainActivity.this,"option deleted",Toast.LENGTH_LONG);
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
}
contextual_menu.xml如下,带有必需的图标
where contextual_menu.xml is as follows with required icons
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.letschat"
>
<item
android:id="@+id/item_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="ifRoom|withText"
android:title="Delete"
android:titleCondensed="Delete">
</item>
<item
android:id="@+id/item_delete"
android:icon="@android:drawable/ic_menu_delete"
app:showAsAction="ifRoom|withText"
android:title="Delete"
android:titleCondensed="Delete">
</item>
<item
android:id="@+id/item_share"
android:icon="@android:drawable/ic_menu_share"
app:showAsAction="ifRoom|withText"
android:title="Delete"
android:titleCondensed="Delete">
</item>
</menu>
现在启用您的上下文操作栏(CAB),如下所示,例如,在长按文本视图时启用该功能
Now Enable your Contextual ActionBar(CAB) As follows as for example here am are enabling on long click of a textview
yourtextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mActionMode = MainActivity.this.startActionMode(new ActionBarCallback());
return true;
}
});
然后,您必须在单击CAB上的每个操作事件时编写自己的操作.
then you have to write your own action on click on each action event on CAB.
〜赏金猎人此处有更多详细信息
这篇关于EditText如何在没有任何操作栏的情况下激活复制/粘贴弹出窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!