web-dev-qa-db-ja.com

Android ScrollView fillViewportが機能しない

上部に名前が付いたシンプルなレイアウトと、画面の下部に配置したいボタン、またはアイテムを追加する場合はそれを超えたレイアウトがあります。

だから私は次のようにLinearLayoutでScrollViewを使用しています:

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/white"
Android:fillViewport="true"
Android:focusableInTouchMode="true"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
tools:context=".ItemDetailActivity" >

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" >

    <!-- Name -->

    <RelativeLayout
        Android:id="@+id/top_content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top" >

        <TextView
            Android:id="@+id/name_label"
            style="@style/Header_Label_TextView"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="@string/name" />

        <TextView
            Android:id="@+id/name_value"
            style="@style/Value_Label_TextView"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/name_label" />
    </RelativeLayout>

    <!-- button -->

    <RelativeLayout
        Android:id="@+id/ButtonLayout"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom" >

        <Button
            Android:id="@+id/add_button"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10sp"
            Android:onClick="editItem"
            Android:text="@string/button_edit" />
    </RelativeLayout>

    <requestFocus />
</LinearLayout>

これは私が得るものです:

Result of the layout XML

ボタンが画面の下部またはそれ以降に表示されるようにするにはどうすればよいですか。オンラインで検索すると、ほとんどの回答は「Android:fillViewport = "true"を設定することでしたが、それは役に立ちません。何が悪いのですか?

14
rgamber

次のようにボタンのレイアウトを変更します。

 <RelativeLayout
    Android:id="@+id/ButtonLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="bottom" >

    <Button
        Android:id="@+id/add_button"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10sp"
        Android:onClick="editItem"
        Android:layout_alignParentBottom="true"
        Android:text="@string/button_edit" />
</RelativeLayout>
5
user755

これはうまくいくはずです-

  1. 相対ビューをスクロールビューの子として使用します。
  2. セットする layout_alignParentBottom = trueボタンの。

サンプルXML

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/white"
Android:fillViewport="true"
Android:focusableInTouchMode="true"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
tools:context=".ItemDetailActivity" >

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <!-- Name -->

    <RelativeLayout
        Android:id="@+id/top_content"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="top" >

        <TextView
            Android:id="@+id/name_label"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Name" />

        <TextView
            Android:id="@+id/name_value"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/name_label" />
    </RelativeLayout>

    <!-- button -->

    <RelativeLayout
        Android:id="@+id/ButtonLayout"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true" >

        <Button
            Android:id="@+id/add_button"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="10sp"
            Android:onClick="editItem"
            Android:text="Edit" />
    </RelativeLayout>
</RelativeLayout>

</ScrollView>
3
Anukool

スクロールビューで、LinearLayoutの代わりにRelativeLayoutを使用して、Bottom Viewプロパティを設定します。

Android:layout_alignParentBottom="true"
1
Krunal Shah

LinearLayout(RelativeLayoutよりもパフォーマンスが高い)を使用している場合は、Android:gravity="bottom"Android:layout_height="match_parent"を次のように設定する必要があります。

<LinearLayout
    Android:id="@+id/ButtonLayout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:gravity="bottom" >

    <Button
        Android:id="@+id/add_button"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10sp"
        Android:onClick="editItem"
        Android:text="@string/button_edit" />
</LinearLayout>

リファレンス: https://demonuts.com/Android-fillviewport/

0
Aba