爲了容易片段之間切換,我嵌入HorizontalScrollView到我的標籤佈局像這樣:HorizontalScrollView在TabHost在端添加額外的空間
<?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>
但在我的碼加法片段後(如下所示)有突然顯示出來的HorizontalScrollView結束一些額外的空白:
之前滾動
滾動
後的代碼是非常複雜,但我會盡力表現出的重要組成部分。
{
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();
}
也無關,但我也有一個問題,即第一個標籤不手動加載(點擊標籤加載片段完美,只是最前面的一個不加載由於某種原因)。
這可能是因爲'的android:fillViewport = 「真」'的'HorizontalScrollView',嘗試刪除它的一個實例,並看看這是否有效。 'HorizontalScrollView'和'TabWidget'都具有'android:layout_height =「wrap_content」',所以'fillViewport'可能是原因。 – g00dy
不幸的是,我確實嘗試過,並沒有什麼區別。我想也許我不小心添加了一個額外的(隱形?)選項卡,但無法找到日誌語句可能發生的情況。 –
也許它在'tabsFL'裏面?我不知道,但也許最後一個標籤是半隱形的,chech那一個:) – g00dy