2012-08-22 32 views
11

Vì vậy, đây là vấn đề của tôi: Tôi đã tạo thành phần tùy chỉnh mở rộng Button Nút này có một thuộc tính được gọi là testAttr.Tạo kiểu mặc định với các thuộc tính tùy chỉnh

<declare-styleable name="TestButton" parent="@android:style/Widget.Button"> 
    <attr name="testAttr" format="reference|color"/> 
</declare-styleable> 

Tôi muốn tạo ra một phong cách mặc định cho thành phần này vì vậy tôi thêm này:

<declare-styleable name="TestTheme"> 
    <attr name="testStyle" format="reference"/> 
</declare-styleable> 

<style name="Theme.AppTheme" parent="@android:style/Theme" > 
    <item name="testStyle">@style/test</item> 
</style> 

Vấn đề là tôi muốn sử dụng cả hai thuộc tính android và của riêng tôi như thế này, mà không phải là làm việc:

<style name="test" parent="@android:style/Widget.Button"> 
    <item name="android:background">#FF0000</item> 
    <item name="testAttr">testText</item> 
</style> 

tôi đặt phong cách mặc định trong phần tùy chỉnh của tôi như sau:

public myButton(final Context context) { 
    this(context, null); 
} 

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.styleable.TestTheme_testStyle); 
} 

public myButton(final Context context, final AttributeSet attrs, final int defStyle) { 
    super(context, attrs, defStyle); 

    final TypedArray array = context.obtainStyledAttributes(
      attrs, 
      R.styleable.TestButton, 
      defStyle, 
      R.style.testDefault); 
     final String s = array.getString(R.styleable.TestButton_testAttr); 
     setText(s); 
     array.recycle(); 
} 

Và dĩ nhiên tôi đặt Theme trong biểu hiện:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.AppTheme" > 

    <activity 
     android:name=".TestActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


</application> 

Nó luôn luôn rơi trở lại với phong cách mặc định đối với một số lý do và không bao giờ lặn các thuộc tính android. Vì vậy, tôi đang thiếu một cái gì đó ở đây?

+0

tôi đang làm một cái gì đó tương tự ở đây !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Trả lời

13

Vâng, tôi nên đã nhìn tốt hơn trước khi đặt câu hỏi ...

tìm thấy các giải pháp:

thay thế này:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.styleable.TestTheme_testStyle); 
} 

với điều này:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.attr.testStyle); 
} 
Các vấn đề liên quan