【问题标题】:How to see icons on ActionBar?如何查看 ActionBar 上的图标?
【发布时间】:2015-09-22 12:17:40
【问题描述】:

我的代码出了什么问题,它无法显示我的任何 Android ActionBar 图标。 下面是我的代码:纠正遗漏的地方。

我的 style.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- Customize your theme here. -->



</style>

我的主题.xml:我使用了自定义主题。我想从这里我需要更改以显示图标

 <?xml version="1.0" encoding="utf-8"?>

<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
    parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>

    <item name="android:actionMenuTextColor">@style/MyActionBarTitleText</item>

    <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>

</style>

<!-- ActionBar styles -->
<style name="MyActionBar"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/PrimaryColor</item>
</style>


<!-- ActionBar title text -->
<style name="MyActionBarTitleText"
    parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:background">@color/ActionBarTitleText</item>
</style>



<!-- ActionBar tabs text styles -->
<style name="MyActionBarTabText"
    parent="@android:style/Widget.Holo.ActionBar.TabText">
    <item name="android:textColor">@color/ActionBarTitleText</item>
</style>

主活动:

//ActionBar creating/adding icon in Menu
@Override
public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.main_activity_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

//ActionBar Menu icon listerner like clicking options
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case R.id.info:
            Toast.makeText(getApplicationContext(),
                    "Info Selected",Toast.LENGTH_SHORT).show();
        case R.id.st:
            Toast.makeText(getApplicationContext(),
                    "Setting Selected",Toast.LENGTH_SHORT).show();
        default:
            return super.onOptionsItemSelected(item);
    }
}

main_activity_menu.xml:我尝试了“always”和“IfRoom”,但它不起作用。

<?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"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">

<item
    android:id = "@+id/info"
    android:title="info"
    android:icon="@drawable/ic_info_outline_white_24dp"
    app:showAsAction="always|withText">

</item>

<item
    android:id = "@+id/st"
    android:title="settings"
    android:icon="@drawable/ic_settings_white_24dp"
    app:showAsAction="always">

</item>

【问题讨论】:

  • 您的onOptionsItemSelected( ) 应该为您自己处理的所有情况返回true
  • 您忘记关闭 xml 中的 标记。是“复制粘贴”错误吗?
  • 你的扩展类是什么?
  • 复制粘贴错误。

标签: android android-actionbar android-menu


【解决方案1】:

你应该使用android:showAsAction = "ifRoom"

【讨论】:

    【解决方案2】:

    如果您使用 AppCompatActivity,请尝试this

    将此代码添加到您的 Activity 类中:

    @Override
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if (menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                    Method m = menu.getClass().getDeclaredMethod(
                            "setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                    Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e);
                }
            }
        }
    return super.onPrepareOptionsPanel(view, menu);
    }
    

    【讨论】:

      【解决方案3】:

      尝试关注,

      ActionBar actionBar = getSupportActionBar();
      actionBar.setLogo(R.drawable.ic_launcher);
      actionBar.setDisplayUseLogoEnabled(true);
      actionBar.setDisplayShowHomeEnabled(true);
      

      【讨论】:

      • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。如果只是猜测,还建议您不要发布答案。一个好的答案将有一个合理的理由说明它为什么可以解决 OP 的问题。
      【解决方案4】:

      你最好在 onCreateOptionsMenu 中return true

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater menuInflater = getMenuInflater();
          menuInflater.inflate(R.menu.main_activity_menu, menu);
          return true;
      }
      

      除此之外,您的代码中似乎还有其他一些问题。例如,你应该在每个 case 语句的末尾加上 break。

      case R.id.info:
          Toast.makeText(getApplicationContext(),
                  "Info Selected",Toast.LENGTH_SHORT).show();
          break;
      case R.id.st:
          Toast.makeText(getApplicationContext(),
                  "Setting Selected",Toast.LENGTH_SHORT).show();
          break;
      

      【讨论】:

        【解决方案5】:

        您只需将app:showAsAction 更改为android:showAsAction,因为您没有使用兼容性主题

        【讨论】:

          猜你喜欢
          • 2020-01-05
          • 2012-10-28
          • 1970-01-01
          • 2012-11-22
          • 2020-02-16
          • 2014-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多