Android entfernt Leerzeichen zwischen Tabs im Tabwidget
Lesezeit: 11 Minuten
ReNa
Ich habe eine Anwendung erstellt, die Tabs wie in HelloTabActivity hat, es gibt auch Leerzeichen zwischen diesen Tabs, kann jemand vorschlagen, wie man dieses Leerzeichen entfernt, und es gibt auch eine graue Linie unter den Tabs, wie kann das entfernt werden?
public class InfralineTabWidget extends TabActivity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = (TabHost)getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, TopNewsActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("topNews").setIndicator("Top News", res.getDrawable(R.drawable.tab_news)).setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent = new Intent().setClass(this, PowerActivity.class);
spec = tabHost.newTabSpec("power").setIndicator("Power", res.getDrawable(R.drawable.tab_power)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, EnergyActivity.class);
spec = tabHost.newTabSpec("energy").setIndicator("Renewable Energy", res.getDrawable(R.drawable.tab_energy)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, CoalActivity.class);
spec = tabHost.newTabSpec("coal").setIndicator("Coal", res.getDrawable(R.drawable.tab_coal)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, OilnGasActivity.class);
spec = tabHost.newTabSpec("oilnGas").setIndicator("Oil & Gas", res.getDrawable(R.drawable.tab_oilngas)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(100,25));
tabHost.getTabWidget().getChildAt(1).setLayoutParams(new LinearLayout.LayoutParams(100,25));
tabHost.getTabWidget().getChildAt(2).setLayoutParams(new LinearLayout.LayoutParams(100,25));
tabHost.getTabWidget().getChildAt(3).setLayoutParams(new LinearLayout.LayoutParams(100,25));
tabHost.getTabWidget().getChildAt(4).setLayoutParams(new LinearLayout.LayoutParams(100,25));
}
}
Jetzt möchte ich die schwarzen Leerzeichen zwischen den Registerkarten entfernen und es sollte so sein, als wären sie verbunden, und ich kann auch die graue Linie unter den Registerkarten nicht entfernen.
Danke
Bitte teilen Sie einige Screenshots zu Ihrem Problem und den von Ihnen verwendeten XML-Stilen / -Designs mit. Es kann vorkommen, dass Sie irgendwo einen globalen Trennzeichenstil festlegen (Layout-XML oder Code), und das stört Sie jetzt.
– rekaszeru
27. April 11 um 9:20 Uhr
@rekaszeru: Ich habe den Code eingefügt, bitte schauen Sie nach. 🙂
– ReNa
27. April 11 um 9:37 Uhr
rekaszeru
Zum Entfernen der grauen Linie am unteren Rand Ihrer Tableiste können Sie festlegen
tabHost.getTabWidget().setStripEnabled(false);
Ab dem Entfernen der Lücke zwischen den Laschen. Am besten verwenden Sie Ihr eigenes Drawable ohne Polsterung. Sie können dafür Bilder verwenden oder Sie können die Hintergründe Ihrer Registerkarten über XML erstellen, z. B. in a <layer_list> Wurzelelement:
und stellen Sie dieses Drawable als Hintergrund für Ihr ein TabWidget.
Um zu sehen, wie Sie Ihre Registerkarten anpassen können, gibt es viele Tutorials im Internet. Beispielsweise dieses von Josh ist kurz und hat eine schöne Erklärung.
Aktualisieren
Hier teile ich ein kleines Beispiel für ein Tabwidget mit benutzerdefinierten Registerkarten (basierend auf Ihrem Code), um die folgende Ausgabe zu erzielen:
Was du brauchst:
drei neue Layer Drawables (für ausgewählte, fokussierte und nicht ausgewählte Zustände der Registerkarten)
Zwei State Drawables (für den Text und Hintergrund der verschiedenen Zustände)
ein neues Layout für die Registerkarten
aktualisieren Sie Ihre main.xml
Aktualisieren Sie Ihre Aktivitätsklasse
aktualisiere deine androidManifest.xml (entferne die Stildeklarationen)
Die Drawables mit drei Ebenen: tab_normal.xml, tab_focused.xml, tab_selected.xml drawable/tab_normal.xml:
public class InfralineTabWidget extends TabActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TabHost tabHost = (TabHost) getTabHost();
tabHost.addTab(createTab(TopNewsActivity.class,
"topNews", "Top News", R.drawable.tab_news));
tabHost.addTab(createTab(PowerActivity.class,
"power", "Power", R.drawable.tab_power));
tabHost.addTab(createTab(EnergyActivity.class,
"energy", "Renewable Energy", R.drawable.tab_energy));
tabHost.addTab(createTab(CoalActivity.class,
"coal", "Coal", R.drawable.tab_coal));
tabHost.addTab(createTab(OilnGasActivity.class,
"oilnGas", "Oil & Gas", R.drawable.tab_oilngas));
tabHost.setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 140;
tabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 140;
tabHost.getTabWidget().getChildAt(2).getLayoutParams().width = 140;
tabHost.getTabWidget().getChildAt(3).getLayoutParams().width = 140;
tabHost.getTabWidget().getChildAt(4).getLayoutParams().width = 140;
}
private TabSpec createTab(final Class<?> intentClass, final String tag,
final String title, final int drawable)
{
final Intent intent = new Intent().setClass(this, intentClass);
final View tab = LayoutInflater.from(getTabHost().getContext()).
inflate(R.layout.tab, null);
((TextView)tab.findViewById(R.id.tab_text)).setText(title);
((ImageView)tab.findViewById(R.id.tab_icon)).setImageResource(drawable);
return getTabHost().newTabSpec(tag).setIndicator(tab).setContent(intent);
}
}
Und das ist es.
Um Registerkarten mit geraden Ecken zu erstellen, verlieren Sie einfach die Eckenspezifikationen aus den zeichbaren XML-Dateien der Ebene.
Spielen Sie auch mit den Farben, Strichen usw. herum, um das Ergebnis Ihren Vorlieben anzupassen.
Ich habe es nicht, können Sie das bitte näher erläutern
– ReNa
27. April 11 um 14:27 Uhr
In meinem Update finden Sie ein funktionierendes Beispiel für benutzerdefinierte Registerkarten. Spielen Sie mit den „Rändern“, Strichen, Farben und Ecken, damit sie so aussehen, wie Sie es möchten.
– rekaszeru
27. April 11 um 18:11 Uhr
Es scheint lächerlich, all dies durchgehen zu müssen, um einfach den Hintergrund zu ändern, der auf den Registerkarten basierend auf dem Status gezeichnet werden kann … großartiger Code
– JondavidJohn
29. Juni 11 um 14:43 Uhr
Hallo @rekaszeru, wie kann ich für jede Registerkarte eine andere Farbe anwenden? Bitte helfen Sie
– Erma Isabel
24. Januar 14 um 08:38 Uhr
@rekaszeru Ist das möglich? Oder muss ich für jede Registerkarte separate XMLs festlegen?
– Erma Isabel
24. Januar 14 um 12:03 Uhr
Verwenden Sie android:showDividers=”none” im XML-Layout.
Bitte teilen Sie einige Screenshots zu Ihrem Problem und den von Ihnen verwendeten XML-Stilen / -Designs mit. Es kann vorkommen, dass Sie irgendwo einen globalen Trennzeichenstil festlegen (Layout-XML oder Code), und das stört Sie jetzt.
– rekaszeru
27. April 11 um 9:20 Uhr
@rekaszeru: Ich habe den Code eingefügt, bitte schauen Sie nach. 🙂
– ReNa
27. April 11 um 9:37 Uhr