2012-08-22 20 views
11

Oto mój problem: Stworzyłem niestandardowy komponent, który rozszerza Button Ten przycisk ma jeden atrybut o nazwie testAttr.Tworzenie domyślnego stylu z atrybutami niestandardowymi

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

Chcę utworzyć domyślny styl dla tego komponentu więc dodanych w tym:

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

Problemem jest to, że chcę używać zarówno android atrybuty i moje własne jak ten, który nie jest pracy:

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

ustawić domyślne style w moim niestandardowego składnika w następujący sposób:

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

i oczywiście ustawić motyw w manifeście:

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

To zawsze wraca do domyślnego stylu dla jakiegoś powodu i nigdy nie ustawia android atrybuty. Więc tu coś pomijam?

+0

I Robię coś podobnego TUTAJ !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Odpowiedz

13

Cóż, ja wyglądała lepiej przed zadawanie pytań ...

znalazł rozwiązanie:

wymienić to:

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

z tym:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.attr.testStyle); 
} 
Powiązane problemy