我实现了操作栏的布局,包括一个按钮,另一个是设置按钮。我在预览窗口(Intellij IDEA 13)中查看我看到的是我预期但不在真实设备上(三星注3)。
这是我的布局:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- chat list. should appear as action button -->
<item android:id="@+id/action_chat_list"
android:icon="@drawable/ic_menu_chat_list"
android:title="@string/action_chat"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />
</menu>
在预览窗口中。我看到了我的预期:
但是当我在真实设备上运行时(Samsung Note 3)。我看不到设置按钮:
我无法理解为什么。请告诉我如何解决这个问题。
谢谢:)
答案 0 :(得分:3)
因为三星还有一个菜单按钮。 AFAIK没有针对此
的解决方法答案 1 :(得分:1)
因为您的主页按钮左侧有选项按钮。当您触摸它时,溢出菜单将显示在屏幕上。我想它是在后台实现的,因此它会在具有“真实硬件”选项按钮的设备上显示。
下面是我在网上找到的按钮的图片。 http://cdn.webcazine.com/wp-content/uploads/2012/06/samsung_galaxy_s3_option_keys1.jpg?00d8d4
答案 2 :(得分:1)
正如@Blackbelt所提到的,因为三星有一个菜单按钮,所以动作栏会自动隐藏它。我成功关注this link来解决此问题。这真是一个小小的黑客,因为你使用java反射api来改变私有属性的值。
当您开始运行应用程序时,首先将此代码放在首位。您可以继承Application
并将此代码放在onCreate
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
}
}
并在application
标记下的android清单文件中声明此类:
<application
android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowBackup="true"
android:name=".MyApplication">
</application>
希望这有帮助:)