1

我想创建一个均匀分布的儿童滑动侧面板。孩子可以动态地添加到父母。对于mdpi屏幕,每个孩子都是32x32的dp ImageButton。我想达到以下效果。Android的LinearLayout发布的儿童

案例1:几个孩子。 当布局少儿时,我希望图像按钮均匀分布。

插图与几个孩子面板:

Few Children

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将停止均匀分配它们。

插图多子女面板:

Many Children

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布局声明 - 甚至分发为少数孩子和许多人滚动。如果不是的话,是否有一种非常好的方法来处理代码(考虑小屏幕和大屏幕尺寸......孩子从24dp增长到96dp)。

回答

0

Omg,只显示我对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> 

我很高兴,我发现它,并相信其他人会发现它很有用太:)

+0

我看到被清除一downvote。如果你能解释你的推理,我将不胜感激。正如我在答复中提到的,我猜对了解决方案。它似乎工作。但是,如果它的一个怪癖或不符合Android规范,我想知道。 – Vadym