Programing

스크롤 뷰 내 레이아웃 하단에보기 추가

crosscheck 2020. 11. 19. 07:50
반응형

스크롤 뷰 내 레이아웃 하단에보기 추가


따라서 내 레이아웃은 기본적으로 다음과 같습니다.

<ScrollView>
    <RelativeLayout>
        <BunchOfViews/>
        <ImageView android:layout_alignParentBottom="true"/>
    </RelativeLayout>
</ScrollView>

내가 가지고있는 ScrollView레이아웃의 모든 있도록 관계없이 항상 화면의 높이 표시되지 않습니다. 문제는 매우 높은 화면에서도 여전히 ImageView바닥에 있기를 원한다는 것 입니다. 그러나의 자식은 ScrollView정의 된 바닥이없는 것 같습니다. View레이아웃의 상단에 배치됩니다. 이 문제를 어떻게 깔끔하게 해결할 수 있습니까?


나는 같은 문제에 부딪쳤다. 나는 매우 만족스러운 해결책을 찾을 수 없었지만 여기에 내가 한 방법이 있습니다. 다른 사람이 더 나은 방법을 가지고있을 수도 있습니다. 저는 아무것도하지 않는 레이아웃을 추가하는 것을 싫어합니다.

내 해킹은 모든 공간을 차지하고 스크롤 뷰가 화면을 채우도록 강제하는 fill_parent가있는 스크롤 뷰 하단에 더미 선형 레이아웃을 추가하는 것입니다. 그런 다음 선형 레이아웃에 원하는 구성 요소를 추가하십시오.

다음은이 작업을 수행하는 내 레이아웃 중 하나입니다.

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:fillViewport="true" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="15px" >

        <!-- bunch of components here -->

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/spinner"
            android:layout_marginTop="5px"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2px" >

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="20px"
                android:paddingRight="20px"
                android:text="Delete" />
        </LinearLayout>
    </RelativeLayout>
</ScrollView>

동일한 문제가 발생하여이 페이지를 찾았습니다.

http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

기본적으로 ScrollView android:fillViewport를 true로 설정하면 자식 뷰가 ScrollView 자체와 동일한 높이로 확장되어 공간을 채울 수 있습니다. 그런 다음 자식 컨트롤 중 하나 layout_heightfill_parentlayout_weight설정하면 1해당 컨트롤이 빈 공간을 채우도록 "봄"이됩니다.

ScrollView의 내용이 이미 ScrollView를 채울만큼 충분히 높으면이 android:fillViewport효과가 없으므로 필요한 경우에만 설정이 시작됩니다.

내 최종 XML은 다음과 유사합니다.

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true">
    <LinearLayout
        android:orientation="vertical"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <!-- this expands to fill the empty space if needed -->
        </LinearLayout>

        <!-- this sits at the bottom of the ScrollView,
        getting pushed out of view if the ScrollView's
        content is tall enough -->
        <ImageView
            android:layout_height="wrap_content"
            android:src="@drawable/footer_image">
        </ImageView>
    </LinearLayout>
</ScrollView>

linearlayout이 필요하지 않은 것 같습니다. 중요한 것은 fillViewPort입니다. 당신은 그냥 사용할 수 있습니다

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottomParent="true">

이제 상대 레이아웃을 최소한 화면 크기로 지정했습니다.


나를 위해 완벽하게 작동 android : fillViewport = "true"


Joel Malone의 답변 scrollview 내부의 레이아웃 하단에 뷰를 추가하면 그 트릭이 수행됩니다. 내 솔루션은 Space위젯을 사용 하여 부모 레이아웃 내부의 나머지 높이를 채우는 작업을 수행 한다는 점을 제외하면 거의 동일 합니다. 이렇게 :

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent
    android:fillViewport="true"
    >
    <LinearLayout
        android:orientation="vertical"
        android:layout_height="wrap_content"
        >
        <android.support.v4.widget.Space
            android:layout_height="match_parent"
            android:layout_weight="1"
            />
    <ImageView
        android:layout_height="wrap_content"
        android:src="@drawable/footer_image"
        />
    </LinearLayout>
</ScrollView>

주의:

  • fill_parent 다른 답변에서는 오랫동안 사용되지 않는 것으로 표시됩니다.
  • Compare to an empty LinearLayout to fill the rest of parent layout, I think Space is much more appropriate(it's designed to do that job.)
  • Finally, don't forget that important attribute at the beginning of ScrollView: android:fillViewport="true". They together make this trick.

On your view that you want to be at the bottom use android:gravity="bottom"


From: http://code.google.com/p/k9mail/source/browse/k9mail/trunk/res/layout/account_setup_basics.xml?r=1314

This should help you:

<RelativeLayout
        android:layout_marginTop="-45dip" 
        android:padding="0dip"
        android:layout_alignParentBottom="true"
        android:gravity="bottom|right" 
        android:background="@android:drawable/bottom_bar"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">
        <Button
            android:id="@+id/manual_setup"
            android:text="@string/account_setup_basics_manual_setup_action"
            android:minWidth="@dimen/button_minWidth"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_marginBottom="-4dip" 
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="false" 
            />
        <Button
            android:id="@+id/next"
            android:text="@string/next_action"
            android:minWidth="@dimen/button_minWidth"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:drawableRight="@drawable/button_indicator_next"
            android:layout_marginBottom="-4dip" 
            android:layout_alignParentRight="true"
            android:layout_centerVertical="false" 
            />
    </RelativeLayout>

ScrollView view = new ScrollView( this );
ScrollView.LayoutParams lps = new FrameLayout.LayoutParams( FILL_PARENT, FILL_PARENT, Gravity.CENTER );
LinearLayout layout = new LinearLayout( this );
// what ever you want in the Layout 
view.addView( layout, lps );

참고URL : https://stackoverflow.com/questions/2417221/adding-view-to-bottom-of-layout-inside-a-scrollview

반응형