禁用java的菜单项?

sigwle7e  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(452)

善良的人!告诉我如何使这样一个基本的东西作为一个残疾人菜单项与适当的外观,如从材料设计的例子?以编程方式。先谢谢你


编辑:以下示例将禁用单击,但不会根据材质设计更改外观:
代码示例:

@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
    super.onPrepareOptionsMenu(menu);
        MenuItem menuItem = menu.findItem(R.id.someItem);
        menuItem.setEnable(false);
}

xml示例:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/someItem"
        android:enabled="false"
        android:title="Some title" />
</menu>
egmofgnx

egmofgnx1#

我找到了一个解决方法,可以改变菜单项中的文本颜色。这样一个基本的东西没有开箱即用,这是非常可悲的。也许有人有更好的解决办法,我会很高兴看到的!

MenuItem  menuItem = menu.findItem(R.id.some_item);
menuItem.setEnabled(false);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(Color.GRAY), 0, s.length(), 0);
menuItem.setTitle(s);

结果:

irlmq6kh

irlmq6kh2#

您可以添加、删除或禁用菜单项,并在运行时更改菜单项的文本颜色,如下所示:
如果要根据“活动”生命周期中发生的事件修改“选项”菜单,可以在onPrepareOptions菜单()方法中执行此操作。此方法将菜单对象作为当前存在的对象传递给您,以便您可以修改它,例如添加、删除或禁用项(片段还提供onPrepareOptions菜单()回调。)
在Android2.3.x及更低版本上,每次用户打开选项菜单(按下菜单按钮)时,系统都会调用onPrepareOptions菜单()。
在android 3.0及更高版本上,当应用程序栏中显示菜单项时,选项菜单被认为始终处于打开状态。当事件发生并且要执行菜单更新时,必须调用invalidateoptionsmenu()以请求系统调用onprepareoptionsmenu()。
您可以查看文档

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/someItem"
    android:enabled="false"
    android:title="Some title"
    app:actionViewClass="android.support.v7.widget.TextView" 
    // if using androidX
    //app:actionViewClass="androidx.appcompat.widget.AppCompatTextView"/>
 </menu>

在java代码中

//sample code
 @Override
 public boolean onPrepareOptionsMenu (Menu menu) {
   //disable menu item and change text color
   MenuItem menu1 = menu.findItem(R.id.yourmenuid);
   menu1.setEnabled(false);
   TextView textView = (TextView) menu1.getActionView();
   textView.setTextColor(Color.BLACK);
   return true;
  }

必须调用invalidateOptions菜单()以请求系统调用onPrepareOptions菜单()。

相关问题