2014-04-29 60 views
3

我有一個活動的佈局文件:爲什麼我的ScrollView只有在不需要滾動時纔會過寬?

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/compose_message_view" 
     style="@style/Container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <LinearLayout style="@style/SectionContainer" > 

      <TextView 
       style="@style/FieldHeader" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:drawablePadding="8dp" 
       android:focusable="true" 
       android:focusableInTouchMode="true" /> 

      <Spinner 
       android:id="@+id/compose_message_department" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:paddingBottom="8dp" 
       android:prompt="@string/compose_message_department_prompt" 
       android:spinnerMode="dropdown" /> 
     </LinearLayout> 

     <LinearLayout style="@style/SectionContainer" > 

      <TextView 
       style="@style/FieldHeader" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:drawablePadding="8dp" 
       android:text="@string/message_account_label" /> 

      <Spinner 
       android:id="@+id/compose_message_account" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:paddingBottom="8dp" 
       android:prompt="@string/compose_message_account_prompt" 
       android:spinnerMode="dropdown" /> 
     </LinearLayout> 

     <EditText 
      android:id="@+id/compose_message_subject" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="32dp" 
      android:layout_marginTop="16dp" 
      android:hint="@string/compose_message_subject_hint" 
      android:inputType="textCapSentences" /> 

     <EditText 
      android:id="@+id/compose_message_body" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/compose_message_body_hint" 
      android:inputType="textMultiLine|textCapSentences" /> 
    </LinearLayout> 

</ScrollView> 

相關的風格是這樣的:

<style name="Container"> 
    <item name="android:layout_marginRight">130dp</item> 
    <item name="android:layout_marginLeft">130dp</item> 
    <item name="android:paddingTop">32dp</item> 
    <item name="android:paddingLeft">32dp</item> 
    <item name="android:paddingRight">32dp</item> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:orientation">vertical</item> 
</style> 

<style name="SectionContainer"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:orientation">vertical</item> 
    <item name="android:paddingBottom">16dp</item> 
</style> 

<style name="FieldHeader" parent="android:Widget.TextView"> 
    <item name="android:textAllCaps">true</item> 
    <item name="android:paddingLeft">12dp</item> 
    <item name="android:paddingTop">24dp</item> 
    <item name="android:paddingRight">12dp</item> 
</style> 

現在,當我在橫向打開一個的Nexus 7這項活動(沒試過其他平板電腦尚未),ScrollView及其內容超出了屏幕的右邊緣。當我在compose_message_body EditText中輸入幾行以使UI延伸到屏幕底部以下時,UI的右邊緣進入它所屬的位置。見下面的截圖。

LinearLayout is short and does not cause ScrollView to scroll - for some reason it's too wide LinearLayout is long and causes ScrollView to scroll - and now it has perfect width

任何想法,這是怎麼回事?

回答

6

這是在ScrollView上使用fillViewPort屬性的副作用。如果您已將fillViewPort設置爲true,則只有在您的孩子的測量身高低於ScrollView的高度時纔會考慮這一點。在這種情況下,ScrollView將拉伸內容以填充視口,並且您的邊距將無法正確應用。只要您的孩子的內容大於ScrollView的高度,您的邊距就會正確應用。

我建議不要在你放在ScrollView中的子佈局(LinearLayout)上使用邊距,但只能使用填充。

所以,你的集裝箱風格可能成爲

<style name="Container"> 
    <item name="android:paddingTop">32dp</item> 
    <item name="android:paddingLeft">164dp</item> 
    <item name="android:paddingRight">164dp</item> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:orientation">vertical</item> 
</style> 
+1

你讓我在正確的軌道上,所以非常感謝你爲。爲了記錄,我最終刪除了容器的邊距,並向ScrollView添加了填充(等於刪除的邊距)。這讓我保持了整個屏幕的風格。我還需要向ScrollView添加'android:scrollbarStyle =「outsideInset」'以允許在內部LinearLayout之外滾動。 – Aaron

0

在樣式中,您的容器剩餘邊距爲130dp。把你的整個佈局推向正確的地步。如果你將它設置爲0dp,它應該處於正確的位置。

相關問題