我正在尝试创建一个可均匀分布儿童的滑动侧面板。子代可以动态添加到父代。对于 mdpi 屏幕,每个孩子都是一个 32x32 dp 的 ImageButton。我想达到以下效果。
案例 1:孩子很少。 当布局的孩子很少时,我希望图像按钮均匀分布。
有几个孩子的面板插图:
XML 布局:
<LinearLayout
android:id="@+id/toolbar"
style="@style/TabbedPanelToolbar"
android:layout_toRightOf="@id/pager"
android:orientation="vertical" >
<ImageButton
android:src="@drawable/ic_tab_info"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_tag"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_chat"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_meta"
style="@style/TabbedPanelToolbarControl" />
</LinearLayout>
款式:
<style name="TabbedPanelToolbar" parent="android:style/Widget.ListView">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
<item name="android:background">@null</item>
</style>
<style name="TabbedPanelToolbarControl" parent="android:style/Widget.ImageButton">
<item name="android:background">@null</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
<item name="android:layout_weight">1</item>
</style>
案例 2:许多孩子。 当有大量子级时,我希望布局压缩到某个点然后开始滚动(不再分配子级,而是开始溢出父级)。为此,我不得不添加 ScrollView。问题是具有很少孩子的 LinearLayout 停止均匀分布它们。
有许多孩子的面板插图:
XML 布局:
<ScrollView
android:id="@+id/toolbar_container"
style="@style/TabbedPanelToolbarContainer" >
<LinearLayout
android:id="@+id/toolbar"
style="@style/TabbedPanelToolbar"
android:layout_toRightOf="@id/pager"
android:orientation="vertical" >
<ImageButton
android:src="@drawable/ic_tab_info"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_tag"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_chat"
style="@style/TabbedPanelToolbarControl" />
<ImageButton
android:src="@drawable/ic_tab_meta"
style="@style/TabbedPanelToolbarControl" />
...
</LinearLayout>
</ScrollView>
款式:
<style name="TabbedPanelToolbarContainer" parent="android:style/Widget.ScrollView">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
<item name="android:scrollbars">none</item>
<item name="android:scrollbarSize">0dp</item>
<item name="android:paddingRight">0dp</item>
<item name="android:scrollbarAlwaysDrawVerticalTrack">false</item>
<item name="android:scrollbarStyle">insideOverlay</item>
<item name="android:background">@null</item>
<item name="android:divider">@null</item>
</style>
<style name="TabbedPanelToolbar" parent="android:style/Widget.ListView">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
<item name="android:background">@null</item>
</style>
<style name="TabbedPanelToolbarControl" parent="android:style/Widget.ImageButton">
<item name="android:background">@null</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
<item name="android:layout_weight">1</item>
</style>
我的问题是是否可以通过一个 xml 布局声明来执行上述操作 - 甚至为少数孩子分发并为许多孩子滚动。如果没有,是否有一种非 hacky 的方式来使用代码(考虑到大小屏幕尺寸......儿童相应地从 24dp 增长到 96dp)。