Al fine di passare facilmente tra i frammenti, che sto incorporando un HorizontalScrollView nel mio layout Tab in questo modo:HorizontalScrollView in TabHost aggiunta di spazio aggiuntivo sulla fine
<?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>
Ma dopo l'aggiunta di frammenti nel mio codice (indicato di seguito) ci mostra un tratto un po 'di spazi extra alla fine del HorizontalScrollView:
prima di scorrere
Dopo lo scorrimento
Il codice è piuttosto complesso, ma cercherò di mostrare le parti più importanti.
{
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();
}
Inoltre estranei, ma anche un problema in cui la prima scheda non viene caricato manualmente (cliccando linguette carica Frammenti perfettamente, solo il primo in assoluto non carica per qualche motivo).
Questo può essere a causa del 'Android: fillViewport = "true"' 'nella HorizontalScrollView', provare a rimuoverlo per un'istanza e vedi se funziona. Sia 'HorizontalScrollView' che' TabWidget' hanno 'android: layout_height =" wrap_content "', quindi il 'fillViewport' potrebbe essere il motivo. – g00dy
Purtroppo l'ho provato e non ha fatto differenza. Ho pensato forse di aggiungere accidentalmente una scheda aggiuntiva (invisibile?), Ma non riesco a trovare dove ciò potrebbe accadere con le dichiarazioni di registro. –
Forse è all'interno di 'tabsFL'? Non lo so, ma forse anche l'ultimo Tab è mezzo invisibile, anche quello è un po ':) – g00dy