Trong ứng dụng Android của mình, tôi muốn thanh tiêu đề tiêu chuẩn / cơ bản thay đổi màu.
Để thay đổi màu chữ bạn có setTitleColor(int color)
, có cách nào để thay đổi màu nền của thanh không?
Trong ứng dụng Android của mình, tôi muốn thanh tiêu đề tiêu chuẩn / cơ bản thay đổi màu.
Để thay đổi màu chữ bạn có setTitleColor(int color)
, có cách nào để thay đổi màu nền của thanh không?
Câu trả lời:
Đây chủ đề sẽ giúp bạn bắt đầu với việc xây dựng thanh tiêu đề của riêng bạn trong một file xml và sử dụng nó trong các hoạt động của bạn
Biên tập
Đây là tóm tắt ngắn gọn về nội dung của liên kết trên - Đây chỉ là để thiết lập màu sắc của văn bản và nền của thanh tiêu đề - không thay đổi kích thước, không có nút, chỉ là mẫu đơn giản nhất
res / layout / mytitle.xml - Đây là dạng xem sẽ đại diện cho thanh tiêu đề
<?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 - Chúng tôi muốn giữ chủ đề android mặc định và chỉ cần thay đổi màu nền của nền tiêu đề. Vì vậy, chúng tôi tạo một chủ đề kế thừa chủ đề mặc định và đặt kiểu nền theo phong cách riêng của chúng tôi.
<?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 - Đây là nơi chúng tôi đặt chủ đề để sử dụng màu chúng tôi muốn cho nền tiêu đề
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / Colors.xml - Đặt ở đây màu bạn muốn
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
Trong AndroidMANIFEST.xml , hãy đặt thuộc tính chủ đề trong ứng dụng (cho toàn bộ ứng dụng) hoặc trong thẻ hoạt động (chỉ hoạt động này)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
Từ Hoạt động (được gọi là 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);
}
Cảm ơn vì lời giải thích rõ ràng này, tuy nhiên tôi muốn bổ sung thêm một chút cho câu trả lời của bạn bằng cách đặt một câu hỏi được liên kết (không thực sự muốn tạo một bài mới vì đây là cơ sở cho câu hỏi của tôi).
Tôi đang khai báo thanh tiêu đề của mình trong một Superclass mà từ đó, tất cả các hoạt động khác của tôi đều là trẻ em, chỉ phải thay đổi màu của thanh một lần. Tôi cũng muốn thêm một biểu tượng và thay đổi văn bản trong thanh. Tôi đã thực hiện một số thử nghiệm và quản lý để thay đổi một trong hai nhưng không phải cả hai cùng một lúc (sử dụng setFeatureDrawable và setTitle). Giải pháp lý tưởng tất nhiên sẽ là làm theo lời giải thích trong chuỗi được đưa ra trong liên kết, nhưng vì tôi đang khai báo trong lớp cha, tôi gặp sự cố do bố cục trong setContentView và R.id.myCustomBar, vì nếu tôi hãy nhớ kỹ tôi chỉ có thể gọi setContentView một lần ...
EDIT Đã tìm thấy câu trả lời của tôi:
Đối với những người, giống như tôi, thích làm việc với các lớp cha bởi vì điều này thật tuyệt khi có một menu có sẵn ở mọi nơi trong một ứng dụng, nó hoạt động tương tự ở đây.
Chỉ cần thêm cái này vào lớp cha của bạn:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.customtitlebar);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
customTitleText = (TextView) findViewById(R.id.customtitlebar);
(bạn phải khai báo textview là biến lớp được bảo vệ)
Và sức mạnh của điều này là ở mọi nơi trong ứng dụng của bạn (ví dụ: nếu tất cả các hoạt động của bạn là trẻ em của lớp này), bạn chỉ cần gọi
customTitleText.setText("Whatever you want in title");
và thanh tiêu đề của bạn sẽ được chỉnh sửa.
XML được liên kết trong trường hợp của tôi là (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>
Có một cách khác để thay đổi màu nền, tuy nhiên đây là một cách hack và có thể không thành công trên các phiên bản Android trong tương lai nếu phân cấp Chế độ xem của Cửa sổ và tiêu đề của nó bị thay đổi. Tuy nhiên, mã sẽ không bị lỗi, chỉ cần bỏ lỡ thiết lập màu mong muốn, trong trường hợp như vậy.
Trong Hoạt động của bạn, như onCreate, hãy làm:
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));
}
}
Mã này giúp thay đổi nền của thanh tiêu đề theo chương trình trong Android. Thay đổi màu thành bất kỳ màu nào bạn muốn.
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);
}
}
trên đoạn mã trên, bạn có thể thử, bạn có thể sử dụng tiêu đề thay vì thanh tiêu đề, điều này sẽ ảnh hưởng đến tất cả hoạt động trong ứng dụng của bạn
Tôi cho là không. Bạn có thể tạo hoạt động vô danh và tạo thanh tiêu đề của riêng mình trong bố cục hoạt động.
Kiểm tra cái này , Dòng 63 trở xuống:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
đặt chế độ xem tùy chỉnh thay vì chế độ xem tiêu đề mặc định.
Xem platforms/android-2.1/data/res/layout/screen.xml
qua SDK. Nó dường như xác định một tiêu đề ở đó. Bạn có thể thường xuyên kiểm tra các bố cục như thế này và mượn các
style="?android:attr/windowTitleStyle"
kiểu mà sau đó bạn có thể sử dụng và ghi đè trong TextView của riêng bạn.
Bạn thậm chí có thể chọn tiêu đề để điều chỉnh trực tiếp bằng cách thực hiện:
TextView title = (TextView)findViewById(android.R.id.title);
Hãy thử với mã sau
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);
}
}
cũng sử dụng liên kết này rất hữu ích của nó: http://nathanael.hevenet.com/android-dev-changed-the-title-bar-background/
Có một giải pháp thay thế dễ dàng hơn để thay đổi màu sắc của thanh tiêu đề, bằng cách sử dụng thư viện hỗ trợ appcompat v7 do Google cung cấp.
Xem liên kết này về cách thiết lập thư viện hỗ trợ này: https://developer.android.com/tools/support-library/setup.html
Khi bạn đã làm xong, chỉ cần thêm các dòng sau vào tệp res / values / styles.xml của bạn là đủ:
<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>
(giả sử rằng "titlebackgroundcolor" được xác định trong res / values / Colors.xml của bạn, ví dụ:
<color name="titlebackgroundcolor">#0000AA</color>
)
Mọi thứ dường như trở nên tốt hơn / dễ dàng hơn kể từ Android 5.0 (API cấp 21).
Tôi nghĩ những gì bạn đang tìm kiếm là một cái gì đó như thế này:
<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>
Xem tại đây để tham khảo:
https://developer.android.com/training/material/theme.html#ColorPalette
Dán mã này sau setContentView hoặc vào onCreate
nếu bạn có mã màu, hãy sử dụng cái này;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
nếu bạn muốn một mã cụ thể từ Thư viện màu, hãy sử dụng cái này;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));