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?
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?
Jawaban:
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);
}
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>
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));
}
}
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")));
}
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
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.
Lihat platforms/android-2.1/data/res/layout/screen.xml
SDK. 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);
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/
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>
)
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
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));