Hãy nói rằng tôi muốn tất cả các TextViewphiên bản trong ứng dụng của tôi có textColor="#ffffff". Có cách nào để đặt nó ở một nơi thay vì đặt nó cho mỗi nơi TextViewkhông?
Hãy nói rằng tôi muốn tất cả các TextViewphiên bản trong ứng dụng của tôi có textColor="#ffffff". Có cách nào để đặt nó ở một nơi thay vì đặt nó cho mỗi nơi TextViewkhông?
Câu trả lời:
Trên thực tế, bạn có thể đặt kiểu mặc định cho TextViews (và hầu hết các widget tích hợp khác) mà không cần phải thực hiện một lớp java tùy chỉnh hoặc đặt kiểu riêng lẻ.
Nếu bạn xem trong themes.xmlnguồn Android, bạn sẽ thấy một loạt các thuộc tính cho kiểu mặc định cho các vật dụng khác nhau. Chìa khóa là thuộc tính textViewStyle(hoặc editTextStyle, v.v.) mà bạn ghi đè trong chủ đề tùy chỉnh của mình. Bạn có thể ghi đè những thứ này theo cách sau:
Tạo một 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>
Sau đó, chỉ cần áp dụng chủ đề đó cho ứng dụng của bạn trong AndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
Và tất cả các chế độ xem văn bản của bạn sẽ mặc định theo kiểu được xác định trong MyTextViewStyle(trong trường hợp này là đậm và đỏ)!
Điều này đã được thử nghiệm trên các thiết bị từ API cấp 4 trở đi và dường như hoạt động rất tốt.
<item name="android:textViewStyle">@style/MyTextViewStyle</item>theo kiểu MyTheme và sau đó áp dụng kiểu cho ứng dụng của mình, tất cả các mục của tôi TextViewsẽ được hiển thị theo kiểu (thậm chí tên của ứng dụng trong thanh hành động). Làm thế nào để khắc phục vấn đề với thanh hành động? Tôi muốn nó có sự xuất hiện mặc định. Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>ở đó, chỉ cần trỏ đến mặc định ActionBar (hoặc một cái gì đó tương tự)
Có hai cách để làm như vậy:
Bạn có thể xác định kiểu của riêng mình bằng cách tạo tệp XML trên res/valuesthư mục. Vì vậy, giả sử bạn muốn có văn bản màu đỏ và đậm, sau đó bạn tạo một tệp có nội dung này:
<?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>
Bạn có thể đặt tên như bạn muốn, ví dụ res/values/red.xml. Sau đó, điều duy nhất bạn phải làm là sử dụng chế độ xem đó trong các tiện ích mà bạn muốn, ví dụ:
<?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>
Để tham khảo thêm, bạn có thể đọc bài viết này: Tìm hiểu về Chủ đề và Kiểu Android
Đây là một cách khả thi khác để đạt được điều này và nó sẽ là cung cấp cho riêng bạn TextViewthiết lập màu văn bản luôn theo bất cứ thứ gì bạn muốn; ví dụ:
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);
}
}
Sau đó, bạn chỉ cần coi nó như một bình thường TextViewtrong tệp XML của mình:
<?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>
Cho dù bạn sử dụng một hay một lựa chọn khác tùy thuộc vào nhu cầu của bạn. Nếu điều duy nhất bạn muốn làm là sửa đổi ngoại hình, thì cách tiếp cận tốt nhất là cách đầu tiên. Mặt khác, nếu bạn muốn thay đổi giao diện và thêm một số chức năng mới vào các vật dụng của mình, thì thứ hai là cách để đi.
custom_view_layout.xmltệp được sử dụng để tăng một lớp tùy chỉnh?
Đối với màu văn bản mặc định trong TextView, đặt android:textColorTertiarytrong chủ đề của bạn thành màu mong muốn:
<item name="android:textColorTertiary">@color/your_text_color</item>
Nhiều màu sắc của điều khiển Android khác có thể được kiểm soát bằng các thuộc tính khung hoặc thuộc tính thư viện hỗ trợ nếu bạn sử dụng thư viện hỗ trợ.
Đối với một danh sách các thuộc tính mà bạn có thể thiết lập, hãy kiểm tra mã nguồn Android của styles.xmlvà themes.xml, hoặc rất hữu ích này ý chính bởi Dan Lew, hãy thử thay đổi mỗi giá trị và xem những gì họ thay đổi trên màn hình.