2017-04-01 1 views
0

Dans mon activité, j'utilise une barre d'outils qui s'effondre et qui fonctionne correctement. Il y a une icône dans le menu qui, lorsqu'elle est cliquée, déclenche l'affichage de la feuille du bas et la feuille du bas apparaît. Et lorsque vous cliquez à nouveau, la feuille inférieure s'effondre à nouveau.Comment utiliser la barre d'outils d'effondrement et la vue de la feuille du bas dans la même activité?

voici le XML pour cela.

<?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" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.example.aadesh.khabriuncle.ArticleScreenActivity"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBar" 
    android:layout_width="match_parent" 
    android:layout_height="300dp" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsingToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="#7fff" 
     app:expandedTitleMarginEnd="64dp" 
     app:expandedTitleMarginStart="48dp" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     app:title=""> 

     <FrameLayout 
      android:id="@+id/tags_article" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="bottom" 
      android:background="#7000" 
      android:visibility="visible"> 

      <ImageView 
       android:id="@+id/toolbarImage" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fitsSystemWindows="true" 
       android:scaleType="centerCrop" 
       app:layout_collapseMode="parallax" /> 

      <LinearLayout 
       android:id="@+id/tags" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="bottom" 
       android:background="@drawable/shape_chips" 
       android:orientation="horizontal" 
       android:visibility="gone" /> 


     </FrameLayout> 


     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbarArticleScreen" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:navigationIcon="@drawable/ic_chevron_left_black_24dp" 
      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:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

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

     <TextView 
      android:id="@+id/titletext" 
      style="@style/Article.title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

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

      <TextView 
       android:id="@+id/author" 
       style="@style/Article.date" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_alignParentLeft="true" /> 

      <TextView 
       android:id="@+id/datetext" 
       style="@style/Article.date" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_alignParentRight="true" /> 

     </RelativeLayout> 

     <WebView 
      android:id="@+id/webview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 


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

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/comments_bottomSheet" 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:background="@color/colorAccent" 
    android:clipToPadding="true" 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 

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

     <TextView 
      android:id="@+id/titlebottom" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="16dp" 
      android:textAllCaps="true" 
      android:textSize="16sp" /> 

     <TextView 
      android:id="@+id/textbottom" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="16dp" 
      android:textAllCaps="true" 
      android:textSize="12sp" /> 

    </LinearLayout> 


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

Voici comment je l'ai mis en java

public boolean onOptionsItemSelected(MenuItem item) { 

    if (item.getItemId() == R.id.comments) { 
     Log.i(TAG, "selected item is " + item); 
     if (bottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) { 
      Log.i(TAG, "the state is " + bottomSheetBehavior.getState()); 
      bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
     } else { 
      Log.i(TAG, "the state is " + bottomSheetBehavior.getState()); 
      bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
     } 
    } 
    return super.onOptionsItemSelected(item); 

} 

Le problème est que la vue de la feuille de fond apparaît chaque fois que l'activité commence. Et quand je clique sur l'icône du menu rien ne se passe. Même si les journaux que j'ai imprimés s'affichent.

Quelle pourrait être la raison?

Répondre

0

bien quelques choses sont à faire Je vais donner un exemple ici pour vous guider dans la bonne direction.

Étape 1: Modifier votre fichier manifest en ajoutant

android:windowSoftInputMode="stateHidden|stateAlwaysHidden" 

Étape 2: Placez votre mise en page de feuille de fond dans votre fichier xml pour l'activité.

<RelativeLayout 
      android:id="@+id/bottom_sheet" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:behavior_hideable="true" 
      app:behavior_peekHeight="0dp" 
      app:layout_behavior="com.package.ui.utils.BottomSheetBehaviorStiff"> 

Étape 3: Ajouter à BottomSheetBehaviorStiff utils:

public class BottomSheetBehaviorStiff<V extends View> extends BottomSheetBehavior<V> { 
    private boolean mAllowUserDragging = true; 

    /** 
    * Default constructor for instantiating BottomSheetBehaviors. 
    */ 
    public BottomSheetBehaviorStiff() { 
     super(); 
    } 


    public BottomSheetBehaviorStiff(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setAllowUserDragging(boolean allowUserDragging) { 
     mAllowUserDragging = allowUserDragging; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { 
     if (!mAllowUserDragging) { 
      return false; 
     } 
     return super.onInterceptTouchEvent(parent, child, event); 
    } 
} 

Étape 4: Maintenant initialize dans votre activité:

 RelativeLayout bottomSheetLayout = (RelativeLayout) 
     findViewById(R.id.bottom_sheet); 
       bottomSheetBehaviorStiff = (BottomSheetBehaviorStiff) 

    BottomSheetBehaviorStiff.from(bottomSheetLayout); 
      bottomSheetBehaviorStiff.setAllowUserDragging(false); 
      bottomSheetBehaviorStiff.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
       @Override 
       public void onStateChanged(@NonNull View bottomSheet, int newState) { 
        if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
         hideKeyBoard(); 
        } 
       } 

       @Override 
       public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
       } 
      });