2012-05-17 12 views
6

मैं एक एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं जो इंटरनेट से डाउनलोड किए गए टैब होस्ट आइकन का उपयोग करता है और आइकन आकार 30x30 है।एंड्रॉइड टैबहोस्ट और टैबविजेट आइकन समस्या

for(int i = 0; i < titleNames.size(); i++) 
{ 
    intent = new Intent().setClass(context, Gallery.class); 
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), res.getDrawable(R.drawable.icon)).setContent(intent); 
    tabHost.addTab(sp); 
} 

अगर मैं ऊपर (संसाधनों से आइकन) इस कोड का उपयोग सूचक पाठ और चिह्न सेट करने के लिए, यह काफी अच्छी तरह से काम करता है और आइकन टैब विजेट के लिए फिट बैठता है।

for(int i = 0; i < titleNames.size(); i++) 
{ 
    intent = new Intent().setClass(context, Gallery.class); 
    sp = tabHost.newTabSpec(titleNames.get(i)).setIndicator(titleNames.get(i), Drawable.createFromPath(path+iconNames.get(i))).setContent(intent); 
    tabHost.addTab(sp); 
} 

लेकिन अगर मैं इस कोड (छवि इंटरनेट से डाउनलोड किया और आंतरिक स्मृति में अपनी) के बजाय पिछले एक का उपयोग करें, माउस इतना छोटा लगता है, और यहां तक ​​कि ऊंचाई और चौड़ाई मूल्यों दोनों आइकन के लिए ही हैं। मैं उन्हें इंटरनेट से डाउनलोड करते समय आइकन स्केल नहीं करता हूं और मैं उन्हें पीएनजी के रूप में सहेजता हूं। किसी को भी कोई समस्या है कि समस्या क्या है?

Here is the tabhost with icons from resources

Here is the tabhost with icons downloaded from internet

समाधान:

इसके बजाय अपने पिछले कोड के साथ टैब की मेजबानी के लिए वस्तुओं को जोड़ने का

, अब मैं नीचे दिए गए कोड का उपयोग, और यह बहुत अच्छी तरह से काम करता है। इन दोनों के बीच का अंतर नया है एक लेआउट का उपयोग कर रहा है जिसमें इरादे के संकेतक को सेट करने के लिए आइकन और पाठ को इंगित करने के लिए छवि दृश्य और टेक्स्ट व्यू है। तो इस तरह से मैं छवि दृश्य से विधि को कॉल करने में सक्षम हूं ताकि छवि को अपनी सीमाओं में फिट किया जा सके जो xml फ़ाइल में परिभाषित किया गया है। यहां व्यू के साथ ऐसा करने का तरीका है।

private void addTab(String labelId, Drawable drawable, Class<?> c) { 

    tabHost = getTabHost(); 
    intent = new Intent(this, c); 
    spec = tabHost.newTabSpec("tab" + labelId); 

    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
    TextView title = (TextView) tabIndicator.findViewById(R.id.title); 
    title.setText(labelId); 

    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
    icon.setImageDrawable(drawable); 
    icon.setScaleType(ImageView.ScaleType.FIT_CENTER); 

    spec.setIndicator(tabIndicator); 
    spec.setContent(intent); 
    tabHost.addTab(spec); 
} 

और यहां छवि दृश्य और टेक्स्ट व्यू के साथ लेआउट है।

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="0dip" 
android:layout_height="55dip"  
android:layout_weight="1" 
android:orientation="vertical" 
android:padding="5dp" 
android:weightSum="55" > 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:src="@drawable/icon" 
    android:adjustViewBounds="false" 
    android:layout_weight="30" 
/> 
<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="25" 
    android:gravity="center_horizontal" 
/> 
</LinearLayout> 

मुझे एक विचार देने के लिए @ वेन्की और @ एसपीके के लिए धन्यवाद।

+0

[आप इस उदाहरण को बेहतर तरीके से आजमाएं] (http://stackoverflow.com/a/6992662/940096) मैं हमेशा इस उदाहरण को सभी को सुझाव देता हूं। – Praveenkumar

+0

http://stackoverflow.com/questions/5567532/android-ui-tabactivity-issue/5567823#5567823 .. इस पोस्ट को आजमाएं – Venky

+0

आपके उत्तरों के लिए धन्यवाद, वे काफी मददगार हैं, मैं इसे बाद में उपयोग कर सकता हूं। लेकिन मैं जो करना चाहता हूं वह इन टैब बार आइकनों को उन आइकनों के साथ सेट कर रहा है जिन्हें मैंने इंटरनेट से डाउनलोड किया था, और चूंकि मैं उन संसाधनों में drawable-mdpi या drawable-ldpi का उपयोग नहीं करता, वे स्क्रीन रिज़ॉल्यूशन के अनुसार ठीक से टैबबार के लिए उपयुक्त नहीं हैं। संसाधनों का उपयोग करने के बजाय मैं अपनी आंतरिक मेमोरी में आइकन का उपयोग करना चाहता हूं। उदाहरण के लिए createDrawableFromPath() के साथ। – osayilgan

उत्तर

11

मेरे पिछले कोड के साथ टैब होस्ट में ऑब्जेक्ट जोड़ने के बजाय, अब मैं नीचे दिए गए कोड का उपयोग करता हूं, और यह काफी अच्छा काम करता है। इन दोनों के बीच का अंतर नया है एक लेआउट का उपयोग कर रहा है जिसमें इरादे के संकेतक को सेट करने के लिए आइकन और पाठ को इंगित करने के लिए छवि दृश्य और टेक्स्ट व्यू है। तो इस तरह से मैं छवि दृश्य से विधि को कॉल करने में सक्षम हूं ताकि छवि को अपनी सीमाओं में फिट किया जा सके जो xml फ़ाइल में परिभाषित किया गया है। व्यू के साथ ऐसा करने का तरीका यहां दिया गया है।

private void addTab(String labelId, Drawable drawable, Class<?> c) { 

tabHost = getTabHost(); 
intent = new Intent(this, c); 
spec = tabHost.newTabSpec("tab" + labelId); 

View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
TextView title = (TextView) tabIndicator.findViewById(R.id.title); 
title.setText(labelId); 

ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
icon.setImageDrawable(drawable); 
icon.setScaleType(ImageView.ScaleType.FIT_CENTER); 

spec.setIndicator(tabIndicator); 
spec.setContent(intent); 
tabHost.addTab(spec); 
} 

और यहां छवि दृश्य और टेक्स्ट व्यू के साथ लेआउट है।

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="0dip" 
android:layout_height="55dip"  
android:layout_weight="1" 
android:orientation="vertical" 
android:padding="5dp" 
android:weightSum="55" > 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:src="@drawable/icon" 
    android:adjustViewBounds="false" 
    android:layout_weight="30" 
/> 
<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="25" 
    android:gravity="center_horizontal" 
/> 
</LinearLayout> 

मुझे एक विचार देने के लिए @ वेन्की और @ एसपीके के लिए धन्यवाद।

+0

GetTabWidget() क्या है? –

3

उच्च घनत्व (hdpi) स्क्रीन के लिए टैब आइकन आयाम: पूर्ण एसेट: 48 x 48 पिक्सल चिह्न: 42 x 42 पिक्स

टैब आइकन मध्यम घनत्व के लिए आयाम (mdpi) स्क्रीन: पूर्ण एसेट : 32 x 32 पिक्सल चिह्न: 28 x 28 पिक्स

कम घनत्व (ldpi) स्क्रीन के लिए टैब आइकन आयाम: पूर्ण एसेट: 24 x 24 पिक्सल चिह्न: 22 x 22 पिक्सल

आप देख सकते हैं यह: http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html

+1

है, यदि आप एप्लिकेशन के संसाधनों से आइकन का उपयोग आंतरिक स्मृति से नहीं करते हैं, तो डाउनलोड आइकन के लिए केवल एक आयाम है। अनुप्रयोग संसाधनों से – osayilgan

+0

@osayilgan खींचने योग्य फ़ोल्डर से है? – user3233280

+0

@ user3233280 हां, संसाधनों का मतलब है कि आपके आवेदन के साथ कुछ भी बंडल किया गया है। यह "Res" या "संपत्ति" फ़ोल्डर में कुछ भी हो सकता है। – osayilgan

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