不同屏幕尺寸需要不同的菜单XML文件

3

是否可以为不同的屏幕尺寸定义不同的菜单?我尝试添加文件夹 res/menu-largeres/menu-xlarge,但是我在xlarge平板电脑上放置在这里的菜单xml没有任何效果。

2个回答

1

这不是一个真正的答案,只是一个想法,但是评论区写不下:

我认为这不受支持,似乎没有文档记录。但是一个可能的想法是,对不同的值设置布尔值。例如,您可以设置一些res-values文件夹:

res/values-xlarge res/values-large res/values-sw600dp

等等。在这些values中,您可以声明一个布尔值:

    <resources>
<bool name="isXLarge">true</bool>
    </resources>

或者

    <resources>
<bool name="isLarge">true</bool>
    </resources>

然后创建不同的菜单布局,如果其中一个值为真,则可以启动。

menu_large.xml menu_xlarge.xml menu_sw620dp.xml

在createOptionsMenu方法中:
    @Override
  public boolean onCreateOptionsMenu(Menu menu) {
   MenuInflater inflater = getMenuInflater();
   boolean xlargeValue = getResources().getBoolean(R.bool.isXlarge);
   boolean largevalue = getResources().getBoolean(R.bool.isLarge);
   boolean tabletValue = getResources().getBoolean(R.bool.sw620dp):

   if(xlargeValue==true){
   inflater.inflate(R.menu.menu_xlarge, menu);
   }else if(largevalue==true){
    inflater.inflate(R.menu.menu_large, menu);
   }else if(tabletValue==true){
      inflater.inflate(R.menu.menu_sw620dp, menu);
    }

   return true;
  }

我从未测试过它,因为如果你将不同的可绘制对象设置到可绘制目录中,生成的菜单在所有屏幕尺寸上看起来都很好。

谢谢!这不是一个很整洁的解决方案,因为需要Java代码分支,但我会尝试一下。 - Violet Giraffe
是的,我知道。但有时候如果没有支持我们想要做的事情的解决方案,我们需要一个简洁的解决方案.... :) - Opiatefuchs

0
您可以为不同的屏幕尺寸创建不同的菜单文件夹,例如:
res/menu res/menu-sw600dp res/menu-sw720dp 等等。
然后将您的菜单文件放在相应的文件夹中,它们将在运行时被捡起。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接