2012-08-22 14 views
11

Quindi, ecco il mio problema: ho creato un componente personalizzato che estende lo Button Questo pulsante ha un attributo chiamato testAttr.Creazione di uno stile predefinito con attributi personalizzati

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

voglio creare uno stile di default per questa componente così ho aggiunto questo:

<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> 

Il problema è che voglio usare entrambi gli attributi Android e la mia come questo, che non è di lavoro:

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

ho impostato lo stili predefiniti nella mia componente personalizzato come segue:

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(); 
} 

E, naturalmente, ho impostato il tema nel manifesto:

<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> 

cade sempre di nuovo allo stile di default per qualche motivo e mai imposta gli attributi Android. Quindi mi manca qualcosa qui?

+0

I sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

risposta

13

Beh, avrei dovuto guardato meglio prima di fare domande ...

trovato la soluzione:

sostituito questo:

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

con questo:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.attr.testStyle); 
} 
Problemi correlati