Başlık arka plan rengini ayarlayın


106

Android uygulamamda standart / temel başlık çubuğunun rengini değiştirmesini istiyorum.

Sahip olduğunuz metin rengini setTitleColor(int color)değiştirmek için çubuğun arka plan rengini değiştirmenin bir yolu var mı?


Arka plan rengini başlık çubuğuna değiştirmek için özel başlık kullanmaya gerek olmadığını düşünüyorum. bu
gönderiyi

Modası geçmiş kabul edilmiş cevap yerine Edwinfad'in cevabına bakardım.
zgc7009

Yanıtlar:


186

Bu iş parçacığı , bir xml dosyasında kendi başlık çubuğunuzu oluşturmaya ve bunu etkinliklerinizde kullanmaya başlamanızı sağlayacaktır.

Düzenle

İşte yukarıdaki bağlantının içeriğinin kısa bir özeti - Bu sadece metnin rengini ve başlık çubuğunun arka planını ayarlamak içindir - yeniden boyutlandırma yok, düğme yok, sadece en basit örnek

res / layout / mytitle.xml - Bu, başlık çubuğunu temsil edecek görünümdür

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/titletextcolor"
   />

res / values ​​/ themes.xml - Varsayılan android temasını korumak istiyoruz ve sadece başlık arka planının arka plan rengini değiştirmemiz gerekiyor. Bu nedenle, varsayılan temayı miras alan ve arka plan stilini kendi stilimize ayarlayan bir tema oluşturuyoruz.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res / values ​​/ styles.xml - Temayı başlık arka planı için istediğimiz rengi kullanacak şekilde ayarladığımız yer burasıdır.

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res / values ​​/ colors.xml - İstediğiniz rengi buradan ayarlayın

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

In AndroidManifest.xml , (sadece bu aktivite) etiketleri (tüm uygulama için) uygulamasında veya aktivitede ya tema niteliğini set

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

Etkinlikten (CustomTitleBar olarak adlandırılır):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}

9
Çoğu zaman sadece bir bağlantı sağlamak çok ucuzdur ve stackoverflow'da pek sevilmeyen bir cevaptır. Bu sayfaya bağlantıdan biraz bilgi almaya çalışın. Toplulukta gittikçe daha fazla bilgi edineceksiniz ve bağlantı kesilse bile cevap vermeniz, diğer insanları yöne yönlendirebilecek bazı arama terimleri sağlar.
Janusz

7
@Janusz: Tamamen haklısın - Bu yüzden gönderiyi en basit örnekle güncelledim, böylece insanlar yukarıdaki bağlantıdaki konuyu okumak yerine
başlayabilir

3
Android stilinin üzerine yazdıktan sonra, yalnızca arka plan rengini değiştirmek istiyorsanız, koddan özel başlığı eklemenize gerek yoktur
Janusz

1
Janusz'un dediği gibi, yalnızca kullanılan stili geçersiz kılmak istiyorsanız (yeni Görünümler eklemiyorsanız) özel bir Görünüme sahip olmanız gerekmez. Bu durumda, FEATURE_CUSTOM_STYLE talep etmenize de gerek yoktur. Son olarak, tüm etkinliklerinize aynı anda uygulamak için stili ve uygulama düzeyinde tanımlayabilirsiniz. Bu arada, kod için teşekkürler.
Eric Kok

2
bu, başlığın arka plan rengini değiştirmiyor, sadece metin rengi değişiyor. Başlık çubuğunun <color name = "titlebackgroundcolor"> # 3232CD </color> rengini değiştiriyor olsam bile. Yanlış bir şey mi yapıyorum?
Shaista Naaz

18

Bu net açıklama için teşekkürler, ancak bağlantılı bir soru sorarak cevabınıza biraz daha eklemek istiyorum (gerçekten yeni bir gönderi yapmak istemiyorum çünkü bu benim sorumun temelini oluşturuyor).

Başlık çubuğumu, diğer tüm aktivitelerimin çocuk olduğu bir Süper Sınıfta, çubuğun rengini yalnızca bir kez değiştirmek zorunda kalacağını ilan ediyorum. Ayrıca bir simge eklemek ve çubuktaki metni değiştirmek istiyorum. Bazı testler yaptım ve birini ya da diğerini değiştirmeyi başardım, ancak ikisini aynı anda değiştirmedim (setFeatureDrawable ve setTitle kullanarak). İdeal çözüm elbette bağlantıda verilen iş parçacığındaki açıklamayı takip etmektir, ancak bir üst sınıfta beyan ettiğim gibi, setContentView ve R.id.myCustomBar'daki düzen nedeniyle bir sorunum var çünkü eğer iyi hatırla, setContentView'ı sadece bir kez çağırabilirim

DÜZENLE Cevabımı buldum:

Benim gibi süper sınıflarla çalışmayı sevenler için, bir uygulamada her yerde mevcut olan bir menüye ulaşmak için harika, burada da aynı şekilde çalışıyor.

Bunu süper sınıfınıza eklemeniz yeterli:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(metin görünümünü korumalı sınıf değişkeni olarak bildirmeniz gerekir)

Ve sonra bunun gücü, uygulamanızın her yerinde (örneğin tüm faaliyetleriniz bu sınıfın çocuklarıysa), sadece aramanız gerekmesidir.

customTitleText.setText("Whatever you want in title");

ve başlık çubuğunuz düzenlenecek.

Benim durumumda ilişkilendirilen XML (R.layout.customtitlebar):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
    android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
    android:layout_width="wrap_content" android:layout_height="fill_parent"
    android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
    android:background="@color/background" android:padding="3px" />
</LinearLayout>

Neden oylanıyorum? kodumun nesi var? benim için mükemmel çalışıyor ...
Sephy

1
başlangıç ​​seviyesindeyken yukarıdaki iyi açıklamaları olan güzel bir kod parçası olduğunu düşünüyorum. +1 sizin için !!!
RK

@Sephy, başlık çubuğu için farklı sınıflar oluşturmam gerekiyor mu, o zaman sadece kullanabilir miyim?
Vikas Gupta


11

Arka plan rengini değiştirmenin başka bir yolu vardır, ancak bu bir kesmedir ve Pencerenin Görünüm hiyerarşisi ve başlığı değiştirilirse Android'in gelecekteki sürümlerinde başarısız olabilir. Ancak böyle bir durumda kod çökmez, sadece istenen rengi ayarlamayı kaçırırsınız.

Etkinliğinizde onCreate gibi şunları yapın:

View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}

çok iyi ve çok basit. Ama size bir şey sormak istiyorum, bu bunu koddan yapıyor, bu yüzden biraz gecikmeli. Böyle bir durumdan kaçınmak için xml'deki her şeyi ve koddaki hiçbir şeyi yazmam gerekecek. lütfen bana bu konuda rehberlik edebilir misin?
Shaista Naaz

Yukarıdaki seçili cevapta çözüme sahip olduğunuzu düşünüyorum. Aktivite için özel bir tema tanımlamanız ve android: windowTitleBackgroundStyle'ı istediğiniz renge ayarlamanız gerekir.
mikeplate

7

Bu kod, Android'de programlı olarak başlık çubuğunun arka planını değiştirmeye yardımcı olur. Rengi istediğiniz herhangi bir renge değiştirin.

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

Bu, API 11'de (3.0 Honeycomb) tanıtıldı ve bu noktada, bunu geçerli bir seçenek olarak kabul etmek için kesinlikle yeterince modası geçmiş.
zgc7009

Ama hala tüm son uygulamalarımda targetSdkVersion = "23" ile kullanımdan kaldırılmış herhangi bir bilgi almadan kullanıyorum.
Edwinfad

Kesinlikle, bunu kullanmak% 100 iyidir. Hiçbir şeyle değiştirilmedi, ancak API 11'den önce (çok az kişinin yapacağı) kullanmaktan kaçınılmalıdır, en azından bir uyumluluk kitaplığı olmadan.
zgc7009

Kayıt edilmiş. @ zgc7009
Edwinfad

1
AppCompatActivity kullanıyorsanız bunun yerine getSupportActionBar () kullanın
mondlos

6
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

Yukarıdaki kodda deneyebilirsiniz başlık çubuğu yerine başlık kullanabilirsiniz , bu uygulamanızdaki tüm aktiviteleri etkileyecektir


2

Sanırım hayır. Başlıksız aktivite oluşturabilir ve aktivite düzeninde kendi başlık çubuğunuzu oluşturabilirsiniz.

Kontrol bu , Hat 63 ve önceki sürümleri:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

varsayılan başlık görünümü yerine özel görünüm ayarlar.


Özel / kendi başlık çubuğunu nasıl / nerede oluşturabilirim?
Thizzer

2

platforms/android-2.1/data/res/layout/screen.xmlSDK'ya bir göz atın . Orada bir başlık tanımlıyor gibi görünüyor. Bunun gibi düzenleri sık sık inceleyebilir ve style="?android:attr/windowTitleStyle" daha sonra kendi Metin Görünümlerinizde kullanabileceğiniz ve geçersiz kılabileceğiniz stilleri ödünç alabilirsiniz.

Aşağıdakileri yaparak doğrudan ince ayar yapmak için başlığı bile seçebilirsiniz:

TextView title = (TextView)findViewById(android.R.id.title);

1
Yukarıda iyi cevaplar var ama bunun için özel bir düzen oluşturmak zorunda kalmadan başlık çubuğunu renklendirmek mümkün mü?
Eno

2

Aşağıdaki kodu deneyin

View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

ayrıca bu bağlantıyı çok yararlı kullanın: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/


Bu hala Lollipop ile çalışıyor mu? titleView benim için boş dönüyor gibi görünüyor.
WORMSS

1

Google tarafından sağlanan v7 appcompat destek kitaplığını kullanarak başlık çubuğunun rengini değiştirmenin daha kolay bir alternatifi var.

Bu destek kitaplığının nasıl kurulacağına ilişkin şu bağlantıya bakın: https://developer.android.com/tools/support-library/setup.html

Bunu yaptıktan sonra, aşağıdaki satırları res / values ​​/ styles.xml dosyanıza eklemeniz yeterlidir:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/titlebackgroundcolor</item>
</style>

("titlebackgroundcolor" un res / values ​​/ colours.xml dosyanızda tanımlandığı varsayılarak, örneğin:

<color name="titlebackgroundcolor">#0000AA</color>

)


Yalnızca Android 5'i hedeflediğinizde , daha da basit bir alternatif vardır, bkz. [ Developer.android.com/training/material/… .
stefan.m


1

Bunu "res" -> "değerler" -> "colours.xml" içindeki stil renk değerlerini değiştirerek yaptım. görüntü açıklamasını buraya girin

Bu benim için uygun olan tüm proje için renkleri değiştirecek.

görüntü açıklamasını buraya girin


0

onu kullanabilirsin.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

Bu kodu setContentView'dan sonra veya onCreate'e yapıştırın

bir renk kodunuz varsa bunu kullanın;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));

Renk kitaplığından belirli bir kod istiyorsanız bunu kullanın;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
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.