3

Мне нужно работать с двумя ScrollView s. Один внутри AppBarLayout и другой снаружи.Можно ли добавить ScrollView в AppBarLayout

Для снаружи ScrollView, я использую NestedScrollView с appbar_scrolling_view_behavior и он работает правильно.

Для внутренней части, я использую Scrollview с app:layout_scrollFlags="scroll|enterAlways|snap"

Моей проблемы заключается в том, что NestedScrollView кажется переопределить ScrollView события, даже если я касаюсь ScrollView района, NestedScrollView является тот, который прокручивается.

Есть ли способ, которым я мог бы это сделать?

Смотрите ниже код:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:background="@android:color/white" 
      app:layout_scrollFlags="scroll|enterAlways|snap"> 

      <TextView     
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 

     </ScrollView>  
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <TextView     
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 

    </android.support.v4.widget.NestedScrollView> 
</android.support.design.widget.CoordinatorLayout> 

ответ

3

Может быть, это будет работать:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"  
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:background="@android:color/white" 
     app:layout_scrollFlags="scroll|enterAlways|snap" 
     android:id="@+id/scr"> 

     <TextView     
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

    </ScrollView>  
</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <TextView     
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

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

ScrollView scr = (ScrollView) findViewById(R.id.scr); 
scr.setOnTouchListener(new ScrollView.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. 
      v.getParent().requestDisallowInterceptTouchEvent(true); 
      break; 

     case MotionEvent.ACTION_UP: 
      // Allow ScrollView to intercept touch events. 
      v.getParent().requestDisallowInterceptTouchEvent(false); 
      break; 
     } 

     // Handle ScrollView touch events. 
     v.onTouchEvent(event); 
     return true; 
    } 
}); 

Это будет переопределить метод прокрутки в режиме прокрутки.

Смежные вопросы