0

(HorizontalScrollView HorizontalScrollView 내부) 작동하지 않습니다 TextView중첩 스크롤 내가 API에 추가 된 기능 새로운 NestedScroll의 장점을 먹고 싶어 (21) 내 레이아웃은 매우 간단

기본적으로 nestedScrollEnabled는 false입니다. 그래서 나는 자식 (예 : 내부 HorizontalScrollView)에 대해 xml로 활성화했습니다. 루트 HorizontalScrollView에 우선 순위를두고 스크롤하려고합니다. 따라서 아무 것도하지 않습니다. 상단 스크롤보기 만 스크롤 할 수 있으며, 내부 스크롤보기는 전혀 스크롤 터치 이벤트를 볼 수 없습니다.

<?xml version="1.0" encoding="utf-8"?> 
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.majeur.test.MainActivity"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent"> 

     <HorizontalScrollView 
      android:id="@+id/scrollView2" 
      android:layout_width="200dp" 
      android:layout_height="match_parent" 
      android:nestedScrollingEnabled="true"> 

      <TextView 
       android:layout_width="250dp" 
       android:layout_height="match_parent" 
       android:text="@string/text" /> 

     </HorizontalScrollView> 

     <View 
      android:layout_width="200dp" 
      android:layout_height="match_parent" 
      android:background="@color/colorAccent"/> 


    </LinearLayout> 
</HorizontalScrollView> 

답변

-1

는 방향 수평으로 아이의 LinearLayout에 NestedScrollView를 사용해보십시오이 작품은, 이해가 안해야 WAU ... 덕분이다.

NestedScrollView 그냥있는 ScrollView처럼이지만 신규 및 이전 버전 안드로이드의 에 중첩 된 스크롤 부모와 자식 모두의 역할을 지원합니다. 중첩 스크롤은 기본적으로 사용됩니다.

https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

+0

을 API 21+ 지원에서 .v4.widget.NestedScrollView는 exa 여야합니다. ctly는 프레임 워크 ScrollView와 동일합니다. 어쨌든 지원 라이브러리를 사용해 보겠습니다. 중첩 스크롤은 매우 심하게 문서화되어 있으므로 NestedScrollView 지원이 세로 ScrollView인지 아니면 어떤 축에서 스크롤 할 수 있는지 자체적으로 판단 할 수 없는지 알 수 없습니다. – Pdroid

0

당신은 onTouchListener 사용하여 접촉을 차단해야합니다

// Intercept touch scroll by 
    transparentImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int action = event.getAction(); 
      switch (action) { 
       case MotionEvent.ACTION_DOWN: 
        // Disallow ScrollView to intercept touch events. 
        scrollView.requestDisallowInterceptTouchEvent(true); 
        // Disable touch on transparent view 
        return false; 

       case MotionEvent.ACTION_UP: 
        // Allow ScrollView to intercept touch events. 
        scrollView.requestDisallowInterceptTouchEvent(false); 
        return true; 

       case MotionEvent.ACTION_MOVE: 
        scrollView.requestDisallowInterceptTouchEvent(true); 
        return false; 

       default: 
        return true; 
      } 
     } 
    }); 

그리고 당신의 XML ....

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.majeur.test.MainActivity"> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent"> 


    <RelativeLayout 
      android:id="@+id/mapLayout" 
      android:layout_width="match_parent" 
      android:layout_height="300dp" 
    <HorizontalScrollView 
     android:id="@+id/scrollView2" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:nestedScrollingEnabled="true"> 

     <TextView 
      android:layout_width="250dp" 
      android:layout_height="match_parent" 
      android:text="@string/text" /> 

    </HorizontalScrollView> 
       <ImageView 
       android:id="@+id/transparent_image" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       /> 
    </RelativeLayout> 

    <View 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:background="@color/colorAccent"/> 


</LinearLayout> 

+0

도움을 주셔서 감사합니다.하지만 제가 원한 것이 아닙니다! 이 솔루션의 문제점은 자식이 더 이상 스크롤 할 수 없을 때 부모에게 스크롤을주지 않는다는 것입니다. 이것은 중첩 스크롤 "프레임 워크"의 모든 목적이며, 계층 구조의 여러 뷰간에 스크롤을 동기화 할 수 있습니다. – Pdroid

+0

우리가 여기서하려고하는 것은 부모 스크롤을 잠그는 것을 차단하지 않는다는 것입니다 ... 우리는 그것을 가로 채고 있습니다 ... 그것은 사용자가 스크롤 할 때 내부 스크롤을 가능하게하는 외부 스크롤의 효과를 취소한다는 것을 의미합니다 하나 .... 그래서 어떤 식 으로든 부모 스크롤에 영향을 미치지 않을 것입니다. 적어도 내 경우에는 그렇지 않습니다! – MezzyDroid