Sau khi đọc qua References To Theme Attributes Tôi đang cố gắng tham chiếu giá trị của thuộc tính trong chủ đề tùy chỉnh mà tôi đã đặt.Ghi đè các thuộc tính kiểu được tham chiếu
Tôi đang áp dụng một phong cách người dùng định nghĩa để một CheckedTextView
<CheckedTextView
android:id="@+id/contactInfo"
style="@style/ListViewCheckedTextViewRowStyle" >
</CheckedTextView>
Phong cách người dùng định nghĩa được định nghĩa là:
<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
<item name="android:checkMark">?android:listChoiceIndicatorMultiple</item>
</style>
chủ đề của tôi tôi đã tạo được định nghĩa là:
<style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item>
</style>
Tuy nhiên, kiểu dáng checkMark được hiển thị là bản vẽ của chủ đề mặc định của thiết bị le và không được người dùng của tôi định nghĩa có thể vẽ được.
Cách duy nhất tôi có thể đã hiển thị drawable của tôi là với:
<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
<item name="android:checkMark">@drawable/btn_check_holo_light</item>
</style>
Nhưng đó đánh bại toàn bộ mục đích của trọng thuộc tính này, đặc biệt là kể từ khi tôi muốn ghi đè lên thuộc tính này trong nhiều chủ đề.
Tôi đang thiết lập các chủ đề trong phương pháp onCreate()
của Activity
của tôi như thế này:
public void onCreate(Bundle savedInstanceState) {
this.setTheme(R.style.Theme_Yellowgreen);
super.onCreate(savedInstanceState);
// ...
}
Tôi cũng đã cố gắng để thiết lập các chủ đề trong AndroidManifest.xml nộp như:
<application android:theme="@style/Theme.Yellowgreen" >
Nhưng đó không hoạt động. Điều gì có thể xảy ra?
Cập nhật
Tôi vừa tạo một dự án mẫu nhỏ và có vẻ như mã tôi đã đăng ở trên đang hoạt động. Vì vậy, tôi phải có một số phong cách khác được ghi đè tài sản này hoặc có lẽ nó đã làm với các tập tin xml bố trí của tôi.
Trong dự án lớn của tôi, tôi có hai Fragments
trong một Activity
. Cả hai Fragments
đều có Listviews
được hỗ trợ bởi Adapters
. Trong Fragment A
phương pháp getView()
của Adapter
là như sau:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.contact_entry, null);
}
//...
return convertView;
}
trong Fragment B
phương pháp getView()
của Adapter
là như sau:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, parent, false);
}
//...
return convertView;
}
Sơ đồ bố trí được quy định như sau:
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/list_item_header" />
<include layout="@layout/contact_entry" />
<View android:id="@+id/list_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:drawable/divider_horizontal_dark" />
</LinearLayout>
list_item_header.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header_text"
android:layout_width="match_parent"
android:layout_height="25dip"
android:background="@color/dark_blue"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold" />
contact_entry.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contactEntry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal" >
<QuickContactBadge
android:id="@+id/contactPic"
style="@style/ContactPicStyle" />
<CheckedTextView
android:id="@+id/contactInfo"
style="@style/ListViewCheckedTextViewRowStyle" >
</CheckedTextView>
</LinearLayout>
Đối với một số lý do, trong Fragment B
thuộc tính Checkmark theo chủ đề không được hiển thị chính xác trong khi ở Fragment A
, dấu chọn sử dụng YellowGreen Theme hiện hành và theo kiểu một cách chính xác. Tại sao điều này sẽ xảy ra?
Bạn đã chỉ định chủ đề _YellowGreen_ của mình trong tệp kê khai? – dominus
Tôi vừa tạo một dự án mẫu để kiểm tra các tệp kiểu của bạn và mọi thứ hoạt động tốt cho tôi. Vì vậy, tôi thứ hai _dominus'_ câu hỏi: bạn đã đặt chủ đề hoạt động để 'YellowGreen' trong tệp kê khai? – Idolon
hey @dominus và @Idolon, tôi đã cập nhật câu hỏi. Tôi đã thử đặt chủ đề hoạt động theo hai cách khác nhau nhưng đã không thành công khi ghi đè thuộc tính kiểu 'android: listChoiceIndicatorMultiple'. – toobsco42