ในแอปพลิเคชัน Android ของฉันฉันต้องการให้แถบหัวเรื่องมาตรฐาน / พื้นฐานเปลี่ยนสี
หากต้องการเปลี่ยนสีข้อความที่คุณมีsetTitleColor(int color)
มีวิธีเปลี่ยนสีพื้นหลังของแถบหรือไม่?
ในแอปพลิเคชัน Android ของฉันฉันต้องการให้แถบหัวเรื่องมาตรฐาน / พื้นฐานเปลี่ยนสี
หากต้องการเปลี่ยนสีข้อความที่คุณมีsetTitleColor(int color)
มีวิธีเปลี่ยนสีพื้นหลังของแถบหรือไม่?
คำตอบ:
เธรดนี้จะช่วยให้คุณเริ่มต้นด้วยการสร้างแถบหัวเรื่องของคุณเองในไฟล์ xml และใช้ในกิจกรรมของคุณ
แก้ไข
นี่คือข้อมูลสรุปสั้น ๆ ของเนื้อหาของลิงค์ด้านบน - นี่เป็นเพียงการกำหนดสีของข้อความและพื้นหลังของแถบหัวเรื่อง - ไม่มีการปรับขนาดไม่มีปุ่มเป็นเพียงตัวอย่างที่ง่ายที่สุด
res / layout / mytitle.xml - นี่คือมุมมองที่จะแสดงแถบหัวเรื่อง
<?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 - เราต้องการคงธีม Android เริ่มต้นไว้และเพียงแค่ต้องเปลี่ยนสีพื้นหลังของพื้นหลังชื่อเรื่อง ดังนั้นเราจึงสร้างธีมที่สืบทอดธีมเริ่มต้นและตั้งค่ารูปแบบพื้นหลังเป็นสไตล์ของเราเอง
<?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 - นี่คือที่ที่เราตั้งค่าธีมเพื่อใช้สีที่เราต้องการสำหรับพื้นหลังหัวเรื่อง
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / colors.xml - ตั้งค่าสีที่คุณต้องการที่นี่
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
ในAndroidMANIFEST.xmlให้ตั้งค่าแอตทริบิวต์ธีมในแอปพลิเคชัน (สำหรับแอปพลิเคชันทั้งหมด) หรือในแท็กกิจกรรม (เฉพาะกิจกรรมนี้)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
จากกิจกรรม (เรียกว่า 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);
}
ขอบคุณสำหรับคำอธิบายที่ชัดเจนนี้อย่างไรก็ตามฉันต้องการเพิ่มอีกเล็กน้อยสำหรับคำตอบของคุณโดยการถามคำถามที่เชื่อมโยง (ไม่ต้องการโพสต์ใหม่เนื่องจากคำถามนี้เป็นชั้นใต้ดินของคำถามของฉัน)
ฉันกำลังประกาศแถบหัวเรื่องของฉันใน Superclass ซึ่งกิจกรรมอื่น ๆ ทั้งหมดของฉันคือเด็ก ๆ ที่จะต้องเปลี่ยนสีของแถบเพียงครั้งเดียว ฉันต้องการเพิ่มไอคอนและเปลี่ยนข้อความในแถบด้วย ฉันได้ทำการทดสอบบางอย่างแล้วและสามารถเปลี่ยนแปลงอย่างใดอย่างหนึ่ง แต่ไม่ใช่ทั้งสองอย่างในเวลาเดียวกัน (โดยใช้ setFeatureDrawable และ setTitle) ทางออกที่ดีที่สุดคือต้องทำตามคำอธิบายในเธรดที่ให้ไว้ในลิงก์ แต่เมื่อฉันประกาศในซูเปอร์คลาสฉันมีปัญหาเนื่องจากเค้าโครงใน setContentView และ R.id.myCustomBar เพราะถ้าฉัน จำไว้ให้ดีฉันสามารถเรียก setContentView ได้เพียงครั้งเดียว ...
แก้ไข พบคำตอบของฉัน:
สำหรับผู้ที่เช่นฉันชอบทำงานกับคลาสระดับสูงเพราะมันยอดเยี่ยมสำหรับการรับเมนูที่มีอยู่ทุกที่ในแอพมันก็ใช้งานได้เหมือนกันที่นี่
เพียงเพิ่มสิ่งนี้ลงในซูเปอร์คลาสของคุณ:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.customtitlebar);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
customTitleText = (TextView) findViewById(R.id.customtitlebar);
(คุณต้องประกาศ textview เป็นตัวแปรคลาสที่มีการป้องกัน)
จากนั้นพลังของสิ่งนี้ก็คือทุกที่ในแอปของคุณ (เช่นกิจกรรมทั้งหมดของคุณเป็นเด็ก ๆ ในชั้นเรียนนี้) คุณก็ต้องโทรหา
customTitleText.setText("Whatever you want in title");
และแถบหัวเรื่องของคุณจะได้รับการแก้ไข
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>
มีอีกวิธีหนึ่งในการเปลี่ยนสีพื้นหลังอย่างไรก็ตามเป็นการแฮ็กและอาจล้มเหลวใน Android เวอร์ชันอนาคตหากลำดับชั้นของหน้าต่างดูและชื่อของหน้าต่างมีการเปลี่ยนแปลง อย่างไรก็ตามรหัสจะไม่ผิดพลาดเพียงแค่พลาดการตั้งค่าสีที่ต้องการในกรณีนี้
ในกิจกรรมของคุณเช่น onCreate ให้ทำ:
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));
}
}
รหัสนี้ช่วยในการเปลี่ยนพื้นหลังของแถบหัวเรื่องโดยทางโปรแกรมใน Android เปลี่ยนสีเป็นสีที่คุณต้องการ
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);
}
}
ในโค้ดด้านบนคุณสามารถลองใช้ชื่อเรื่องแทนแถบหัวเรื่อง ซึ่งจะส่งผลต่อกิจกรรมทั้งหมดในแอปพลิเคชันของคุณ
ฉันคิดว่าไม่ คุณสามารถสร้างกิจกรรมที่ไม่มีชื่อเรื่องและสร้างแถบหัวเรื่องของคุณเองในรูปแบบกิจกรรม
ตรวจสอบสิ่งนี้บรรทัดที่ 63 และต่ำกว่า:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
ตั้งค่า customview แทนมุมมองหัวเรื่องเริ่มต้น
ดูplatforms/android-2.1/data/res/layout/screen.xml
SDK ดูเหมือนว่าจะกำหนดชื่อเรื่องไว้ที่นั่น คุณสามารถตรวจสอบเค้าโครงเช่นนี้ได้บ่อยครั้งและยืม
style="?android:attr/windowTitleStyle"
สไตล์ที่คุณสามารถใช้และแทนที่ใน TextView ของคุณเองได้
คุณอาจสามารถเลือกชื่อสำหรับการปรับแต่งโดยตรงได้โดยทำดังนี้
TextView title = (TextView)findViewById(android.R.id.title);
ลองใช้รหัสต่อไปนี้
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);
}
}
ยังใช้ลิงค์นี้มีประโยชน์มาก: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
มีทางเลือกอื่นที่ง่ายกว่าในการเปลี่ยนสีของแถบชื่อเรื่องโดยใช้ไลบรารีการสนับสนุน v7 appcompat ที่ Google จัดเตรียมไว้ให้
ดูลิงค์วิธีการตั้งค่าไลบรารีการสนับสนุนนี้: https://developer.android.com/tools/support-library/setup.html
เมื่อคุณทำเสร็จแล้วก็เพียงพอที่จะเพิ่มบรรทัดต่อไปนี้ในไฟล์ res / values / styles.xml ของคุณ:
<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" ใน res / values / colors.xml ของคุณเช่น:
<color name="titlebackgroundcolor">#0000AA</color>
)
สิ่งต่างๆดูเหมือนจะดีขึ้น / ง่ายขึ้นตั้งแต่ Android 5.0 (API ระดับ 21)
ฉันคิดว่าสิ่งที่คุณกำลังมองหามีดังนี้:
<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>
ดูที่นี่สำหรับการอ้างอิง:
https://developer.android.com/training/material/theme.html#ColorPalette
คุณสามารถใช้งานได้
toolbar.setTitleTextColor(getResources().getColor(R.color.white));
วางรหัสนี้หลัง setContentView หรือใน onCreate
หากคุณมีรหัสสีให้ใช้สิ่งนี้
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
หากคุณต้องการรหัสเฉพาะจากไลบรารีสีให้ใช้สิ่งนี้
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));