2011-03-23 7 views
5

ठीक है, यह मुझे पागल कर रहा है - मैंने उन सभी संदर्भों और उदाहरणों की खोज की है जो मुझे मिल सकती हैं और मुझे अभी भी कुछ स्पष्ट रूप से याद आ रही है। इन 7 दिन टीवी गाइड के लिए टैब (स्पष्ट रूप से सामान्य रूप से नहीं लाल तीर के साथ :)) रहे हैं ...टैबएक्टिविटी में टैब रंग-स्थिति/आकार को नियंत्रित करना?

enter image description here

क्या मैं पता करने की जरूरत क्या वस्तु (देखें या Drawable मैं है मान लीजिए) जो एक टैब के मुख्य शरीर/पृष्ठभूमि को बनाता है? (जैसा लाल तीर द्वारा इंगित किया गया है) और मैं इसे कैसे एक्सेस करूं या अपनी पसंद की सूची में इसे स्वचालित रूप से अपना राज्य रंग बदलूं? साथ ही, मैं सूट का पालन करने के लिए सूचक पाठ दृश्य का राज्य रंग कैसे प्राप्त कर सकता हूं?

उदाहरण: उपरोक्त कैप्चर में, यह पठनीय है क्योंकि मैंने टेक्स्ट रंग को एक स्थिर ग्रे पर सेट किया है (चमकदार सफेद के बजाय जो चयनित टैब पर गायब हो गया है)। लेकिन मैं चाहता हूं कि यह स्वचालित रूप से सफेद टैब (चयनित) और काले रंग पर चमकीले सफेद पाठ (काला चयन के लिए) पर काला टेक्स्ट बन जाए।

सभी मदद आभारी रूप से प्राप्त हुई।

+0

@ मैट: मुझे केवल आज इसे आजमाने का समय मिला। जिस तरह से मैं चाहता हूं उसे पाने के लिए मुझे कुछ काम करने की ज़रूरत है, लेकिन उसने मेरी समस्या हल कर दी है। बक्षीस के साथ इसे पुनरुत्थान के लिए धन्यवाद। – Squonk

उत्तर

6

दृश्य जो प्रत्येक टैब का प्रतिनिधित्व करता है का उपयोग कर

setIndicator(View) 

मैं प्रत्येक टैब का निर्माण करने के लिए इस कोड का उपयोग कर बदला जा सकता है:

View view = buildTabView(this, "Friday"); 
TabHost.TabSpec spec = tabHost.newTabSpec("cat1").setIndicator(view).setContent(intent); 
tabHost.addTab(spec); 

public static LinearLayout buildTabView(Context context, String label){ 
    LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
    final LinearLayout ll = (LinearLayout)li.inflate(R.layout.tab, null); 

    // the following lines will change the tabs size depending on the label (text) length. 
    // the longer tab text - the wider tabs 
    LinearLayout.LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, label.length() + 1); 
    ll.setLayoutParams(layoutParams); 

    final TextView tv = (TextView)ll.findViewById(R.id.tab_tv);   
    tv.setOnTouchListener(new OnTouchListener() {    
     public boolean onTouch(View v, MotionEvent event) { 
      ll.onTouchEvent(event); 
      return false; 
     } 
    }); 

    tv.setText(label);   
    return ll; 
} 

और यहाँ लेआउट/tab.xml

आता है
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/tab_bg_selector" 
    android:clickable="true" 
    > 

    <TextView 
    android:id="@+id/tab_tv" 
    android:layout_width="wrap_content" 
    android:layout_height="33dip" 
    android:text="Text 1" 
    android:textStyle="bold" 
    android:textSize="16dip" 
    android:gravity="center" 
    android:textColor="@drawable/tab_color_selector" 
    android:layout_weight="1.0" 
    android:clickable="true" 
    /> 

</LinearLayout> 

ध्यान दें कि LinearLayout की पृष्ठभूमि पर चयनकर्ता है (पीछे की ओर, स्पष्ट रूप से :) :), और पाठ व्यू में टेक्स्ट रंग पर चयनकर्ता है (चयनित/दबाए जाने पर टेक्स्ट रंग बदलने के लिए)। इस तरह आप टैब दबाए जाने पर टेक्स्ट को काला बना सकते हैं, और सफेद होने पर सफेद :) :)

+0

यह दिलचस्प लग रहा है। मैं वर्तमान में डिफ़ॉल्ट व्यवहार के साथ काम कर रहा हूं क्योंकि मेरा कोड अभी भी बीटा में है और यह सिर्फ एक 'कॉस्मेटिक' मुद्दा है जिसे मैं बैक-बर्नर पर रखूंगा। हालांकि यह काम करता है तो यह बहुत अच्छा होगा। धन्यवाद, मैं इसे आज़मा दूंगा। – Squonk

+0

यह काम करना चाहिए क्योंकि यह मेरी कई एंड्रॉइड परियोजनाओं में काम कर रहा है। जब तक मैंने एक टाइपो नहीं बनाया है;) – Kocus

+0

@ कोकस - मुझे इस कोड के साथ बहुत सारी परेशानी हो रही है, मुख्य रूप से "कन्स्ट्रक्टर व्यू ग्रुप। लेआउट पैराम्स (इंट, इंट, इंट) अपरिभाषित है" – Belgi

2

कृपया अपने कोड को आपके द्वारा उपयोग किए जाने वाले कोड के साथ अपडेट करें .. क्या आप टैब को एनिमेट करने के लिए अपने ड्रॉबल के अंदर एक्सएमएल का उपयोग करते हैं? एक्सएमएल का उपयोग कर एक नमूना टैब एक्शन हैंडलिंग है।

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/ic_tab_about_grey" 
      android:state_selected="false" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/ic_tab_about_color" android:state_selected="true"/> 
</selector> 

इस xml फ़ाइल का उपयोग कर टैब व्यवहार और आइकन अनुकूलित करें।

intent = new Intent().setClass(this, sms.class); 
spec = tabHost.newTabSpec("sms").setIndicator("SMS", 
     res.getDrawable(R.drawable.ic_tab_sms)) 
     .setContent(intent); 
tabHost.addTab(spec); 

अब टैब मेजबान और टैब-विजेट निर्धारित करने के लिए लेआउट में एक्सएमएल:

यहाँ टैब में इस एनीमेशन/अनुरूपण विकल्पों को सेट करने के लिए कोड है।

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      /> 
</TabHost> 

इस xml लेआउट को अपने रंग, फोंट और संरचना के साथ अनुकूलित करें।

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