สมมติว่าผมต้องการทุกTextViewกรณีใน app textColor="#ffffff"ของฉันจะมี มีวิธีตั้งค่าในที่เดียวแทนที่จะตั้งค่าสำหรับแต่ละรายการTextViewหรือไม่?
สมมติว่าผมต้องการทุกTextViewกรณีใน app textColor="#ffffff"ของฉันจะมี มีวิธีตั้งค่าในที่เดียวแทนที่จะตั้งค่าสำหรับแต่ละรายการTextViewหรือไม่?
คำตอบ:
จริงๆแล้วคุณสามารถตั้งค่าสไตล์เริ่มต้นสำหรับ TextViews (และวิดเจ็ตในตัวอื่น ๆ ส่วนใหญ่) โดยไม่จำเป็นต้องทำคลาส java แบบกำหนดเองหรือตั้งค่าสไตล์ทีละรายการ
หากคุณดูในthemes.xmlซอร์ส Android คุณจะเห็นแอตทริบิวต์มากมายสำหรับสไตล์เริ่มต้นสำหรับวิดเจ็ตต่างๆ คีย์คือแอตทริบิวต์textViewStyle(หรือeditTextStyleฯลฯ ) ที่คุณแทนที่ในธีมที่คุณกำหนดเอง คุณสามารถลบล้างสิ่งเหล่านี้ได้ด้วยวิธีต่อไปนี้:
สร้างstyles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
จากนั้นใช้ธีมนั้นกับแอปพลิเคชันของคุณในAndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
และมุมมองข้อความทั้งหมดของคุณจะเริ่มต้นเป็นสไตล์ที่กำหนดไว้MyTextViewStyle(ในกรณีนี้คือตัวหนาและสีแดง)!
สิ่งนี้ได้รับการทดสอบบนอุปกรณ์ตั้งแต่ระดับ API 4 เป็นต้นไปและดูเหมือนว่าจะใช้งานได้ดี
<item name="android:textViewStyle">@style/MyTextViewStyle</item>ในสไตล์ MyTheme แล้วใช้สไตล์กับแอปพลิเคชันของฉันTextViews ทั้งหมดของฉันจะแสดงตามสไตล์ (แม้แต่ชื่อแอพพลิเคชั่นในแถบการทำงาน) จะแก้ไขปัญหาด้วยแถบการดำเนินการได้อย่างไร? ฉันต้องการให้มีลักษณะเริ่มต้น Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>นั่นด้วยเพียงแค่ชี้ไปที่ค่าเริ่มต้น ActionBar (หรือสิ่งที่คล้ายกัน)
มีสองวิธีในการดำเนินการ:
คุณสามารถกำหนดสไตล์ของคุณเองได้โดยการสร้างไฟล์ XML บนres/valuesไดเร็กทอรี สมมติว่าคุณต้องการมีข้อความสีแดงและตัวหนาจากนั้นสร้างไฟล์ที่มีเนื้อหานี้:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRedTheme" parent="android:Theme.Light">
<item name="android:textAppearance">@style/MyRedTextAppearance</item>
</style>
<style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
res/values/red.xmlคุณสามารถตั้งชื่อมันเหมือนคุณต้องการตัวอย่างเช่น จากนั้นสิ่งเดียวที่คุณต้องทำคือใช้มุมมองนั้นในวิดเจ็ตที่คุณต้องการตัวอย่างเช่น:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
style="@style/MyRedTheme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
สำหรับข้อมูลอ้างอิงเพิ่มเติมคุณสามารถอ่านบทความนี้: การทำความเข้าใจธีมและสไตล์ของ Android
นี่เป็นอีกวิธีหนึ่งที่เป็นไปได้ในการบรรลุเป้าหมายนี้และจะให้คุณTextViewกำหนดสีข้อความตามที่คุณต้องการเสมอ ตัวอย่างเช่น:
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
public RedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.RED);
}
}
จากนั้นคุณต้องปฏิบัติตามปกติTextViewในไฟล์ XML ของคุณ:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<org.example.RedTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
ไม่ว่าคุณจะใช้ทางเลือกใดทางเลือกหนึ่งขึ้นอยู่กับความต้องการของคุณ หากสิ่งเดียวที่คุณต้องการทำคือการปรับเปลี่ยนรูปลักษณ์แนวทางที่ดีที่สุดคือสิ่งแรก ในทางกลับกันหากคุณต้องการเปลี่ยนรูปลักษณ์และเพิ่มฟังก์ชันใหม่ ๆ ให้กับวิดเจ็ตของคุณอันที่สองคือหนทางที่จะไป
custom_view_layout.xmlไฟล์ที่ใช้ขยายคลาสที่กำหนดเองไม่ได้
สำหรับสีข้อความเริ่มต้นTextViewให้ตั้งค่าandroid:textColorTertiaryในธีมของคุณเป็นสีที่ต้องการ:
<item name="android:textColorTertiary">@color/your_text_color</item>
สีอื่น ๆ ของการควบคุม Android สามารถควบคุมได้โดยใช้แอตทริบิวต์ของเฟรมเวิร์กหรือรองรับแอตทริบิวต์ไลบรารีหากคุณใช้ไลบรารีสนับสนุน
สำหรับรายการแอตทริบิวต์ที่คุณสามารถตั้งค่าได้ให้ตรวจสอบซอร์สโค้ด Androidของstyles.xmlและthemes.xmlหรือส่วนสำคัญที่เป็นประโยชน์นี้โดย Dan Lew ลองเปลี่ยนค่าแต่ละค่าและดูว่ามีการเปลี่ยนแปลงอย่างไรบนหน้าจอ
กำหนดสไตล์และใช้กับแต่ละวิดเจ็ตกำหนดธีมที่แทนที่ค่าเริ่มต้นของ Android สำหรับวิดเจ็ตนั้นหรือกำหนดทรัพยากรสตริงและอ้างอิงในแต่ละวิดเจ็ต