ActionBar:设置按钮不会出现在三星设备的操作栏中

时间:2014-11-11 17:00:43

标签: android layout android-actionbar

我实现了操作栏的布局,包括一个按钮,另一个是设置按钮。我在预览窗口(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>

在预览窗口中。我看到了我的预期:

expected image

但是当我在真实设备上运行时(Samsung Note 3)。我看不到设置按钮:

Real image

我无法理解为什么。请告诉我如何解决这个问题。

谢谢:)

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>

希望这有帮助:)