Логотип панели действий манифеста Android

Это довольно просто, но это причиняло мне горе. Я хочу, чтобы на моей панели действий отображался ресурс @drawable, указанный android:logo в манифесте:

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

Если я удалю атрибут android:theme, появится логотип, но приложение сразу же выйдет из строя из-за какого-то недопустимого исключения состояния в super.onCreate(savedInstanceState); в основном действии. Если я выйду из темы, панель действий будет пустой, а цвет фона будет установлен в действии.

Тема:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
        parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

<!-- ActionBar styles -->
<style name="MyActionBar"
    parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:icon">@drawable/logo</item>
    <item name="android:background">#F7430C</item>
</style>

Activity setting background:

public class MainActivity extends ActionBarActivity {

private ActionBar bar;

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

    }
}

Все, что мне нужно, это панель действий с логотипом и фоновым цветом #F7430C.


person sqlbuddy    schedule 23.02.2015    source источник
comment
проверил, не работает   -  person sqlbuddy    schedule 23.02.2015
comment
Цвет бг не меняется?   -  person Apurva    schedule 23.02.2015
comment
да, но значок не показывался   -  person sqlbuddy    schedule 23.02.2015
comment
вы уверены, что пишете getActionBar().setIcon(R.drawable.ic_launcher); в методе onCreate()? и что такое minSdkVersion вашего приложения?   -  person Apurva    schedule 23.02.2015
comment
Вы используете appcompat 21?   -  person Gabriele Mariotti    schedule 23.02.2015
comment
stackoverflow.com/questions/27768109/   -  person Gabriele Mariotti    schedule 24.02.2015


Ответы (2)


Попробуйте это и дайте мне знать, если это сработает.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="android:actionBarStyle">@style/FooBar</item>
        <item name="actionBarStyle">@style/FooBar</item>
    </style>

    <!-- Base application theme. -->
    <style name="FooBar"
        parent="Widget.AppCompat.Light.ActionBar">
        <item name="android:icon">@drawable/logo</item>
        <item name="icon">@drawable/logo</item>
        <item name="android:background">#F7430C</item>
        <item name="background">#F7430C</item>

    </style>

</resources>

ИЗМЕНИТЬ

Приведенное выше решение будет работать только в том случае, если в вашей деятельности actionBar.setDisplayShowHomeEnabled() установлено значение true.

person Varundroid    schedule 23.02.2015
comment
с этим реализованным и закомментированным setbackground в действии я получаю белую пустую панель действий - person sqlbuddy; 23.02.2015
comment
Я только что заметил, что родитель стиля FooBar был неправильным. Я обновил свой ответ, теперь попробуйте и дайте мне знать, если у вас все еще есть та же проблема. - person Varundroid; 23.02.2015
comment
Кроме того, ваш родитель AppTheme также мог быть проблемой. Я обновил обоих родителей. Судя по всему, теперь должно работать. - person Varundroid; 23.02.2015
comment
Я только что обновил три блока кода, проблема не устранена. У меня есть черная полоса, белые буквы шрифта и не отображается ресурс для рисования. Я могу установить цвет фона только с помощью bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(#F7430C))); в деятельности - person sqlbuddy; 23.02.2015
comment
Я обновил свой ответ, сначала попробуйте это, а если это не сработает, прочитайте это - заголовок stackoverflow.com/questions/26642378/. Это может быть полезно для вас. - person Varundroid; 23.02.2015
comment
Этот пост помог, мне не хватало actionBar.setDisplayShowHomeEnabled(true); - person sqlbuddy; 23.02.2015

Вот как я это исправил:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:actionBarStyle">@style/FooBar</item>
    <item name="actionBarStyle">@style/FooBar</item>
</style>

<!-- Base application theme. -->
<style name="FooBar"
    parent="Widget.AppCompat.Light.ActionBar">
    <item name="android:icon">@drawable/logo</item>
    <item name="icon">@drawable/logo</item>
    <item name="android:background">#F7430C</item>
    <item name="background">#F7430C</item>

</style>

После надувания бара в действии мне пришлось установить:

bar.setDisplayShowHomeEnabled(true);
person sqlbuddy    schedule 23.02.2015