17

Tôi đang sử dụng CollapsingToolBar bên trong CoordinatorLayout và tôi NestScrollView chứa một số EditText làm chế độ xem con. Những gì tôi đang phải đối mặt là khi edittext được tập trung và keybaoard xuất hiện xem hoàn chỉnh của tôi không di chuyển lên.CollapsingToolbarThanh toán không bị thu hẹp khi EditText lấy tiêu điểm

Dưới đây là mã và hình ảnh làm đầu ra của bố cục đó.

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/app_bar_height" 
    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="match_parent" 
     app:expandedTitleMarginEnd="64dp" 
     app:expandedTitleMarginStart="48dp" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 


     <ImageView 
      android:id="@+id/ivProductImage" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/stub_image" 
      app:layout_collapseParallaxMultiplier="0.7" 
      app:layout_collapseMode="parallax" /> 

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

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

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

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

    <LinearLayout 
     android:id="@+id/containerLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="10dp"> 

      <EditText 
       android:id="@+id/etProductTitle" 
       style="@style/EditTextStyle" 
       android:hint="@string/lbl_product_title" 
       android:inputType="text" 
       android:textSize="24dp" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp"> 

      <EditText 
       android:id="@+id/etProductDescription" 
       style="@style/EditTextStyle" 
       android:hint="@string/lbl_description" 
       android:inputType="text" /> 
     </android.support.design.widget.TextInputLayout> 

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

      <android.support.design.widget.TextInputLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_weight="0.5"> 

       <EditText 
        android:id="@+id/etDeposit" 
        style="@style/EditTextStyle" 
        android:hint="@string/lbl_deposit" 
        android:inputType="number" /> 
      </android.support.design.widget.TextInputLayout> 

      <android.support.design.widget.TextInputLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_weight="0.5"> 

       <EditText 
        android:id="@+id/etPricePerDay" 
        style="@style/EditTextStyle" 
        android:hint="@string/lbl_price_per_day" 
        android:inputType="number" /> 
      </android.support.design.widget.TextInputLayout> 
     </LinearLayout> 

     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp"> 

      <EditText 
       android:id="@+id/etLocation" 
       style="@style/EditTextStyle" 
       android:hint="@string/lbl_add_location" 
       android:inputType="text" /> 
     </android.support.design.widget.TextInputLayout> 

     <TextView 
      style="@style/SubHeading" 
      android:layout_margin="10dp" 
      android:text="@string/lbl_categories" 
      android:textColor="@color/color_primary" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recyclerView" 
      android:layout_width="match_parent" 
      android:layout_height="315dp" 
      android:layout_marginLeft="10dp" 
      android:isScrollContainer="false" 
      android:layout_marginRight="10dp" 
      android:scrollbars="none" /> 

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

enter image description here

+0

Hi, tôi có cùng một vấn đề, sao bạn giải quyết nó? – streamride

+0

Tôi đã sử dụng 'RecyclerView' bên trong' NestedScrollView', bằng cách loại bỏ RecyclerView đã giải quyết được sự cố của tôi. –

Trả lời

2

RecyclerView là một widget cuộn có nghĩa là, những widget cuộn sẽ không làm việc với eachother. (Nhưng, RecyclerView là một đứa trẻ từ NestedScrollingChild)

Kiểm tra câu hỏi này để được giải thích thêm:

How to use RecyclerView inside NestedScrollView?

Tuy nhiên, bạn có thể sử dụng nó với tùy chỉnhLinearLayoutManager

https://stackoverflow.com/a/32736113/4409113


Bằng cách này,

Bạn có thể sử dụng mà RecyclerView bên trong CoordinatorLayout và bên ngoài NestedScrollView.

Hy vọng điều đó sẽ hữu ích.

1

tôi đã giải quyết điều này bằng cách thêm OnFocusChangeListener để EditText và nếu nó có tập trung - chỉ sụp đổ quan điểm với setExpanded phương pháp:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(final View v, boolean hasFocus) { 
     if (hasFocus) { 
      mAppBarLayout.setExpanded(false, true); 
     } 
    } 
}); 

Nếu bạn muốn bạn CollapsingToolbarLayout được sụp đổ mỗi khi EditText khác của từ bạn bố cục của bạn tập trung, sau đó bạn nên đặt cùng một OnFocusChangeListener cho mỗi bố cục.

+2

Điều này có vẻ như là giải pháp tốt nhất, nhưng sẽ dễ dàng hơn khi chỉ thu gọn 'CollapsingToolbarLayout' bằng cách sử dụng' mAppBarLayout.setExpanded (false) '. – TR4Android

+0

Lý do tại sao tôi không sử dụng phương thức 'setExpanded' là phương thức này chỉ xuất hiện trong phiên bản v23 của thư viện thiết kế, nhưng tôi đã thực hiện nó trước đó. – rom4ek

0

Tôi nghĩ rằng sau khi tất cả các nghiên cứu này là giải pháp tốt nhất

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
@Override 
public void onFocusChange(final View v, boolean hasFocus) { 
    if (hasFocus) { 
     mAppBarLayout.setExpanded(false, true); // second one for animation 
    } 
} 
}); 
Các vấn đề liên quan