2015-08-26 6 views
12

मैं प्रोग्रामर को प्रोग्रामेटिक रूप से कैसे बना सकता हूं?
मैं एक एक्सएमएल चयनकर्ता कि Tab indicator colorAndroid चयनकर्ता प्रोग्रामेटिक रूप से

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states --> 
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/bg_tab_unselected" /> 
    <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/bg_tab_selected" /> 

    <!-- Focused states --> 
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/bg_tab_unselected_focused" /> 
    <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/bg_tab_selected_focused" /> 

    <!-- Pressed --> 
    <!-- Non focused states --> 
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/bg_tab_unselected_pressed" /> 
    <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/bg_tab_selected_pressed" /> 

    <!-- Focused states --> 
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/bg_tab_unselected_pressed" /> 
    <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/bg_tab_selected_pressed" /> 
</selector> 

वहाँ एक्सएमएल कोड गतिशील रूप से ऊपर बनाने के लिए कोई तरीका है के रूप में TabWidget करने के लिए आवंटित किया है?

+2

'देख StateListDrawable' – pskink

उत्तर

2

आप StateListDrawable सीधे बना सकते हैं और राज्यों आप एक्सएमएल में परिभाषित किया है जोड़ने के लिए addState उपयोग कर सकते हैं:

StateListDrawable d = new StateListDrawable(); 

[...] 

int[] sFocusedSelected = { android.R.attr.state_focused, android.R.attr.state_selected }; 
Drawable dFocusedSelected = getDrawable(R.drawable.bg_tab_selected_focused); 
d.addState(sFocusedSelected, dFocusedSelected); 

[...] 

एक ही नियम XML के लिए की तरह लागू होते हैं:

चयन के आधार पर नहीं किया गया है "सर्वश्रेष्ठ मिलान", लेकिन केवल पहला आइटम जो राज्य के न्यूनतम मानदंडों को पूरा करता है।

26

आप इस तरह इसका इस्तेमाल कर सकते हैं:

public static StateListDrawable makeSelector(int color) { 
    StateListDrawable res = new StateListDrawable(); 
    res.setExitFadeDuration(400); 
    res.setAlpha(45); 
    res.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(color)); 
    res.addState(new int[]{}, new ColorDrawable(Color.TRANSPARENT)); 
    return res; 
} 

और फिर:

view.setBackground(makeSelector(Color.RED)); 
+0

धन्यवाद भी अतिरिक्त अल्फा के लिए और setters बाहर फीका! – JerabekJakub

संबंधित मुद्दे