Setel warna latar belakang judul

106

Dalam aplikasi android saya, saya ingin bilah judul standar / dasar berubah warna.

Untuk mengubah warna teks yang Anda miliki setTitleColor(int color), apakah ada cara untuk mengubah warna latar belakang bilah?

Thizzer
sumber
Saya rasa tidak perlu menggunakan judul khusus untuk mengubah warna latar belakang menjadi bilah judul. periksa posting ini
Deepthi Jabili
Saya akan melihat jawaban Edwinfad daripada jawaban lama yang diterima.
zgc7009

Jawaban:

186

Utas ini akan membantu Anda memulai dengan membuat bilah judul Anda sendiri dalam file xml dan menggunakannya dalam aktivitas Anda

Edit

Berikut adalah ringkasan singkat dari konten tautan di atas - Ini hanya untuk mengatur warna teks dan latar belakang bilah judul - tanpa pengubahan ukuran, tanpa tombol, hanya sampel paling sederhana

res / layout / mytitle.xml - Ini adalah tampilan yang akan mewakili bilah judul

<?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 - Kami ingin mempertahankan tema android default dan hanya perlu mengubah warna latar belakang latar belakang judul. Jadi kami membuat tema yang mewarisi tema default dan menyetel gaya latar belakang ke gaya kami sendiri.

<?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 - Di sinilah kita mengatur tema untuk menggunakan warna yang kita inginkan untuk latar belakang judul

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

res / values ​​/ colors.xml - Setel di sini warna yang Anda inginkan

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

Di AndroidMANIFEST.xml , setel atribut tema baik dalam aplikasi (untuk seluruh aplikasi) atau dalam aktivitas (hanya aktivitas ini) tag

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

Dari Aktivitas (disebut CustomTitleBar):

@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);

}
ccheneson.dll
sumber
9
Sebagian besar waktu hanya menyediakan tautan adalah jawaban yang sangat murah, dan di stackoverflow tidak terlalu disukai. Cobalah untuk mendapatkan sedikit pengetahuan dari link ke halaman ini. Anda akan mendapatkan lebih banyak pengetahuan di komunitas, dan meskipun link turun jawaban Anda tetap memberikan beberapa istilah pencarian yang dapat mengarahkan orang lain ke arah tersebut.
Janusz
7
@ Janusz: Anda benar sekali - Jadi saya memperbarui kiriman dengan contoh yang paling sederhana sehingga orang dapat memulai daripada membaca utas di tautan di atas
ccheneson
3
Setelah menimpa gaya android Anda tidak perlu menambahkan judul khusus dari kode jika Anda hanya ingin mengubah warna latar belakang
Janusz
1
Seperti yang dikatakan Janusz, Anda tidak perlu memiliki Tampilan kustom jika Anda hanya ingin mengganti gaya yang digunakan (tidak menambahkan Tampilan baru). Dalam hal ini Anda juga tidak perlu meminta FEATURE_CUSTOM_STYLE. Terakhir, Anda dapat menentukan gaya tingkat aplikasi untuk diterapkan ke semua aktivitas Anda sekaligus. Terima kasih untuk kodenya.
Eric Kok
2
ini tidak mengubah warna latar belakang judul hanya warna teks yang berubah. bahkan jika saya mengubah warna bilah judul <color name = "titlebackgroundcolor"> # 3232CD </color>. Apakah saya melakukan sesuatu yang salah?
Shaista Naaz
18

Terima kasih atas penjelasan yang jelas ini, namun saya ingin menambahkan sedikit lebih banyak pada jawaban Anda dengan mengajukan pertanyaan yang ditautkan (tidak benar-benar ingin membuat posting baru karena ini adalah basement dari pertanyaan saya).

Saya mendeklarasikan gelar saya di Superclass yang, semua aktivitas saya lainnya adalah anak-anak, harus mengubah warna bilah hanya sekali. Saya juga ingin menambahkan ikon dan mengubah teks di bilah. Saya telah melakukan beberapa pengujian, dan berhasil mengubah salah satu atau yang lain tetapi tidak keduanya pada saat yang sama (menggunakan setFeatureDrawable dan setTitle). Solusi yang ideal tentu saja mengikuti penjelasan di utas yang diberikan di tautan, tetapi ketika saya mendeklarasikan di superclass, saya memiliki masalah karena tata letak di setContentView dan R.id.myCustomBar, karena jika saya ingat baik-baik saya bisa memanggil setContentView hanya sekali ...

EDIT Menemukan jawaban saya:

Bagi mereka yang, seperti saya, suka bekerja dengan superclass karena bagus untuk mendapatkan menu yang tersedia di mana saja dalam aplikasi, cara kerjanya sama di sini.

Tambahkan saja ini ke superclass Anda:

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

(Anda harus mendeklarasikan textview sebagai variabel kelas yang dilindungi)

Dan kekuatannya adalah, di mana pun di aplikasi Anda (jika misalnya semua aktivitas Anda adalah anak-anak di kelas ini), Anda hanya perlu menelepon

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

dan batang judul Anda akan diedit.

XML yang terkait dalam kasus saya adalah (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>
Sephy
sumber
Mengapa saya ditolak? ada apa dengan kode saya? itu bekerja dengan sempurna untuk saya ...
Sephy
1
menjadi seorang pemula saya merasa bahwa di atas adalah potongan kode yang bagus dengan penjelasan yang baik. 1 untukmu !!!
RK
@Sephy apakah saya harus membuat kelas yang berbeda untuk bilah judul, lalu hanya saya yang dapat menggunakannya?
Vikas Gupta
tidak bekerja di sini stackoverflow.com/questions/31157222/…
Aditya
11

Ada cara lain untuk mengubah warna latar belakang, namun ini adalah retasan dan mungkin gagal pada versi Android mendatang jika hierarki Tampilan Jendela dan judulnya diubah. Namun, kodenya tidak akan macet, hanya melewatkan pengaturan warna yang diinginkan, dalam kasus seperti itu.

Dalam Aktivitas Anda, seperti onCreate, lakukan:

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));
  }
}
mikeplate
sumber
sangat bagus dan sederhana juga. Tetapi saya ingin menanyakan satu hal kepada Anda bahwa yang satu ini melakukannya dari kode sehingga sedikit tertunda. Untuk menghindari situasi seperti itu, saya harus menulis semuanya di xml dan tidak ada apa pun di kode. jadi bisakah Anda membimbing saya dalam hal itu?
Shaista Naaz
Saya pikir Anda memiliki solusi dalam jawaban yang dipilih di atas. Anda perlu mendefinisikan tema khusus untuk aktivitas dan menyetel android: windowTitleBackgroundStyle ke warna yang Anda inginkan.
mikeplate
7

Kode ini membantu mengubah latar belakang bilah judul secara terprogram di Android. Ubah warna menjadi warna yang Anda inginkan.

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

}
Edwinfad
sumber
Ini diperkenalkan di API 11 (3.0 Honeycomb) yang tentunya cukup usang saat ini untuk menganggap ini sebagai opsi yang valid.
zgc7009
Tapi saya masih menggunakannya di semua aplikasi terbaru saya dengan targetSdkVersion = "23" tanpa mendapatkan info yang tidak berlaku lagi.
Edwinfad
Tentu saja, 100% baik-baik saja untuk menggunakan ini. Ini belum diganti dengan apa pun, tetapi menggunakannya sebelum API 11 (yang akan dilakukan oleh sedikit orang) harus dihindari, setidaknya tanpa pustaka kompatibilitas.
zgc7009
Dicatat. @ zgc7009
Edwinfad
1
Gunakan getSupportActionBar () sebagai gantinya jika Anda menggunakan AppCompatActivity
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);
      }
    }

pada kode di atas Anda dapat mencoba Anda dapat menggunakan judul bukan titlebar ini akan mempengaruhi semua aktivitas di aplikasi Anda

Pratishtha Goriya
sumber
2

Saya kira tidak. Anda dapat membuat aktivitas tanpa judul dan membuat bilah judul Anda sendiri dalam tata letak aktivitas.

Periksa ini , Baris 63 dan di bawah:

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

menyetel tampilan khusus, bukan tampilan judul default.

skyman
sumber
Bagaimana / di mana saya bisa membuat bilah judul khusus / sendiri?
Thizzer
2

Lihat platforms/android-2.1/data/res/layout/screen.xmlSDK. Tampaknya menentukan judul di sana. Anda dapat sering memeriksa tata letak seperti ini dan meminjam style="?android:attr/windowTitleStyle" gaya yang kemudian dapat Anda gunakan dan timpa dalam TextView Anda sendiri.

Anda bahkan dapat memilih judul untuk penyesuaian langsung dengan melakukan:

TextView title = (TextView)findViewById(android.R.id.title);
Steve Pomeroy
sumber
1
Jawaban bagus di atas tetapi apakah mungkin untuk hanya mewarnai bilah judul tanpa harus membuat tata letak khusus untuk itu?
Eno
2

Coba dengan kode berikut

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);
      }
    }

juga menggunakan tautan ini yang sangat berguna: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/

Pratik Butani
sumber
Apakah ini masih berfungsi dengan Lollipop? titleView tampaknya mengembalikan null untuk saya.
WORMSS
1

Ada alternatif yang lebih mudah untuk mengubah warna bilah judul, dengan menggunakan pustaka dukungan v7 appcompat yang disediakan oleh Google.

Lihat tautan ini tentang cara menyiapkan pustaka dukungan ini: https://developer.android.com/tools/support-library/setup.html

Setelah Anda selesai melakukannya, cukup menambahkan baris berikut ke file res / values ​​/ styles.xml Anda:

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

(dengan asumsi bahwa "titlebackgroundcolor" ditentukan dalam res / values ​​/ colors.xml Anda, misalnya:

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

)

Stefan.m
sumber
Jika Anda hanya menargetkan Android 5, maka ada alternatif yang lebih sederhana lagi, lihat [ developer.android.com/training/material/… .
Stefan.m
1

Segalanya tampak menjadi lebih baik / mudah sejak Android 5.0 (API level 21).

Saya pikir yang Anda cari adalah seperti ini:

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

Lihat di sini untuk referensi:

https://developer.android.com/training/material/theme.html#ColorPalette

Loisaida Sam Sandberg
sumber
1

Saya telah melakukan ini dengan mengubah nilai warna gaya di "res" -> "values" -> "colors.xml" masukkan deskripsi gambar di sini

Ini akan mengubah warna untuk keseluruhan proyek yang tidak masalah bagi saya.

masukkan deskripsi gambar di sini

Brlja
sumber
0

kamu bisa menggunakannya.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
pavel
sumber
0

Tempel kode ini setelah setContentView atau ke onCreate

jika Anda memiliki kode warna, gunakan ini;

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

jika Anda menginginkan kode tertentu dari perpustakaan Warna gunakan ini;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
Abdullah alkış
sumber