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>

私の質問は、上記のことを 1 つの xml レイアウト宣言で実行できるかどうかです。少数の子供には配布し、多数にはスクロールします。そうでない場合、コードでそれを行うための非ハッキーな方法はありますか(小さい画面サイズと大きい画面サイズを考慮して...子供はそれに応じて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 に答える