2015-04-14 91 views
3

我只需要在活動名稱旁邊的清單(ic_launcher.png)中指定的徽標。它顯示爲啓動程序的圖標,但不顯示在菜單中。我已將徽標和圖標屬性指向清單中的這一個圖像。我在OnCreateOptionMenu中使用getMenuInflater()來填充屏幕頂部的菜單。這一直工作正常。我設置它,以便用戶可以點擊並移動應用程序的不同活動。應用程序的名稱顯示出來,但該圖標不在該欄中。將Android徽標添加到操作欄時遇到問題

我的清單具有標誌:

<application 
     android:allowBackup="true" 
     android:logo="@mipmap/ic_launcher" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

當我把這個代碼啓用,程序崩潰。爲什麼?

ActionBar actionBar= getActionBar(); 
    actionBar.setDisplayUseLogoEnabled(true); 

On android's own developer site它說:

使用的標誌,而不是一個圖標

缺省情況下,系統會使用你的應用程序圖標操作欄中, 如通過圖標屬性指定該元素或 元素。但是,如果您還指定了徽標屬性,則 操作欄將使用徽標圖像而不是圖標。

我也試過直接與相同的結果運行它:

getActionBar().setDisplayUseLogoEnabled(true); 

崩潰:

Caused by: java.lang.NullPointerException 
at .MainActivity.onCreate(MainActivity.java:33) 

它的指向上述聲明。

我也試過:

getSupportActionBar().setDisplayUseLogoEnabled(true); 

的應用程序不會與此崩潰,但沒有任何標誌。

我有Theme.AppCompat.Light.DarkActionBar作爲我的應用主題,我相信這會把我的圖標帶走。

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

我伸出ActionBarActivity和充氣菜單getMenuInflater().inflate(R.menu.menu_main, menu);

我延長ActionBarActivity。

+0

發佈您收到的錯誤 –

+0

您是否使用appcompat-v7?哪個版本? –

+0

嘗試使用getSupportActionBar()代替 –

回答

0

您的代碼有多個問題。

由於您正在使用ActionBarActivity和AppCompat,因此您必須瞭解使用ActionBarActivity時的確切含義。

您還沒有貼出你的代碼,所以,如果你正在使用的工具欄或動作條

如果你已經在使用工具欄(動作條已經過時,如果你還在使用你不應該使用。)目前尚不清楚那麼你可以像這樣設置圖標。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) { 
     setSupportActionBar(toolbar); 
     toolbar.setLogo(R.drawable.icon_here); 
    } 

如果你不使用工具欄,然後先設置你的主題,這些線路。

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
     <item name="colorAccent">@color/accent</item> 

<!-- following two lines --> 
     <item name="android:windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
</style> 

然後在您的活動佈局文件的頂部添加工具欄。

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    > 
+0

這顯示在我正在使用的活動中,但只在我的主要活動中可點擊(我在操作欄中有字符串作爲快捷鍵)。這不在我的其他活動。 – munchschair

+0

這兩項活動都顯示了什麼?更新你的問題來解釋問題。 – Sharj

+0

一切正常。 – munchschair

-1

android:logo="@drawable/...."添加到您的清單文件的應用程序部分。

android:logo 整個應用程序的標誌和活動的默認標誌。

該屬性必須設置爲對包含圖像的可繪製資源的引用(例如「@ drawable/logo」)。沒有默認標誌。

+0

我已經有了。 – munchschair

+0

哦,等等,它必須是可繪製的嗎?我用mipmap。 – munchschair

0

我也建議你使用android:icon =「@ drawable/ic_launcher」代替。(嘗試@drawable

如果它不工作,嘗試getActionBar().setDisplayShowHomeEnabled(true); (應setContentView(R.layout.activity_main);之前調用)

順便說一句,如果你想指定每個不同的活動圖標,你也可以設置機器人:標誌= 「@繪製/ YOUR_ICON」在活動

希望工程

+0

爲什麼可以繪製而不是mipmap? – munchschair

+0

也許它工作?請參閱http://developer.android.com/guide/topics/resources/drawable-resource.html – Chen

+0

首先不起作用。其次使程序崩潰。我在那裏添加了崩潰^。 – munchschair

0

嘗試......

<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> 
+0

這也崩潰了。 (我沒有包含mainColor500)。 – munchschair

1

此問題很可能是由於您使用支持庫的版本爲21. +或22. +而導致的。從棒棒糖開始,不鼓勵在ActionBar中使用應用程序徽標,並且最新版本的支持庫反映了此變化。

如果您仍然希望使用應用程式標誌ActionBar,你需要Toolbar視圖添加到您的佈局(在此視圖的更多信息,可以發現here),並利用其setLogo()方法之一:firstsecond

+0

如果我已經在擴展ActionBar並使用MenuInflator,該怎麼辦? – munchschair

+0

@munchschair好吧,如果你不想使用工具欄,一個選項是將targetSdkVersion和支持庫版本設置爲19.你會再次看到你的標誌。但是你的應用會看起來像棒棒糖設備上的全息照片。如果您可以處理它,請將您的應用程序定位到KitKat設備。 – aga

0
getSupportActionBar().setDisplayShowHomeEnabled(false); 
getSupportActionBar().setDisplayUseLogoEnabled(true); 
0

按照Android blogmipmap文件夾是應用程序圖標,但並不是說應用程序標識也沒問題。所以我想你最好從可繪文件夾設置標誌:

<application 
    android:allowBackup="true" 
    android:logo="@drawable/ic_launcher" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

希望這個幫助!

相關問題