操作栏上没有应用程序图标

36

这里有很多问题涉及到将图标添加到ActionBar中,但没有一个解决了我的问题。如果你知道这个问题的副本,请随意评论或关闭这个问题。

我已将项目迁移到IntelliJ,但在我的以前的IDE(Eclipse)中没有遇到过这个问题。

问题:应用程序图标未显示在ActionBar中。

在此输入图片描述

我认为它应该默认添加,这就是为什么我无法通过它的XML添加它的原因。

在此输入图片描述

这是它的XML

<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/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="always" />
</menu>

谢谢!


请参考这个非常详细解释的答案: https://dev59.com/qmYq5IYBdhLWcg3wcgLq#14483595 - Arbaz Alam
6个回答

40
自AppCompat 21版本起,操作栏遵循Material Design指南并使用工具栏

  • 标题和副标题。 标题应该是导航层次结构中工具栏当前位置的路标以及所包含的内容。如果有副标题,则应指示有关当前内容的任何扩展信息。如果应用程序使用了徽标图像,则应强烈考虑省略标题和副标题。

在现代Android UI中,开发人员应更多地依赖于工具栏的视觉区别色彩方案,而不是他们的应用程序图标。 在API 21设备及更高版本上,不鼓励使用应用程序图标加标题作为标准布局。

但是,如果您想要一个应用程序图标,setLogo()是正确的方法。


很棒的答案!在我看来,这就是答案应该写的方式。 - flo

28

请用下面的代码更新您的onCreate()方法。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setLogo(R.drawable.ic_launcher);
    getSupportActionBar().setDisplayUseLogoEnabled(true);
    setContentView(R.layout.activity_main);
}

注意: ic_launcher 是您想在操作栏中显示的图标。要显示它,请将该图标添加到应用程序项目的 drawable 文件夹中。


1
也适用于我。:) 太棒了。最简单的解决方案。复制并粘贴3行代码,就完成了。 - sagarkothari
像魔法一样好用。太棒了! - federico verchez

9
在你的 Style.xml 文件中:
 <style name="MyTheme_ActionBar" parent="@style/Theme.AppCompat.Light">
   <item name="icon">@drawable/actionbar_logo</item>
  </style>

activity中添加以下代码:
ActionBar mActionBar = getSupportActionBar();
mActionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);

4
我添加了 "ActionBar.DISPLAY_SHOW_TITLE" 以获取标题。 - lenooh

3

这对我很有效。您的onCreate方法应该包含以下行:

ActionBar menu = getSupportActionBar();
menu.setDisplayShowHomeEnabled(true);
menu.setIcon(R.mipmap.imageFile);

确保imageFilemipmap文件夹中是一个.png格式。为了将图标准确地放置在操作栏的开头,mipmap文件夹应该有多个版本的图像文件,适配所有屏幕尺寸:hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi等。


3
如果您不关心Material主题,且希望Activity看起来更像JellyBean / Kitkat风格,并在操作栏中包括图标,则可以执行以下操作:
首先,在styles.xml中将主题设置更改为以下内容:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

转化为:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

现在将所有的活动更改为继承自android.app.Activity而不是android.support.v7.app.ActionBarActivity。即:
将这个修改为:
import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity{

到这个:
import android.app.Activity;

public class MainActivity extends Activity {

完成以上两个步骤的结果是,AndroidManifest.xml 中指定的 android:icon 属性所对应的图标将出现在操作栏中。

1
在操作栏上设置图标
显示操作栏上的图标可能有些棘手。
如果您正在扩展Activity,这应该就足够了:
getActionBar().setDisplayShowHomeEnabled(true);

如果您正在扩展AppCompatActivity,则需要额外的代码:
ActionBar actionBar = getSupportActionBar();
actionBar.setIcon(R.mipmap.ic_launcher);
actionBar.setDisplayShowHomeEnabled(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接