Um zwischen den Fragmenten zu leicht zu wechseln, ich bin wie so ein HorizontalScrollView in mein Tab Layout Einbetten:HorizontalScrollView in TabHost das Hinzufügen zusätzlicher Platz auf dem Ende
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none" >
<TabWidget android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</TabWidget>
</HorizontalScrollView>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</TabHost>
Aber nach Fragmente in meinem Code (siehe unten Hinzufügen) es zeigt plötzlich einige zusätzliche Leerzeichen am Ende des HorizontalScrollView bis:
Vor
ScrollenNach
Der Code Scrollen ist ziemlich komplex, aber ich werde die wichtigen Teile zu zeigen versuchen.
{
mTabHost = (TabHost) childLayout.findViewById(android.R.id.tabhost);
mTabHost.setup();
FrameLayout tabsFL = (FrameLayout) childLayout.findViewById(android.R.id.tabcontent);
tabsFL.setId(TABS_FRAME_ID);
for (int i = 0; i < list.size(); i++) {
mTabHost.addTab(newTab(String.valueOf(i), list.get(i).getTitle(), tabsFL.getId()));
}
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
updateTab(tabId, Integer.parseInt(tabId), list);
}
});
//manually load first fragment
mTabHost.setCurrentTab(mCurrentTab);
updateTab(String.valueOf(mCurrentTab), mCurrentTab, list);
}
private TabSpec newTab(String tag, String tabLabel, int tabContentId) {
int count = Integer.parseInt(tag);
count +=1;
View indicator = inflater.inflate(R.layout.details_tab,
(ViewGroup) childLayout.findViewById(android.R.id.tabs), false);
((TextView) indicator.findViewById(R.id.text)).setText(count + ". " + tabLabel);
TabSpec tabSpec = mTabHost.newTabSpec(tag);
tabSpec.setIndicator(indicator);
tabSpec.setContent(tabContentId);
return tabSpec;
}
private void updateTab(String tabId, int id, ArrayList<CustomObject> frags) {
mCurrentTab = id;
FragmentManager fm = activity.getSupportFragmentManager();
fm.beginTransaction()
.replace(TABS_FRAME_ID, DetailsFragment.newInstance(frags.get(id)), tabId)
.commitAllowingStateLoss();
}
auch nicht verwandte, aber ich habe auch ein Problem, wo der erste Registerkarte nicht manuell laden (Registerkarten klicken lädt die Fragmente perfekt, nur das allererste nicht aus irgendeinem Grunde nicht geladen werden).
Dies wegen der 'android sein kann: fillViewport = "true"' im 'HorizontalScrollView', versuchen Sie es für eine Instanz zu entfernen und Schau, ob das funktioniert. Sowohl 'HorizontalScrollView' als auch' TabWidget' haben 'android: layout_height =" wrap_content "', daher könnte der 'fillViewport' der Grund sein. – g00dy
Leider habe ich das versucht und es machte keinen Unterschied. Ich dachte vielleicht, dass ich versehentlich eine zusätzliche (unsichtbare?) Registerkarte hinzufüge, aber nicht finden kann, wo das mit Protokollanweisungen geschehen könnte. –
Vielleicht ist es in 'TabsFL'? Ich weiß nicht, aber vielleicht ist auch der letzte Tab halb unsichtbar, chech das auch :) – g00dy