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