ActionBar'da geri düğmesi nasıl özelleştirilir


188

Bunlardan gelen önerileri kullanarak eylem çubuğunun arka planını, logo resmini ve metin rengini özelleştirebildim:
Android: ActionBar "Ana Sayfa" Simgesini uygulama simgesinden başka bir şey olacak şekilde nasıl değiştirebilirim?
ActionBar metin rengi
ActionBar arka plan resmi

Özelleştirmek istediğim son parça geri düğmesi görüntüsü. Varsayılan olarak gri renktedir ve beyaz olmasını isterim. Rengi değiştirmek, çekilebilir bir belirtmek veya saydamlaştırmak (ve chevron'u özelleştirilmiş logo resmime eklemek) işe yarayacaktır. Bunu nasıl yapabilirim?


1
İşlem çubuğunda GERİ düğmesi yoktur. GERİ düğmesi sistem çubuğunda veya ekranda değil (ekran dışı GERİ düğmesine sahip cihazlar için).
CommonsWare

1
@CommonsWare, eylem çubuğundaki 'sol şivronun' ne denildiğinden emin değilim - ama bu geri düğmesi olarak bahsettiğim biri. Ben ileride android cihazlarda fiziksel geri düğmesinin değiştirilmesi bekleniyor.
Sunil Gowda

13
Hayır ve hayır. Bu "yukarı" göstergesidir (ok yönüne rağmen). setDisplayHomeAsUpEnabled()İle üzerinden etkinleştirirsiniz ActionBar. Özellikle edilir DEĞİL basitçe "geri" gidecektik. Bu, uygulama simgesine dokunduğunuzda önceki etkinliğe (sistem çubuğundaki GERİ düğmesinde olduğu gibi) geri dönmek yerine bir hiyerarşi "yukarı" gideceği anlamına gelir.
CommonsWare

2
"Peki, fiziksel bir geri düğmesi olmayan yeni cihazlarda, hepsinde 'yumuşak' bir geri düğmesi görüntüleniyor mu" - hepsinin sistem çubuğunda bir GERİ düğmesi olmalıdır.
CommonsWare

3
Sadece vakaların bir çok YUKARI düğmesi eklemek istiyor OLACAK basitçe geri dönün. "Önceden görüntülenen ekran aynı zamanda geçerli ekranın hiyerarşik ebeveyni ise, Geri tuşuna basmak Yukarı düğmesine basmakla aynı sonuca sahip olur - bu yaygın bir durumdur." Developer.android.com/design/patterns
Dori

Yanıtlar:


390

"Yukarı" ağaçlandırma göstergesi, homeAsUpIndicatortemanın özelliğinde belirtilen bir çekilebilir tarafından sağlanır . Kendi özel sürümünüzle geçersiz kılmak şu şekilde olur:

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

3.0 sürümünden önce uygulamanızla destekliyorsanız, özel temanın bu sürümünü values-v11buna benzer şekilde eklediğinizden emin olun .


10
benim için de çalışır. Github'da AOSP'de olduğu gibi ActionBarStyle'ım olarak ayarlanan stilin içinde ilan ediyordum ama işe yaramadı - ana temaya geçmek hile yaptı! +1
Dori

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>benim için çalışmadı ama <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>çalıştı. Android sürümü şey sanırım
Michał K

6
Bunun için üst ve alt dolguyu 0dp'ye ayarlamanın bir yolu var mı?
James McCracken

3
@JamesMcCracken Bunu yapabilmemin tek yolu özel bir düzen üzerinden oldu.
greg7gkb

4
Bu işi yapan var Navigation Drawermı? Sanırım ActionBarDrawerToggleyukarı göstergesini kendisinin biriyle değiştirir, bu yüzden stil üzerine ayarlamanın bir etkisi yoktur ...
Lucas Jota

89

Böylece android API seviye 18 ve üstü eklenmiş homeAsUpIndicator () işlevini kullanarak program aracılığıyla kolayca değiştirebilirsiniz.

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

Destek kitaplığı kullanıyorsanız

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


5
Bir çekmece kullanıyorsanız drawerToggle.setDrawerIndicatorEnabled(false);, göstergeyi değiştirmeden önce aramalısınız
Diş ipi

2
@Floss Teşekkür ederiz, setDrawerIndicatorEnabled (false / true); Ana ekran düğmesini gereksinimlerime göre tutarlı 'Geri' ve (Çekmeceyi Aç / Çekmeceyi Kapat) olarak ayarlamak için sorunumu çözdüm.
Eşref Alshahawy

1
@Floss drawerToggle.setDrawerIndicatorEnabled (yanlış); benim için çalışıyor :)
Bağlam

30

Soruyu kontrol ettim. İşte izlediğim adımlar. Kaynak kodu GitHub'da barındırılıyor: https://github.com/jiahaoliuliu/sherlockActionBarLab

V11 öncesi aygıtlar için gerçek stili geçersiz kılın.

Aşağıdaki kodu kopyalayıp varsayılan değerler klasörünün styles.xml dosyasına yapıştırın.

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

Üst öğenin herhangi bir Sherlock temasıyla değiştirilebileceğini unutmayın.

V11 + cihazları için gerçek stili geçersiz kılın.

Klasör değerlerinin bulunduğu klasörde, değerler-v11 adlı yeni bir klasör oluşturun. Android, API veya üstü cihazlar için bu klasörün içeriğini otomatik olarak arayacaktır.

Styles.xml adlı yeni bir dosya oluşturun ve aşağıdaki kodu dosyaya yapıştırın:

<?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>

Stil adının varsayılan değerler klasöründeki dosyayla aynı olması ve homeAsUpIndicator öğesi yerine android: homeAsUpIndicator olarak adlandırılması gerektiğini unutmayın.

Öğe sorunu, API 11 veya üstü cihazlarda Sherlock Action Bar'ın, Android ile birlikte gelen ve anahtar adının android: homeAsUpIndicator olan varsayılan Action Bar'ı kullanmasıdır. Ancak API 10 veya daha düşük sürümlere sahip cihazlar için Sherlock Action Bar, yukarı göstergesi olarak ana sayfaya basit "homeAsUpIndicator" adı verilen kendi ActionBar'ını kullanır.

Manifest'te yeni temayı kullanın

AndroidManifest dosyasındaki uygulama / etkinlik temasını değiştirin:

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

2
Zaten mevcut holo simgeleri arıyorsanız @ drawable / abc_ic_ab_back_holo_light veya @ drawable / abc_ic_ab_back_holo_dark'ı deneyebilirsiniz.
Mason Lee

25

Gezinme simgesinin değiştirilmesi ActionBar ve Araç Çubuğu için farklılık gösterir.

ActionBar geçersiz kılma homeAsUpIndicatorözniteliği için:

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

Araç Çubuğu geçersiz kılma navigationIconözelliği için:

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>

19

Aşağıdaki kodu yaptım onCreate()ve benimle çalıştım

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

5

Araç Çubuğu kullanıyorsanız, bu çözümlere ihtiyacınız yoktur. Yalnızca araç çubuğunun temasını değiştirmeniz gerekir

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

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

Bir dark.actionBar kullanıyorsanız, açık işlem çubuğu teması kullanıyorsanız geri düğmeniz beyaz olacak, siyah olacaktır.


Kodunuz benim için çalışıyor, ancak bu göstergenin rengini değiştirebilir miyiz?
Steve Luck

2
colorControlNormal ve android: textColorSeincil değerler bundan sorumludur, ancak bu değerlerin başka neleri de değiştirdiğinden emin değilim. Bu değerleri araç çubukları temanızda tanımlayarak kendinizi deneyebilirsiniz.
Oğuz Özcan

NavigationIcon'u arka planda beyaz olarak görüntülemek için "app: theme =" @ style / ThemeOverlay.AppCompat.Light "" kullanıyorum, ancak varsayılan gri simgeyi görüntülüyor, mavi olarak değiştirmeniz gerekiyor. "colorControlNormal ve android: textColorSeincil" çalışmıyor.
Steve Luck

2
Üst öğe olarak "ThemeOverlay.AppCompat.Light" içeren özel bir tema kullanın. Bu işe yarayabilir.
Oğuz Özcan

1
Ben nav =, name = "colorControlNormal" değil name = "android: colorControlNormal" kullanarak değiştirmek için çözüm buldum. Ama belki diğer çekmeceye geçmek istiyorum.
Steve Luck

2

bunu tepsi:

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

içeride onCreate();


Çalışıyor ama daha erken geri düğmesi nasıl geri alınır
Nadimuddin

0

Proje menifest.xml dosyasında back.png resmini kullandım. projede iyi çalışıyor.

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

0

Gradle Resource dizin simgesinde Simge özledim yönetme nedeniyle, Eylem çubuğu Ana Sayfa düğme simgesi yön aynı sorunu vardı

Arapça Gradle kaynak dizininde olduğu gibi simge x-hdpi'ye ve İngilizce Gradle kaynağına xx-hdpi gibi farklı yoğunluk klasörüne koyduğunuz aynı simge adını koydunuz, böylece APK'da farklı dizinlerde iki aynı simge adı olacak, böylece cihazınız yoğunluğa bağlı simge RTL veya LTR olabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.