waf*_*irt 2 java eclipse android android-studio
我最近开始使用Android Studio而不是Eclipse的ADT插件.总的来说,我在Android Studio中遇到的问题非常少,而且过渡并不是很困难.今晚,我在Android Studio中开始了一个新项目,并快速设置了主要活动的基本布局,并添加了一个包含三个项目的操作栏.编辑菜单xml文件时菜单的预览显示操作栏中的按钮,但是当我在我的Galaxy SII(运行android 4.2.2)或Genymotion模拟器(运行android 4.3)上启动应用程序时,按钮是总是强行进入溢出菜单.我在操作栏中禁用了应用程序标题,以确保按钮有足够的空间,但仍然没有运气.
然后我在Eclipse中创建了一个项目,并将其复制到菜单的XML上.在我的手机和模拟器上,按钮显示在操作栏中而不是溢出菜单中.在这一点上,我看不出为什么项目在两个不同的IDE中表现不同的原因.我将Eclipse项目导入到Android Studio中,令人惊讶的是,当我再次在手机和模拟器上启动应用程序时,按钮出现在操作栏中.
有没有其他人遇到过与此类似的问题?这是一个非常令人沮丧的几个小时的圈子,直到我设法在Android Studio中获得一个按照我的意愿工作的项目.
Android Studio 0.5.7中的以下步骤可以让您与我所做的相同.
将以下内容添加到文件中:
<item android:id="@+id/testmeniitem"
android:title="Test Menu Item"
android:showAsAction="always"
android:icon="@drawable/ic_launcher"
/>
Run Code Online (Sandbox Code Playgroud)预览应如下所示:
在MainActivity.java中更新onCreateOptionsMenu,以便它使测试菜单膨胀.
getMenuInflater().inflate(R.menu.test_menu,menu);
如果需要更多信息,请通知我,我将更新问题.
尝试如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/testmeniitem"
android:title="Test Menu Item"
android:showAsAction="always"
app:showAsAction="always"
android:icon="@drawable/ic_launcher"
/>
</menu>
Run Code Online (Sandbox Code Playgroud)
您需要放置一个自定义命名空间并设置showAsAction两次.
我知道这很奇怪,但必须这样做以确保showAsAction所有API和所有兼容性库的工作.
如果您的应用程序使用支持库以获得与Android 2.1一样低的版本的兼容性,则android:namespace中不提供showAsAction属性.相反,此属性由支持库提供,您必须定义自己的XML命名空间并将该命名空间用作属性前缀.(自定义XML命名空间应该基于您的应用程序名称,但它可以是您想要的任何名称,并且只能在您声明它的文件范围内访问.)