在使用AppCompat时,ActionBar中的Logo未显示出来

31

我不知道哪里出了问题,但我无法在我的操作栏中设置我的徽标。 我的 AndroidManifest.xml:

<application 
    android:icon="@drawable/application_icon" 
    android:label="@string/icon_name"
    android:logo="@drawable/actionbar_logo"
    android:theme="@style/PolarTheme">

而且我在清单文件中的活动标签中设置了我的 logo:

<activity 
    android:name=".Main"
    android:theme="@style/PolarThemeLogo"
    android:logo="@drawable/actionbar_logo"
    android:windowSoftInputMode="adjustPan">
</activity>

这是我的themes.xml文件中的内容:

<style 
    name="PolarThemeLogo" parent="Theme.AppCompat.Light.DarkActionBar">  
    <item name="colorPrimary">@color/mainColor500</item>
    <item name="colorPrimaryDark">@color/mainColor700</item>
    <item name="colorAccent">@color/accentColorA200</item>

    <item name="actionBarStyle">@style/MyActionBarLogo</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

我的 styles.xml 文件:

<style name="MyActionBarLogo" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/mainColor500</item>
    <item name="displayOptions">useLogo</item>
</style>

在我的Main.java文件中:

public class Main extends ActionBarActivity {

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);    
    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("");
    actionBar.setDisplayUseLogoEnabled(true);

有什么想法吗?

更新-已解决

我从AndroidManifest.xml中删除了所有android:logo属性,并像这样修改了我的MyActionBarLogo样式:

<style name="MyActionBarLogo" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="background">@color/mainColor500</item>
    <item name="logo">@drawable/actionbar_logo</item>
    <item name="displayOptions">useLogo|showHome</item>
</style>

现在ActionBar正在显示我的Logo. :)


1
谷歌的文档一如既往地详细。 - MLProgrammer-CiM
我不相信你需要从manifest中删除android:logo,样式应该足够了。 - Jon Willis
为什么你不使用样式继承?当你使用“.”作为分隔符时,样式会自动从其父级继承。例如:PolarTheme.Logo 将从 PolarTheme 继承。 - Roel
但是图标显示在操作栏的中间,我该如何将它设置为操作栏的左侧? - Mohammad Rajob
3个回答

27

我使用以下代码显示标志,希望对您有所帮助。

getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.logo);

1
是的,指令的顺序似乎很重要,你的解决方案非常好。 - LucasFM

25

我从我的AndroidManifest.xml中删除了所有android:logo属性,并将我的MyActionBarLogo样式修改为以下内容:

<style name="MyActionBarLogo" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="background">@color/mainColor500</item>
    <item name="logo">@drawable/actionbar_logo</item>
    <item name="displayOptions">useLogo|showHome</item>
    </style>

现在ActionBar正在显示我的标志。 :)


谢谢 zkminusck :) 现在我可以使用"useLogo|showHome|showTitle"在我的操作栏中看到左箭头、logo以及标题。但是箭头和logo之间有一段距离。logo更靠近标题,但与箭头分开。我能否将logo移动一点靠近箭头? - AndroidGuy
1
我认为如果你使用新的工具栏小部件并为其定义自定义布局,则可以实现。但首先请检查材料设计准则,如果箭头和徽标之间有间隙,则应该没问题。此外,您还可以检查徽标图片,也许左侧的内边距太多了。 - zkminusck
@zkminusck 我也正好需要做这个,但是带有选项卡。当我尝试你的代码时,logo 被显示出来了,但是选项卡却消失了。是否有办法在上述主题中设置 navigationMode 属性呢? - Muhammad Qasim

1

只需在Java文件中添加3行代码,不要在XML和Android清单中添加代码。

    getSupportActionBar().setDisplayUseLogoEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.mipmap.ic_launcher);

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