善良的人!告诉我如何使这样一个基本的东西,如一个禁用的菜单项与适当的外观,在例子中的材料设计?以编程的方式。提前谢谢你


编辑:以下示例将禁用单击,但不根据材料设计更改外观:
代码示例:
@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>发布于 2020-12-10 13:12:34
我找到了一个关于如何更改菜单项中文本颜色的解决方案。令人极为难过的是,这样一个基本的东西没有从盒子里拿出来。也许有人有更好的解决方案,我会很高兴看到!
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);结果:

发布于 2020-12-10 10:05:21
您可以在运行时添加、删除或禁用菜单项,并更改菜单项的文本颜色,如::
如果希望根据活动生命周期期间发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中这样做。此方法将当前存在的菜单对象传递给您,以便您可以修改它,例如添加、删除或禁用项。(片段还提供了一个onPrepareOptionsMenu()回调。) 在Android2.3.x和更低版本上,每次用户打开选项菜单(按菜单按钮)时,系统都会调用onPrepareOptionsMenu()。 在Android3.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;
}您必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu().
https://stackoverflow.com/questions/65231566
复制相似问题