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ı?
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ı?
Yanıtlar:
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);
}
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>
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));
}
}
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")));
}
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
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.
platforms/android-2.1/data/res/layout/screen.xml
SDK'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);
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/
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>
)
Android 5.0'dan (API seviyesi 21) bu yana işler daha iyi / daha kolay hale geldi.
Sanırım aradığınız şey şuna benzer:
<style name="AppTheme" parent="AppBaseTheme">
<!-- Top-top notification/status bar color: -->
<!--<item name="colorPrimaryDark">#000000</item>-->
<!-- App bar color: -->
<item name="colorPrimary">#0000FF</item>
</style>
Referans için buraya bakın:
https://developer.android.com/training/material/theme.html#ColorPalette
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));