2013-06-14 44 views
9

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?

+0

Bạn đã chỉ định chủ đề _YellowGreen_ của mình trong tệp kê khai? – dominus

+0

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

+0

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

Trả lời

11

tôi nghĩ rằng bạn cần dòng đó trong chủ đề của bạn

<item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> 

vì vậy nó sẽ giống như thế này:

<style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item> 
    <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> 
</style> 

CẬP NHẬT

Sau khi cập nhật câu hỏi và một số hình thức ý kiến ​​bổ sung thông tin chúng tôi thấy rằng sự cố là ở Context. Đó là sai lầm tương tự mà tôi đã làm trong câu hỏi của mình: Android color selector doesn't work with custom attributes

Đến một đoạn được chuyển Activity và một đoạn khác được. Tôi không phải là chuyên gia nhưng ngay cả cả hai lớp đó đều chỉ mở rộng Context chỉ Activity mở rộng ContextThemeWrapper, có thông tin về kiểu. Có thể hữu ích khi đọc bài viết đó để hiểu tương lai Ngữ cảnh: http://www.doubleencore.com/2013/06/context/

+0

Hey @Mikoos, tôi vừa thử thêm thuộc tính này vào chủ đề của mình nhưng tiếc là nó không ghi đè thuộc tính 'android: listChoiceIndicatorMultiple'. – toobsco42

+0

Có thể sẽ dễ dàng hơn nếu bạn đưa cho chúng tôi toàn bộ dự án mẫu trên github với ý kiến ​​chính xác những gì bạn muốn đạt được. Giải pháp có thể được đưa ra bằng cách sử dụng yêu cầu thăm dò ý kiến. – Mikooos

+0

Cảm ơn @Mikoos, tôi đã đăng thêm mã dự án của mình và tin rằng tôi đang tiến gần hơn để tìm hiểu xem có gì sai. Hy vọng rằng tôi đã cung cấp đủ chi tiết. – toobsco42

Các vấn đề liên quan