android динамический - Как настроить кнопку «Назад» на ActionBar




toolbar example (8)

Я смог настроить фон панели действий, изображение логотипа и цвет текста, используя следующие предложения:
Android: Как изменить значок «Главная» ActionBar, чтобы быть чем-то другим, кроме значка приложения?
Цвет текста ActionBar
Фоновый рисунок ActionBar

Последняя часть, которую я хочу настроить, - это обратное изображение кнопки. По умолчанию он серый, и я бы хотел, чтобы он был белым. Либо изменив цвет, указав рисование, либо просто сделав его прозрачным (и добавив шеврон к моему настроенному изображению логотипа), это сработает. Как мне это сделать?


Answers

Индикатор доступности «вверх» предоставляется путем вытягивания, указанного в homeAsUpIndicator темы. Чтобы переопределить его с помощью собственной пользовательской версии, это будет примерно так:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>

Если вы поддерживаете pre-3.0 своим приложением, убедитесь, что вы поместили эту версию настраиваемой темы в values-v11 или аналогичные.


Я проверил вопрос. Вот шаги, которые я следую. Исходный код размещен на GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

Переопределите фактический стиль для устройств pre-v11.

Скопируйте и вставьте следующий код в файл styles.xml папки значений по умолчанию.

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Обратите внимание, что родитель может быть изменен на любую тему Шерлока.

Переопределите фактический стиль для устройств v11 +.

В той же папке, где находятся значения папок, создайте новую папку с именем values-v11. Android автоматически будет искать содержимое этой папки для устройств с API или выше.

Создайте новый файл с именем styles.xml и вставьте следующий код в файл:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="android:homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Обратите внимание, что имя стиля должно совпадать с именем файла в папке значений по умолчанию, а вместо элемента homeAsUpIndicator он называется android: homeAsUpIndicator.

Проблема с деталями заключается в том, что для устройств с API 11 или выше в Шерлок-панели действий используется панель действий по умолчанию, которая поставляется с Android, имя ключа которой - android: homeAsUpIndicator. Но для устройств с API 10 или ниже Шерлок Action Bar использует свой собственный ActionBar, который индикатор дома как индикатор называется простым «homeAsUpIndicator».

Использовать новую тему в манифесте

Замените тему приложения / активности в файле AndroidManifest:

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

Я сделал ниже код onCreate() и работал со мной

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

Я использовал back.png изображение в файле menifest.xml проекта. он отлично работает в проекте.

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>

Если вы используете панель инструментов, вам не нужны эти решения. Вам нужно только изменить тему панели инструментов

app:theme="@style/ThemeOverlay.AppCompat.Light"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

Если вы используете dark.actionBar, ваша задняя кнопка будет белой, если вы используете легкую тему, она будет черной.


У меня была та же проблема, что и кнопка «Значок» на панели «Действие», из-за отсутствия управления значком «Значок в значке».

как в арабском каталоге ресурсов Gradle, вы помещаете значок в x-hdpi, а на английском языке Gradle - одно и то же имя значка, которое вы помещаете в другую папку плотности, например xx-hdpi, так что в APK в разных каталогах будут два одинаковых имени значков, поэтому ваше устройство будет выбирать значок, зависящий от плотности, может быть RTL или LTR


Таким образом, вы можете легко изменить его с помощью функции homeAsUpIndicator (), которая добавлена ​​в API-интерфейсе android API 18 и выше.

ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

Если вы используете библиотеку поддержки

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);


Проверьте этот образец кода « ColorMatrixSample.java »

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.graphics;

import com.example.android.apis.R;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

public class ColorMatrixSample extends GraphicsActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }

    private static class SampleView extends View {
        private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        private ColorMatrix mCM = new ColorMatrix();
        private Bitmap mBitmap;
        private float mSaturation;
        private float mAngle;

        public SampleView(Context context) {
            super(context);

            mBitmap = BitmapFactory.decodeResource(context.getResources(),
                                                   R.drawable.balloons);
        }

        private static void setTranslate(ColorMatrix cm, float dr, float dg,
                                         float db, float da) {
            cm.set(new float[] {
                   2, 0, 0, 0, dr,
                   0, 2, 0, 0, dg,
                   0, 0, 2, 0, db,
                   0, 0, 0, 1, da });
        }

        private static void setContrast(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   scale, 0, 0, 0, translate,
                   0, scale, 0, 0, translate,
                   0, 0, scale, 0, translate,
                   0, 0, 0, 1, 0 });
        }

        private static void setContrastTranslateOnly(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   1, 0, 0, 0, translate,
                   0, 1, 0, 0, translate,
                   0, 0, 1, 0, translate,
                   0, 0, 0, 1, 0 });
        }

        private static void setContrastScaleOnly(ColorMatrix cm, float contrast) {
            float scale = contrast + 1.f;
               float translate = (-.5f * scale + .5f) * 255.f;
            cm.set(new float[] {
                   scale, 0, 0, 0, 0,
                   0, scale, 0, 0, 0,
                   0, 0, scale, 0, 0,
                   0, 0, 0, 1, 0 });
        }

        @Override protected void onDraw(Canvas canvas) {
            Paint paint = mPaint;
            float x = 20;
            float y = 20;

            canvas.drawColor(Color.WHITE);

            paint.setColorFilter(null);
            canvas.drawBitmap(mBitmap, x, y, paint);

            ColorMatrix cm = new ColorMatrix();

            mAngle += 2;
            if (mAngle > 180) {
                mAngle = 0;
            }

            //convert our animated angle [-180...180] to a contrast value of [-1..1]
            float contrast = mAngle / 180.f;

            setContrast(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x + mBitmap.getWidth() + 10, y, paint);

            setContrastScaleOnly(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x, y + mBitmap.getHeight() + 10, paint);

            setContrastTranslateOnly(cm, contrast);
            paint.setColorFilter(new ColorMatrixColorFilter(cm));
            canvas.drawBitmap(mBitmap, x, y + 2*(mBitmap.getHeight() + 10),
                              paint);

            invalidate();
        }
    }
}

Соответствующий API доступен here :





android android-actionbar