2017-02-14 6 views
0

У меня есть HorizontalScrollView внутри VerticalScrollView. Если я прокручиваю по горизонтали, прокрутка будет гладкой. Но если я прокручиваю по вертикали, свиток не является гладким, он иногда прокручивается по горизонтали. Как сделать вертикальную прокрутку гладкой?HorizontalScrollView внутри scrollView android

Вот мой XML,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.sasank.calendarview.MainActivity" 
    android:background="@android:color/white"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="500dp" 
     android:layout_marginLeft="200dp" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="20dp"> 
     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical"> 
      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <android.support.v7.widget.RecyclerView 
        android:id="@+id/chapter_list" 
        android:layout_width="150dp" 
        android:layout_height="match_parent"> 

       </android.support.v7.widget.RecyclerView> 

       <HorizontalScrollView 
        android:id="@+id/horizontal_scroll" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_toRightOf="@id/chapter_list" 
        android:scrollbars="horizontal"> 
        <android.support.v7.widget.RecyclerView 
         android:id="@+id/calendar" 
         android:layout_width="wrap_content" 
         android:layout_height="match_parent"> 

        </android.support.v7.widget.RecyclerView> 
       </HorizontalScrollView> 

      </RelativeLayout> 
     </ScrollView> 

    </RelativeLayout> 
</RelativeLayout> 

Im использованием вертикального LinearLayoutManager для Chapter_list Recyclerview и GridLayoutManager для календаря RecyclerView

+0

Не уверен, что, если он был еще фиксированы, но гнездование ScrollView не поддерживается и не рекомендуется. По этой причине мне пришлось создать специальный календарь. – samosaris

ответ

2
android:nestedScrollingEnabled="true" 

Вы можете попробовать это, но все еще проблемы, связанные с вложенной прокруткой и так и на самом деле являются общими. У людей были те же проблемы здесь, на StackOverflow, взгляните, я надеюсь, что это может вам помочь: Problems with Nested Scrolling

+0

Пробовал, но это не сработало –

0

У меня есть вертикальная прокрутка и горизонтальная фотокамера в одном из моих проектов, и она отлично работает. Вот код:

фрагмент/активности раскладка:

<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" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     ... 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/horizontal_recycler_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="15dp" 
     android:layout_marginBottom="15dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:horizontalSpacing="10dp" 
     android:isScrollContainer="false" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" 
     /> 
      ... 

     </LinearLayout> 
</ScrollView> 

пункт:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
    android:id="@+id/horizontal_item_view_image" 
    android:layout_marginRight="10dp" 
    android:layout_width="109dp" 
    android:layout_height="109dp" /> 

</LinearLayout> 

адаптер:

public class HorizontalPhotosAdapter extends RecyclerView.Adapter<HorizontalPhotosAdapter.MyViewHolder> { 

    private Context context; 
    private LayoutInflater inflater; 
    private ArrayList<Bitmap> bitmapList; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 

     private ImageView riv; 

     public MyViewHolder(View view) { 
      super(view); 

      riv = (ImageView) view.findViewById(R.id.horizontal_item_view_image); 

     } 
    } 


    public HorizontalPhotosAdapter(Context context, ArrayList<Bitmap> bitmapList, String[] imageUrls) { 
     this.context = context; 
     this.bitmapList = bitmapList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_item_view, parent, false); 

     if (itemView.getLayoutParams().width == RecyclerView.LayoutParams.MATCH_PARENT) 
      itemView.getLayoutParams().width = RecyclerView.LayoutParams.WRAP_CONTENT; 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 

     holder.riv.setImageBitmap(bitmapList.get(position)); 

    } 


    @Override 
    public int getItemCount() { 
     return bitmapList.size(); 
    } 
} 

реализация в фрагменте/деятельности:

  horizontalAdapter=new HorizontalPhotosAdapter(getContext(), bitmapList); 
      horizontal_recycler_view.setAdapter(horizontalAdapter); 
      horizontalAdapter.notifyDataSetChanged(); 

      LinearLayoutManager horizontalLayoutManagaer = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); 
      horizontal_recycler_view.setLayoutManager(horizontalLayoutManagaer); 
      horizontal_recycler_view.setAdapter(horizontalAdapter); 

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

  • Нет связанных вопросов^_^