应用程序的图标未显示在 ActionBar 中

Application's icon not displayed in ActionBar

我是 Android 编程界的新手,我不明白为什么系统没有在我的第一个 [=] 'ActionBar' 左侧显示应用程序图标44=] 应用程序 (HelloWorld)。

在 'ActionBar' 开发人员指南中指出: "By default, the system uses your application icon in the action bar, as specified by the icon attribute in the "application" 或 "activity" 元素。但是,如果您还指定了徽标属性,则操作栏将使用徽标图像而不是图标。" (Action bar)

我的 Android-manifest 文件没有定义 'logo' 属性,而只定义了 'icon' 属性。因此,'icon'属性定义的图标应该作为应用程序图标显示在'ActionBar'的左侧。但是,没有显示图标。

我的Android-manifest文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.holamundo"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppBaseTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

我的样式文件如下:

/res/values/styles.xml:

<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">    
</style>
<style name="AppTheme" parent="AppBaseTheme">        
</style>
</resources>

/res/values-v11/styles.xml:

<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
</style>
</resources>

/res/values-v14/styles.xml:

<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
</resources>

谁能解释为什么我的应用程序图标没有显示在 ActionBar 中,我应该修改什么才能显示这样的图标?谢谢。

您的 activity 必须扩展 ActionBarActivity。

例如:

public class MainActivity extends ActionBarActivity
{
...
}

或者在您的 activity 中试试这个:

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setIcon(R.drawable.ic_launcher);

如果使用支持库,则必须使用 getSupportActionBar()。

我也遇到了菜单项图标未显示的问题。我有一个工具栏,我将其设置为支持操作栏。清单声明了一个 NoActionBar 主题。最初我认为 none 的操作项目图标会显示,但是,我发现会显示一些可绘制的图标。例如,“@android:drawable/ic_menu_add”会起作用,但 "drawable/ic_launcher_background" 不会起作用。这是我在 onCreateOptionsMenu 期间扩充的菜单结构。项目 action_logo 使用了一个 png 文件,那个也可以。 'ic_launcher_background" 是在创建项目时自动添加的可绘制对象。

  <item
    android:id="@+id/action_help"
    android:orderInCategory="50"
    android:title="@string/action_help"
    android:icon="@android:drawable/ic_menu_add"
    app:showAsAction="always" />
<item
    android:id="@+id/action_more"
    android:orderInCategory="60"
    android:title="@string/action_help"
    android:icon="@drawable/ic_launcher_background"
    app:showAsAction="always" />
<item
    android:id="@+id/action_logo"
    android:orderInCategory="70"
    android:title="@string/action_help"
    android:icon="@drawable/tabellae_logo"
    app:showAsAction="always" />
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />

我一直试图做的是动态生成一个 BitmapDrawable 并在 onPrepareOptionsMenu 调用期间将其添加到菜单中,但这种可绘制对象也不会显示。

我有不同的测试应用程序,其清单设置为 ActionBarTheme。在此配置中,您无需调用 setSupportActionBar。 (如果您尝试这样做是错误的)现在这个测试应用程序可以正确显示所有菜单图标。它是一个 AppCompatActivity 应用程序。我的猜测是这个测试应用程序可能使用旧式 ActionBar 而不是新推荐的 ToolBar 方法,这就是它起作用的原因。

我更喜欢使用 ToolBar 方法,但我没有解释为什么某些图标可绘制对象有效而其他图标无效。在我对这个问题的研究中,我没有看到任何人提到这些观察结果。也许有人会更深入地了解为什么某些可绘制对象不适用于菜单项图标。