2016-07-12 8 views
5

У меня есть нижний лист с внутренним пространством NestedScrollView (см. Ниже). Когда я нажимаю кнопку FAB, я хочу сделать некоторые части в этом NestedScrollView невидимыми. Но когда я меняю некоторые линеаризованные видимости на GONE, нижний лист летает с вершины. Смотрите здесь:BottomSheet улетит с изменением видимости

enter image description here

Вы можете получить весь код из https://github.com/Tanrikut/BottomSheetExample

Мой метод видимость изменения:

private void changeVisibility() { 
    subtitleLayout.setVisibility(View.GONE); 

    coordinateLayout.setVisibility(View.GONE); 
    timeLayout.setVisibility(View.GONE); 

} 

Мой NestedScrollView XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:behavior_peekHeight="120dp" 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 
    android:id="@+id/bottom_sheet_main"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="28dp" 
      android:background="@android:color/white" 
      android:animateLayoutChanges="true" 
      android:orientation="vertical" 
      > 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:paddingLeft="10dp" 
       android:paddingStart="10dp" 
       android:paddingTop="@dimen/activity_horizontal_margin"> 

       <TextView 
        style="@style/TextAppearance.AppCompat.Headline" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Dandelion Chocolate" 
        android:id="@+id/title" /> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/activity_horizontal_margin" 
        android:layout_marginTop="16dp" 
        android:orientation="horizontal" 
        android:id="@+id/subtitleLayout"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:id="@+id/subtitle" 
         android:text="Subtitle" /> 

       </LinearLayout> 


      </LinearLayout> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:padding="@dimen/activity_horizontal_margin" 
       android:id="@+id/coordinateLayout"> 

       <ImageButton 
        android:layout_width="24dp" 
        android:layout_height="24dp" 
        android:alpha="0.36" 
        android:src="@drawable/ic_room_24dp" 
        android:background="@null" /> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_marginStart="@dimen/activity_horizontal_margin" 
        android:text="740, Valencia St, San Francisco, CA" 
        android:textColor="@android:color/primary_text_light" 
        android:id="@+id/bottom_sheet_coordinate" /> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:padding="@dimen/activity_horizontal_margin" 
       android:id="@+id/timeLayout"> 

       <ImageButton 
        android:layout_width="24dp" 
        android:layout_height="24dp" 
        android:alpha="0.36" 
        android:src="@drawable/ic_query_builder_24dp" 
        android:background="@null" /> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_marginStart="@dimen/activity_horizontal_margin" 
        android:text="Wed, 10 AM - 9 PM" 
        android:textColor="@android:color/primary_text_light" 
        android:id="@+id/bottom_sheet_time" /> 

      </LinearLayout> 


     </LinearLayout> 

    </FrameLayout> 
</android.support.v4.widget.NestedScrollView> 
+0

Где вы вызова метода changeVisibility()? – Lawrance

+0

Внутри кликмена кнопки фабрики – Tanrikut

ответ

0

Может быть, это могу помочь тебе! Я не могу комментировать, так разместить его в качестве ответа

Here

for slide layout something same as bottom sheet but good

+0

Я не совсем понимаю, что вы предлагаете. Вы предлагаете иметь несколько нижних листов вместо изменения видимости внутри одного нижнего листа? – Tanrikut

+0

его до вас, но я предлагал выход из кода нижних листов, вместо этого вы можете использовать плавный макет, см. Мой отредактированный ответ, потому что нижние листы не так хороши в использовании (как для моей перспективы lol) –

0

BottomSheetBehavior имеют свое собственное поведение, с помощью которого вы можете получить соответствующий результат. Ниже приводится поведение нижней части листа.

STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED, STATE_COLLAPSED, STATE_HIDDEN.

Не используйте видимость любых макетов.

Используйте это поведение в вашем коде, как:

fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int behaviorState = bottomSheetBehavior.getState(); 
       if (behaviorState == BottomSheetBehavior.STATE_EXPANDED) { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
       } else { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
       } 
      } 
}); 
+0

Я не пытаюсь изменить видимость нижний лист. Я пытаюсь изменить то, что видно внутри этого нижнего листа. – Tanrikut

7

Я столкнулся с этим, потребовалось некоторое время, чтобы выяснить, что стало причиной.

Это потому, что вы используете андроид: animateLayoutChanges, в котором возникает ошибка в методе BottomSheetBehavior или CoordinatorLayout.

Снимите его, и BottomSheet прекратит анимацию самостоятельно, когда это не должно. Не исправление, но, по крайней мере, обходной путь.

-

Обновление:

Оказывается, что если включить «animateLayoutChanges» программным путем установки экземпляра LayoutTransition в использовании, вы можете установить флаг на нем, что помешает ему баловаться с видами, являются предками один вы используете Android: animateLayoutChanges на (иначе: ваш BottomSheet контейнер):

LayoutTransition transition = new LayoutTransition(); 
transition.setAnimateParentHierarchy(false); 
yourLinearLayoutThatNeedsLayoutAnimation.setLayoutTransition(transition); 
+0

Это сработало для меня –

+0

Это именно то, что решает проблему! - спасибо! эта проблема все еще присутствует в текущей поддержке lib v25.0.1 – koesclem

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

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