【问题标题】:ActionBar: setting button not appear in actionbar on samsung deviceActionBar:三星设备的操作栏中不显示设置按钮
【发布时间】:2014-12-08 01:43:02
【问题描述】:

我实现了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>

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

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

我不明白为什么。请告诉我如何解决这个问题。

谢谢:)

【问题讨论】:

    标签: android layout android-actionbar


    【解决方案1】:

    因为三星还有一个菜单按钮。 AFAIK 没有解决方法

    【讨论】:

    • 我见过一些变通方法,但它们很老套。最好只使用硬件菜单键。
    • @blackbelt 感谢您指出这一点。我希望所有设备都使用相同的 UI。我想我会手动实现这个按钮。你知道如何获得设置按钮吗? (R.drawable.some_thing) 谢谢 :)
    【解决方案2】:

    因为您的主页按钮左侧有选项按钮。当您点击它时,溢出菜单将显示在屏幕上。我猜它是在后台实现的,因此它不会显示在具有“真实硬件”选项按钮的设备上。

    这是我在网上找到的按钮的图片。 http://cdn.webcazine.com/wp-content/uploads/2012/06/samsung_galaxy_s3_option_keys1.jpg?00d8d4

    【讨论】:

      【解决方案3】:

      正如@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
              }
          }
      }
      

      你在你的android清单文件中声明这个类application标签:

      <application
                  android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowBackup="true"
                  android:name=".MyApplication">
      </application>
      

      希望有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 2019-01-11
        相关资源
        最近更新 更多