본문 바로가기

나의 플랫폼/안드로이드

[Android] ScrollView 안에 Multi Edittext or TextView

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


위 와 같이 ScrollView 안에 여러 라인의 TextView나 EditText를 넣었을 경우,

ScrollView가 최상위 View 이므로 EditText와 TextView에 적용 되는 Scroll이 먹히지 않습니다.


만약 TextView나 EditText가 고정 사이즈일 경우 화면을 넘어간 문자열은

볼수가 없는 상황이 되는 것이죠.


그럼 이럴 때는 어떻게 하느냐~ 아래 소스 처럼 하면 됩니다.


<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".NestedScrollViewActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:orientation="vertical">

            <requestFocus/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginTop="16dp"
                android:paddingLeft="16dp"
                android:paddingRight="16dp"
                android:text="@string/long_message"
                android:textSize="20sp"/>

            <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="160dp"
                android:layout_margin="16dp"
                android:background="@drawable/edit_text_background"
                android:clipToPadding="false"
                android:paddingBottom="16dp"
                android:paddingLeft="4dp"
                android:paddingRight="4dp"
                android:paddingTop="16dp">

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:gravity="top"
                    android:inputType="textMultiLine"
                    android:minHeight="128dp"
                    android:text="@string/long_message"/>
            </android.support.v4.widget.NestedScrollView>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingLeft="16dp"
                android:paddingRight="16dp"
                android:text="@string/long_message"
                android:textSize="20sp"/>
        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>
</layout>

출처 : http://qiita.com/noboru_i/items/09e7d3f8f222834378cc

참고 : https://github.com/android/platform_development/blob/master/samples/Support4Demos/res/layout/nested_scroll.xml


[ NestedScrollView [LinearLayout [ NestedScrollView [ Edittext나 TextView 


그리고 두번째 NestedScrollView에 android:clipToPadding을 false로 주게 되면

EditText나 TextView의 scroll이 끝났을 경우,

두번째 NestedScroll로 넘어가게 됩니다.

두번째 NestedScroll도 끝났을 경우 자동으로 최상위 NestedScrollView로 넘어가게 되구요.


이렇게 해서 좀 더 자연스럽게 UI를 구현 할 수가 있습니다.



여기서!! 잠깐

최상위 NestedScrollView를 그냥 ScrollView로 하면 안되나???

제가 테스트 해본 결과, Kitkat 버전보다 낮을 경우 두번째 NestedScrollView에서 부터 

스크롤이 먹히지 않습니다.

다른 말로는 Lollipop 이후 버전에서는 동작이 또 됩니다.


그래서 그냥 둘다 NestedScrollView를 사용 하도록 하세요.



그럼 참고하세요.