我无法在菜单/ actionBar(minSDK 17和targetSDK 25)中显示图标,这有什么问题?

时间:2017-03-11 16:13:29

标签: android android-actionbar

  • compileSdkVersion 25
  • minSdkVersion 17
  • 依赖项编译' com.android.support:appcompat-v7:25.2.0'

这是我在/res/menu/main.xml中的菜单:

<?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/create_order"
            android:title="Create Order"
            android:icon="@drawable/ic_playlist_add_black_24dp"
            android:orderInCategory="1"
            app:showAsAction="always"/>

        <item
            android:id="@+id/action_setting"
            android:orderInCategory="100"
            android:title="Settings"
            app:showAsAction="never"/>

    </menu>

这是MainActivity:

package com.example.fulvio.bitsandpizzas;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
}

我没有得到我的代码错误的地方,我也没有直接在ActionBar和溢出菜单中看到图标,只有文字。

enter image description here

我已经阅读了其他类似的问题(和答案),但没有人帮助过我

2 个答案:

答案 0 :(得分:0)

默认情况下,Android菜单中不再显示图标。你必须使用回顾来实现这个目标(在你的活动中):

@Override
      protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if(menu != null){
          if("MenuBuilder".equals(menu.getClass().getSimpleName())){
            try{
              Method m = menu.getClass().getDeclaredMethod(
                  "setOptionalIconsVisible", Boolean.TYPE);
              m.setAccessible(true);
              m.invoke(menu, true);
            }
            catch(NoSuchMethodException e){
              //
            }
          }
        }
        return super.onPrepareOptionsPanel(view, menu);
      }

我不喜欢这种方法,但我没有找到任何其他解决方案来解决这个问题

答案 1 :(得分:0)

您需要更改

app:showAsAction = "always"

android:showAsAction = "always"

您可以使用AppCompatActivity代替Activity

package com.example.fulvio.bitsandpizzas;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}