1

我正在尝试创建一个可均匀分布儿童的滑动侧面板。子代可以动态添加到父代。对于 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)。

4

1 回答 1

0

天哪,只是显示了我对 Android 的了解程度。所以我开始在 ADT 中使用图形布局工具并单击随机的东西(不是真的,但更像是实验)。事实证明,这可以通过添加android:fillViewport="true"到 ScrollView 来实现。最终的xml布局如下:

<ScrollView
    android:id="@+id/toolbar_container"
    style="@style/TabbedPanelToolbarContainer"
    android:fillViewport="true" >

    <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>

我很高兴我找到了它,并且相信其他人也会觉得它有用:)

于 2014-06-13T06:57:26.863 回答