我有一个活动布局文件:
<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的右边缘会进入它所属的位置。请参阅下面的屏幕截图。
关于这里发生了什么的任何想法?
答案 0 :(得分: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 :(得分:0)
在样式中,容器的边距为130dp。将整个布局推向右侧。如果将其设置为0dp,则应该处于正确的位置。