2016-05-30 28 views
6

Ho un layout con ScrollView che ha un ListView all'interno. Tutto funziona bene, ma se apro DrawerLayout, ScrollView scorrerà un po '. Basta guardare questi screenshot.ListView all'interno di ScrollView con DrawerLayout

enter image description here

Qui apro DrawerLayout

enter image description here

Poi ho chiudere DrawerLayout. enter image description here

Come potete vedere, scorre un po '. Come risolvere questo? Questo è il mio xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/menuLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <RelativeLayout 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <ProgressBar 
      android:id="@+id/progressWheelBar" 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" /> 

     <TextView 
      android:id="@+id/noDataTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:text="@string/noData" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:visibility="gone" /> 

     <LinearLayout 
      android:id="@+id/actionBarLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/transparent" 
      android:orientation="vertical" > 

      <RelativeLayout 
       android:id="@+id/innerActionBarLayout" 
       android:layout_width="match_parent" 
       android:layout_height="55dp" 
       android:background="@color/material_blue_500" > 

       <ImageButton 
        android:id="@+id/menuButton" 
        android:layout_width="36dp" 
        android:layout_height="36dp" 
        android:layout_alignParentLeft="true" 
        android:layout_centerVertical="true" 
        android:layout_marginLeft="5dp" 
        android:background="@null" 
        android:src="@drawable/ic_menu_white_24dp" /> 

       <TextView 
        android:id="@+id/title" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerVertical="true" 
        android:layout_marginLeft="16dp" 
        android:layout_toRightOf="@+id/menuButton" 
        android:textColor="@color/white" 

        android:textSize="18sp" /> 
      </RelativeLayout> 
     </LinearLayout> 

     <ScrollView 
      android:id="@+id/mainScrollView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_below="@+id/actionBarLayout" 
      android:fillViewport="true" 
      android:scrollbars="none" 
      > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 
       <!-- Here goes the frame layout with a listview inside --> 
       <FrameLayout 
        android:id="@+id/container" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:visibility="gone" 
        tools:context="ru.tenet.ttk.MainActivity" /> 
      </LinearLayout> 
     </ScrollView> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="2dp" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/actionBarLayout" 
      android:background="@drawable/shadow_down" /> 

    </RelativeLayout> 

    <LinearLayout 
     android:layout_width="250dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left|start" 
     android:background="@color/white" 
     android:orientation="vertical" 
     android:clickable="true" > 

     <ListView 
      android:id="@+id/menuListView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:listSelector="@drawable/list_selector" 
      android:layout_marginTop="15dp" 
      android:divider="@null" /> 
    </LinearLayout> 

</android.support.v4.widget.DrawerLayout> 
+4

Avete davvero bisogno del 'ScrollView'? Un 'ListView' scorre da solo. –

+0

È possibile utilizzare 'NestedScrollView' –

+0

È possibile inserire ListView all'interno di una vista di scorrimento ma si deve gestire sia la scroll, la vista elenco Bec ha la propria funzione di scorrimento e la vista di scorrimento ha la sua funzione di scorrimento per, quando si cerca di scorrere in conflitto quindi è necessario gestire gli eventi scroll padre e figlio. –

risposta

0

E 'difficile dare una risposta definitiva, perché non avete pubblicato il vostro codice. Un motivo potrebbe essere il fatto che tu abbia un'impostazione di stile "windowActionBarOverlay = true" nella tua attività. A causa di questa impostazione, il contenuto dell'attività inizia proprio all'inizio della pagina e cade dietro l'ActionBar.

Inoltre, come hanno affermato i commentatori sopra, hai effettivamente bisogno di un ListView all'interno di un ScrollView? ListView è di per sé una ScrollView.

Migliore se si pubblica il codice dell'attività del cassetto e l'attività del contenuto.

0

Soluzione semplice che utilizza headerView - ListView.addHeaderView(); Penso che non c'è bisogno di usare ScrollView & basta aggiungere contenitore come headerView

0

La cosa migliore sarebbe quella di utilizzare il RecyclerView e definire un headerRow per mostrare il vostro titolo.

0

Assegnare un DrawerListener a DrawerLayout e in evento onDrawerClosed scorrere la scrollView in alto.

mDrawer.setDrawerListener(new DrawerListener() { 
     @Override 
     public void onDrawerSlide(View view, float v) { 

     } 

     @Override 
     public void onDrawerOpened(View view) { 

     } 

     @Override 
     public void onDrawerClosed(View view) { 
      mScrollView.fullScroll(ScrollView.FOCUS_UP); 
     } 

     @Override 
     public void onDrawerStateChanged(int i) { 

     } 
    });