Articles of contextmenu

从Android上的TextView复制文本

我有一个ListView ,其中每个项目都是TextView 。 我想启用类似于EditText的长按行为,该EditText显示默认上下文菜单,其中包含“全选”,“全部剪切”,“全部复制”等项目。 有没有一种简单的方法来为TextView启用它?

EditText:在文本选择处理程序单击事件上禁用粘贴/替换菜单popup窗口

我的目标是拥有一个没有花哨function的EditText ,只需要文本选择处理器就可以更轻松地移动光标 – 所以没有上下文菜单或popup窗口。 根据此解决方案 ,我通过使用ActionMode Callback事件禁用了文本编辑function操作栏(复制/粘贴等)的外观。 当文本存在于字段中并且文本中出现单击时,中间的中间文本选择句柄(见下图)仍然会出现。 大! 我想保持这种行为。 我不想要的是单击文本选择句柄本身时出现的“粘贴”菜单。 我还通过在样式XML中设置android:longClickable=”false”来禁用EditText的长按输入。 禁用长按可防止单击鼠标(即长按)时出现“粘贴/替换”菜单,但是当在文本中单击鼠标(单触)时,会出现文本选择手柄,并且单击文本选择手柄本身,然后出现“粘贴”菜单选项(当剪贴板中有文本时)。 这就是我想要阻止的。 从我从源头看到的内容, ActionPopupWindow是PASTE / REPLACE选项的popup窗口。 ActionPopupWindow是公共类android.widget.Editor中私有抽象类HandleView中的受保护variables(mActionPopupWindow)… 如果没有禁用剪贴板服务或编辑Android源代码,有没有办法阻止它显示? 我试图为android:textSelectHandleWindowStyle定义一个新的样式android:textSelectHandleWindowStyle ,并设置android:visibility to gone ,但它没有用(app会冻结一段时间,否则会显示)。

自定义ListView和上下文菜单。 怎么弄呢?

我的应用程序中有两个布局文件。 我还有Activity扩展ListActivity。 此活动的每个项目都会考虑item.xml布局文件。 我在长按项目时尝试获取上下文菜单,但我没有看到它。 在我的活动中,我尝试registerForContextMenu(getListView())并覆盖两个方法 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = this.getIntent().getExtras(); registerForContextMenu(getListView()); new PopulateAdapterTask().execute(ACTION_SELECT); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); } catch (ClassCastException e) […]

从后面的代码显示上下文菜单

这可能是一个简单的问题,但我一直在环顾四周,找不到答案。 是否有任何代码可以从代码中显示Android上下文菜单,而不是按菜单按钮? 例如,当我触摸屏幕时,它会调用上下文菜单吗?

如何使用XML文件创建Context Menu?

我正在使用XML文件为我的ListView创建上下文菜单。 (请参阅下文)。 我还想为此上下文菜单设置标题。 我阅读( http://www.mail-archive.com/android-developers@googlegroups.com/msg43062.html )我可以在onCreateContextMenu方法中使用menu.setHeaderTitle(myContextMenuTitle)。 但我需要在XML文件中设置它。 我怎么能做到这一点? 以下是onCreateContextMenu方法的代码,如果我做错了,请更正我。这是我的context_menu.xml文件: 这是我的onCreateContextMenu方法: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); } 这是我的onCreate方法: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // extras = getIntent().getExtras(); registerForContextMenu(getListView()); … }

getMenuInflater()方法Android上下文菜单创建中的未定义问题

我试图在片段内创建一个上下文菜单项。 但是我遇到了getMenuInflater()方法的问题。 它是未定义的。 我已经导入了所有必要的包。 谁能指出我在这里做错了什么? 这是我的代码: import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.view.MenuItem; public class FeaturedFragment extends Fragment { public FeaturedFragment() { } public static final String ARG_SECTION_NUMBER = “section_number”; @Override public View onCreateView(LayoutInflater inflater, ViewGroup […]

Android:单击上下文菜单

我有一个扩展ListActivity的Intent。 在填充列表适配器后的onCreate方法中,我使用registerForContextMenu(getListView()); 注册上下文菜单。 现在它正在工作,上下文菜单有其原始function; 一旦我点击并按住某个项目,就会打开上下文菜单。 我可以一键打开上下文菜单(无需按住列表)吗? 所有帮助表示赞赏。

禁用EditText上下文菜单

我正在为传统的蒙古语制作一个垂直的EditText 。 我已经通过在旋转的ViewGroup嵌入稍微修改过的EditText成功实现它。 我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转ViewGroup时也不会旋转。 所以我想完全禁用系统上下文菜单。 请注意,这与仅仅尝试禁用复制/粘贴/等的这些问题不同: 如何禁用从/到EditText的复制/粘贴 EditText:在文本选择处理程序单击事件上禁用粘贴/替换菜单popup窗口 如何在android EditText中禁用粘贴选项 Android:如何在Edittext中完全禁用复制和粘贴function 虽然我没有在模拟器中出现上下文菜单,但我将它出现在我的Android 5.0.2小米手机中。 我努力了: setCustomSelectionActionModeCallback “解决方案” setLongClickable(false); “解” onTouchEvent “解决方案” 我对hacks持开放态度,但我需要它能够在各种设备上持续工作。 Mark Murphy(一个Commons Guy)回复了另一个尝试做类似事情的用户的回复: 我怀疑,即使你拿出一个答案,它也无法在各种设备上运行。 设备制造商倾向于为EditText推出自己的“上下文菜单”,从而使开发人员尝试将项目添加到该上下文菜单中。 我的猜测是,试图阻止该上下文菜单会产生类似的结果。 我运气不好吗? 我现在唯一能想到的就是从头开始完全重写TextView和EditText (好吧,通过修改Android源代码)。 我知道其他人做了类似的事,但他的代码不是开源的。 在采取这一重大步骤之前,我想尝试在Stack Overflow上寻求更简单的解决方案。 更新:我一直在尝试修改过去两天的TextView源代码,看起来像是一个6个月的项目。 这是一大堆相互关联的课程。 我需要另一个解决方案,但我没有想法。 MVCE 这是我能想到的最简单的方法来重现问题。 我的自定义EditText没有必要。 布局有一个EditText ,它替换了默认项目Hello World的TextView 。 我将min API更改为11以避免处理已弃用的方法。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle […]

如何禁用Android中特定ListView项目的上下文菜单

我知道这个问题以前被问过,答复是重写onPrepareContextMenu()/ onCreateContextMenu()。 但我不明白,没有得到任何解决scheme。 请帮助我如何禁用特定的ListView项目的上下文菜单。

Fragment中的上下文菜单使用来自不同Fragment的ListView:registerForContextMenu(getListView())

我试图寻找解决scheme,但没有发现任何符合我的情况。 我有一个扩展FragmentActivity的MainActivity和多个ListFragments。 我使用PagerSlidingTabStrip库为slidetabs和ViewPager。 碎片没有XML布局,它们只是ListFragments,它返回一个ListView,所以不需要布局。 这是一个音板应用程序,长按列表项目,允许用户设置一个声音文件作为他们的铃声,通知或报警,或保存到SD卡。 现在,所有的Fragments都可以加载自己的数据。 一切似乎没问题,但是,当我在后台加载的Fragment上使用上下文菜单时,似乎是使用来自之前加载的第一个或上一个片段的Lis​​tView,创build它之前可见的那个片段。 我的意思是说,我的MainActivity开始,它加载FragmentA,并在后台FragmentB也预装。 在onActivityCreated方法中,对于这两个片段,它使用registerForContextMenu(getListView())。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Data loading etc MyAdapter adapter = new MyAdapter(getActivity(), R.layout.data_row, data); setListAdapter(adapter); registerForContextMenu(getListView()); } 但似乎正在发生的是,FragmentB调用registerForContextMenu(getListView()),它似乎是采取当前活动的ListView,这是FragmentA的列表。 所以说,我select从上下文菜单中保存一个文件。 我长按FragmentB的第一项,但它试图保存FragmentA的第一项。 如果我只点击列表项,就会像期望的那样播放它自己的声音,但上下文菜单命令使用预载的时候可见的片段列表。 这是onCreateContextMenu。 请注意,此时它使用上下文菜单标题中的正确的项目标题。 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; menu.setHeaderTitle(data.get(info.position).getDataName()); MenuInflater […]