2015-06-30 11 views
32

Bir düzende NestedScrollView kullanıyorum ve CollapsingToolbarLayout için tasarım destek kitaplığından yeni KoordinatorLayout'u kullanmaya çalışıyorum.Kaydırma, tıklama olaylarıyla görünümlerden kaydırma yapmaya çalışırken NestedScrollView'de çalışmaz

My düzen dosyası şöyle görünür: i kaydırmak çalıştığınızda, bazen çalışmıyor

<?xml version="1.0" encoding="utf-8"?> 
<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="200dp" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 

      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 
      <!--   app:expandedTitleMarginEnd="64dp"--> 
      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="200dp" 
       android:scaleType="centerCrop" 
       android:src="@drawable/image_load_default_big" /> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/anim_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 
      </android.support.v7.widget.Toolbar> 

     </android.support.design.widget.CollapsingToolbarLayout> 

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

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/nestedScrollVw" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_scrollFlags="scroll|enterAlways" 
     android:fitsSystemWindows="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clickable="false" 
      android:fitsSystemWindows="true"> 

      <LinearLayout 
       android:id="@+id/changePasswordButtonContainer" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

       <Button 
        android:id="@+id/changePasswordExpand" 
        android:layout_width="match_parent" 
        android:layout_height="55dp" 
        android:background="@drawable/back_img" 
        android:text="Change Your Password" 
        android:textColor="@color/white" 
        android:textStyle="bold" /> 
      </LinearLayout> 


      <LinearLayout 
       android:id="@+id/changePasswordContainer" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/changePasswordButtonContainer" 
       android:layout_centerInParent="true" 
       android:orientation="vertical" 
       android:padding="10dp"> 


       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        android:text="Edit Your Password" 
        android:textColor="@color/orange" /> 

       <EditText 
        android:id="@+id/etUserName" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:background="@drawable/edittext_default_bg" 
        android:drawableLeft="@drawable/password_icon" 
        android:drawableRight="@drawable/tick" 
        android:hint=" Old Password" 
        android:padding="12dp" 
        android:password="true" 
        android:textColorHint="#b5b5b5" /> 

       <EditText 
        android:id="@+id/etPass" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:background="@drawable/edittext_default_bg" 
        android:drawableLeft="@drawable/password_icon" 
        android:drawableRight="@drawable/cross" 
        android:hint=" New Password" 
        android:padding="12dp" 
        android:password="true" 
        android:textColorHint="#b5b5b5" /> 

       <RadioButton 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:paddingBottom="20dp" 
        android:paddingTop="20dp" 
        android:text="show password" /> 

       <Button 
        android:id="@+id/btnSingIn" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_margin="4dp" 
        android:background="@drawable/login_button_background" 
        android:paddingBottom="8dp" 
        android:paddingTop="8dp" 
        android:text="Done" 
        android:textColor="@color/white" 
        android:textStyle="bold" /> 
      </LinearLayout> 

      <LinearLayout 
       android:id="@+id/dealerToDealerContainer" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/changePasswordContainer" 
       android:orientation="vertical"> 

       <Button 
        android:id="@+id/dealerToDealerExpand" 
        android:layout_width="match_parent" 
        android:layout_height="55dp" 
        android:background="@drawable/back_img" 
        android:text="Dealer To Dealer Platform No" 
        android:textColor="@color/white" 
        android:textStyle="bold" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/dealerToDealerContainer" 
       android:layout_centerInParent="true" 
       android:orientation="vertical" 
       android:padding="10dp"> 


       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        android:text="Edit Number" 
        android:textColor="@color/orange" /> 

       <EditText 
        android:id="@+id/dealerToDealerNo" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:background="@drawable/edittext_default_bg" 
        android:drawableLeft="@drawable/password_icon" 
        android:drawableRight="@drawable/tick" 
        android:hint=" 56546789" 
        android:padding="12dp" 
        android:password="true" 
        android:textColorHint="#b5b5b5" /> 

       <Button 
        android:id="@+id/dealerToDealerNoDone" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_margin="4dp" 
        android:background="@drawable/login_button_background" 
        android:paddingBottom="8dp" 
        android:paddingTop="8dp" 
        android:text="Done" 
        android:textColor="@color/white" 
        android:textStyle="bold" /> 
      </LinearLayout> 

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

. Bunun için nedeni, tıklama olayları ile diğer düzen öğeleri dokunma olayını tüketiyor. Temelde EditText, RadioButton, Düğmesi dokunma olaylarını tüketiyor. Bu sorunu çözmek için herhangi bir öneriniz var mı?

+0

İçinde tıklanabilir görünümler ile ilerlemek için mi karar verdiniz? 'Fill_vertical' ile çözümlenmiş olarak işaretlediniz, ancak bana sadece boş alanı doldurun. Tıklanabilir görünümlerle hala kaydırma yapmıyor. – Davidea

+0

fill_vertical sorunu çözmedi, sorunu CollapsingToolbar ile görünüyor, çünkü eğer CollapsingToolbar'ı kaldırırsak, iyi çalışmaya başladı. – bhai

+0

22.2.1 ile çözümlenmiş gibi görünüyor, onaylayabilir misiniz? – Davidea

cevap

20

Aynı problem vardı. Yalnızca NestedScrollView içerik yüksekliği cihaz ekranının yüksekliğinden az olduğunda gerçekleşir. Yani geçici çözüm ekran yüksekliğine boyutlandırmak yapmak için NestedScrollView içindeki görünümü için setMinimumHeight(..) yöntemini kullanmaktır: view olduğunu

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getBaseActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int screenHeight = displaymetrics.heightPixels; 

int actionBarHeight = 0; 
TypedValue tv = new TypedValue(); 
if (getBaseActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { 
    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics()); 
} 

view.setMinimumHeight(screenHeight - actionBarHeight); 

senin RelativeLayout

Benim ön çalışıyor. Umarım size yardımcı olur

+0

Bu doğru çözümdür Teşekkürler –

+1

Ekranın minimum yüksekliğini ayarlama ekranıHeight - actionBarHeght, sorunu çözmedi benim için. Biraz daha büyük ayarlamayı denedim (örneğin: screenHeight - actionBarHeight + 5) ve çalıştı. Herhangi bir fikir neden? – Sandra

+0

Bu hala gerekli mi? Bu Android/Materyal Tasarımı için temel gibi görünüyor. Nasıl gözden kaçırılabilir? –

2

ScrollView'larınızdan biri, tüm olayları dispatchMotionEvent öğesinde doğru yanıt veren ilk Görünüm'e gönderir. Uygulamanızda böyle bir senaryoyu kullanmaktan kaçınabilirsiniz VEYA ACTION_DOWN'i tüketmemesi için tüm dispatchMotionEvent yöntemlerini (kaydırmalardan ve Görünümlerden) geçersiz kılabilirsiniz.

+0

bile sorunu vardı acemi için biraz daha fazla cevap açıklığa kavuşturabilir misiniz :) –

2

AndroidManifest.xml'inizde 'windowSoftInputMode' özniteliğinin 'adjustResize' olarak ayarlandığından emin olun.

<activity android:name=".activities.YourActivity" android:windowSoftInputMode="adjustResize">