2012-05-17 5 views
6

Sto lavorando a un'applicazione Android che utilizza le icone dell'host di schede scaricate da Internet e la dimensione dell'icona è 30x30.Scheda AndroidHost e tabWidget problema icona

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

Se io uso questo codice di cui sopra (icona da risorse) per impostare il testo indicatore e l'icona, funziona abbastanza bene e l'icona adatta al widget scheda.

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

Ma se io uso questo codice (immagine scaricata da internet e la sua nella memoria interna) al posto di quello precedente, le icone sembrano così piccoli, e anche l'altezza e valori di larghezza sono uguali per entrambe le icone. Non ridimensiono le icone quando li scarico da internet e li salvo come PNG. Qualcuno ha qualche idea su quale sia il problema?

Here is the tabhost with icons from resources

Here is the tabhost with icons downloaded from internet

SOLUZIONE:

Invece di aggiungere oggetti alla scheda host con il mio codice precedente, ora uso il codice qui sotto, e funziona abbastanza bene. La differenza tra questi due è la nuova sta usando un Layout che ha la visualizzazione delle immagini e la visualizzazione del testo per indicare l'icona e il testo sottostante per impostare l'indicatore dell'intenzione. Quindi in questo modo sono in grado di chiamare il metodo dalla vista immagine per rendere l'immagine adatta ai suoi limiti che è definita nel file xml. Ecco il modo per farlo con View.

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

Ed ecco il layout con visualizzazione immagine e visualizzazione testo.

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

Grazie a @Venky e @SpK per avermi dato un'idea.

+0

[È meglio provare questo esempio] (http://stackoverflow.com/a/6992662/940096) Consiglio sempre questo esempio a tutti. – Praveenkumar

+0

http://stackoverflow.com/questions/5567532/android-ui-tabactivity-issue/5567823#5567823 .. Prova questo post – Venky

+0

Grazie per le tue risposte sono abbastanza utili, potrei usarlo più tardi. Ma quello che voglio fare è impostare queste icone della barra delle schede con le icone che ho scaricato da internet, e dal momento che non uso drawable-mdpi o drawable-ldpi in risorse esse non si adattano correttamente alla tabbar in base alla risoluzione dello schermo. Invece di usare le risorse mi piacerebbe usare le icone nella mia memoria interna. per esempio con createDrawableFromPath(). – osayilgan

risposta

11

Invece di aggiungere oggetti all'host di schede con il mio codice precedente, ora utilizzo il codice riportato di seguito e funziona piuttosto bene. La differenza tra questi due è la nuova sta usando un Layout che ha la visualizzazione delle immagini e la visualizzazione del testo per indicare l'icona e il testo sottostante per impostare l'indicatore dell'intenzione. Quindi in questo modo sono in grado di chiamare il metodo dalla vista immagine per rendere l'immagine adatta ai suoi limiti che è definita nel file xml. Ecco il modo di farlo con View.

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

Ed ecco il layout con visualizzazione immagine e visualizzazione testo.

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

Grazie a @Venky e @SpK per avermi dato un'idea.

+0

Che cos'è getTabWidget()? –

3

Tab icona dimensioni per alta densità (hdpi) schermi: completa Asset: 48 x 48 px Icon: 42 x 42 px

Tab icona dimensioni per media densità (MDPI) schermi: completo sulle risorse : 32 x 32 px Icon: 28 x 28 px

Tab icona dimensioni per bassa densità (ldpi) schermi: completa Asset: 24 x 24 px Icon: 22 x 22 px

si può vedere questo: http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html

+1

che puoi usare nel caso in cui usi le icone dalle risorse dell'applicazione non dalla memoria interna, perché c'è solo una dimensione per l'icona scaricata. – osayilgan

+0

@osayilgan dalle risorse delle applicazioni significa dalla cartella drawable? – user3233280

+0

@ user3233280 Sì, risorse significa qualsiasi cosa in bundle con la tua applicazione. Può essere qualsiasi cosa nella cartella "Res" o "Assets". – osayilgan