Android tabHost und tabWidget Icon Problem

Ich arbeite an einer Android-Anwendung, die die Tab-Host-Icons aus dem Internet heruntergeladen und Icon-Größe ist 30×30.

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

Wenn ich diesen Code oben (Symbol aus Ressourcen) verwende, um den Indikatortext und das Icon einzustellen, funktioniert es ganz gut und das Icon passt zum Tab-Widget.

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

Aber wenn ich diesen Code (Bild heruntergeladen aus dem Internet und seine im internen Speicher) anstelle der vorherigen, Symbole scheinen so klein, und sogar die Höhe und Breite Werte sind für beide Symbole gleich. Ich skaliere nicht die Ikonen beim Herunterladen von ihnen aus dem Internet und ich speichere sie als PNG. Jeder hat eine Ahnung, was das Problem ist?

Hier ist der tabhost mit Icons aus Ressourcen

Hier ist der tabhost mit Icons aus dem Internet heruntergeladen

LÖSUNG:

Anstatt Objekte auf den Tab-Host mit meinem vorherigen Code hinzufügen, jetzt benutze ich den Code unten, und es funktioniert ganz gut. Der Unterschied zwischen diesen beiden ist neu ist ein Layout, das Bildansicht und Textansicht hat, um Symbol und den Text unten anzugeben, um den Indikator der Absicht einzustellen. So kann ich auf diese Weise die Methode aus der Bildansicht aufrufen, um das Bild an die Grenzen zu bringen, die in der XML-Datei definiert ist. Hier ist der Weg, um es mit View zu tun.

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

Und hier ist das Layout mit Bildansicht und Textansicht.

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

Danke an @Venky und @SpK, um mir eine Idee zu geben.

  • Android-Tab-Aktionsleiste
  • Einfache Registerkarte mit Fragmentaktivität statt Tabaktivität
  • So erstellen Sie Tabs wie Twitter oder Instagram, um auf allen Android-Plattformen zu arbeiten> 2.2
  • Tab-Symbol nicht angezeigt
  • Ändern Sie die Schriftart in Action Bar Tabs mit Sherlock
  • Wie ändere ich den Hintergrund eines Android Tab-Widget?
  • Action Bar Sherlock mit Schaltflächen
  • ActionBarSherlock - Tabs erscheinen über eine Aktionleiste mit benutzerdefinierter Ansicht
  • 2 Solutions collect form web for “Android tabHost und tabWidget Icon Problem”

    Anstatt Objekte auf den Tab-Host mit meinem vorherigen Code hinzufügen, jetzt benutze ich den Code unten, und es funktioniert ganz gut. Der Unterschied zwischen diesen beiden ist neu ist ein Layout, das Bildansicht und Textansicht hat, um Symbol und den Text unten anzugeben, um den Indikator der Absicht einzustellen. So kann ich auf diese Weise die Methode aus der Bildansicht aufrufen, um das Bild an die Grenzen zu bringen, die in der XML-Datei definiert ist. Hier ist der Weg, um es mit View zu tun.

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

    Und hier ist das Layout mit Bildansicht und Textansicht.

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

    Danke an @Venky und @SpK, um mir eine Idee zu geben.

    Tab-Symbol Dimensionen für High-Density (hdpi) Bildschirme: Full Asset: 48 x 48 px Icon: 42 x 42 px

    Tab-Symbol Dimensionen für mittlere Dichte (mdpi) Bildschirme: Full Asset: 32 x 32 px Icon: 28 x 28 px

    Tab-Symbol Dimensionen für Low-Density (ldpi) Bildschirme: Full Asset: 24 x 24 px Icon: 22 x 22 px

    Sie können dies sehen: http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.