如何在同一活动中使用折叠工具栏和底工作表视图?



在我的活动中,我正在使用一个工作正常的折叠工具栏。菜单中有一个图标,单击该图标将触发底部工作表视图,并且将出现底部工作表。当再次单击时,底板将再次折叠。

这是它的 XML。

<?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>

这就是我在 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);
}

问题是每当活动开始时都会显示底部工作表视图。当我单击菜单图标时,没有任何反应。 即使我打印的日志正在显示。

可能是什么原因?

需要做一些事情 我将在这里举一个例子来指导您朝着正确的方向前进。

第 1 步: 通过添加来编辑清单文件

android:windowSoftInputMode="stateHidden|stateAlwaysHidden" 

第 2 步: 将底部工作表布局放在活动的 xml 文件中。

<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">

第 3 步: 将 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);
}
}

第 4 步: 现在在您的活动中初始化它:

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) {
}
});

最新更新