gpt4 book ai didi

java - 当软键盘可见时,CollapsingToolbarLayout 不折叠

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:28 28 4
gpt4 key购买 nike

我有一个用于工具栏的布局;

<?xml version="1.0" encoding="utf-8"?>
<merge
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="wrap_content">

<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/expanded_collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="120dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<android.support.v7.widget.Toolbar
android:id="@+id/expanded_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"/>

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

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

我在我的布局中使用它;

<com.dan.finance.ui.ExpandedToolbar
android:id="@+id/expandable_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:toolbarNavColor="?attr/NavigationIconColor"
app:toolbarNavIcon="?attr/NavigationUpArrow"
app:toolbarTitle="My Finances"
app:toolbarTitleColor="?attr/NavigationTitleColor"/>

在我的大多数布局中,在这个下面我有一个嵌套的 ScrollView ,我的问题是在默认情况下内容不应该滚动的布局上,打开软键盘允许内容使用 adjustResize 滚动,但我的工具栏没有对此使用react并崩溃。

我的布局的完整代码是;

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

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

<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<com.dan.finance.ui.ExpandedToolbar
android:id="@+id/expandable_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:toolbarNavColor="?attr/NavigationIconColor"
app:toolbarNavIcon="?attr/NavigationUpArrow"
app:toolbarTitle="My Finances"
app:toolbarTitleColor="?attr/NavigationTitleColor"/>

<android.support.v4.widget.NestedScrollView
android:id="@+id/nested_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_anchor="@id/expandable_toolbar"
app:layout_anchorGravity="bottom"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<android.support.constraint.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="32dp"
android:paddingEnd="0dp"
android:text="Finances"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<android.support.v7.widget.AppCompatEditText
android:id="@+id/edit_text"
android:layout_width="0dp"
android:layout_height="56dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title"/>

<android.support.v7.widget.AppCompatTextView
android:id="@+id/details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="DETAILS TODO"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/edit_text"/>

<android.support.v7.widget.RecyclerView android:id="@+id/finances_list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/details"/>

<android.support.v7.widget.AppCompatButton
android:id="@+id/button_see_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="See All"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/finances_list"
app:layout_constraintVertical_bias="1.0"/>

</android.support.constraint.ConstraintLayout>

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

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

</RelativeLayout>

这个布局作为一个整体不会在大型设备上滚动,但可能会在较小的设备/ future 版本上滚动,所以我相信这可能是我的问题所在,但我已经尝试了很多不同的东西,但没有任何结果.我还尝试使用

以编程方式扩展和折叠工具栏
mAppBarLayout.setExpanded(expand, true);

但这并没有为我假设的布局设置动画,因为它不是滚动布局,因为可能没有内容可以显示?

最佳答案

AppBarLayout 必须是 CoordinatorLayout 的直接子级,以便按您预期的方式滚动和折叠布局。 (参见 AppBarLayout documentation。)

This view depends heavily on being used as a direct child within a CoordinatorLayout. If you use AppBarLayout within a different ViewGroup, most of it's functionality will not work.

这是您的布局在当前编码时的样子。 (这是来自布局检查器。)

enter image description here

如您所见,AppBarLayout 不是 CoordinatorLayout 的直接子级,而是 ExpandedToolbar 的子级,它本身就是一个AppBarLayout

要解决此问题,您需要将 expanded_toolbar.xml 更改为以下内容:

<?xml version="1.0" encoding="utf-8"?>
<merge 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="wrap_content">

<!--<android.support.design.widget.AppBarLayout-->
<!--android:id="@+id/appbar_layout"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:fitsSystemWindows="true">-->

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/expanded_collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="120dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<android.support.v7.widget.Toolbar
android:id="@+id/expanded_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin" />

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

<!--</android.support.design.widget.AppBarLayout>-->
</merge>

如您所见,我通过注释掉了 AppBarLayout。现在,当我们运行该应用程序时,我们会看到以下层次结构:

enter image description here

在这里,您可以看到 ExpandedToolbar 实际上是 AppBarLayoutCoordinatorLayout 的直接子项。这行得通。这是一个视觉效果。我没有实现整个自定义布局 - 仅用于演示目的。

enter image description here

这是更新后的主要布局:

activity_main.xml

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

<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<com.example.customviewtoolbar.ExpandedToolbar
android:id="@+id/expandable_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:toolbarNavColor="?attr/NavigationIconColor"
app:toolbarNavIcon="?attr/NavigationUpArrow"
app:toolbarTitle="My Finances"
app:toolbarTitleColor="?attr/NavigationTitleColor" />

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

<android.support.constraint.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.AppCompatTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="32dp"
android:paddingEnd="0dp"
android:text="@string/finances"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<android.support.v7.widget.AppCompatEditText
android:id="@+id/edit_text"
android:layout_width="0dp"
android:layout_height="56dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title" />

<android.support.v7.widget.AppCompatTextView
android:id="@+id/details"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="DETAILS TODO"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/edit_text" />

<android.support.v7.widget.RecyclerView
android:id="@+id/finances_list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/details" />

<android.support.v7.widget.AppCompatButton
android:id="@+id/button_see_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="See All"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/finances_list"
app:layout_constraintVertical_bias="1.0" />

</android.support.constraint.ConstraintLayout>

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

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

</RelativeLayout>

作为旁注,我从 NestedScrollView 中删除了与 anchor 相关的标签和 android:fillViewport="true",因为它们并不是真正需要的并且阻止了布局工作的检查员。

您总是可以不使用自定义 View ,但我假设您为了方便而需要它。

这是我用于演示目的的 ExpandedToolbar 模型。

ExpandedToolbar.java

public class ExpandedToolbar extends AppBarLayout {
public ExpandedToolbar(Context context) {
super(context);
init();
}

public ExpandedToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.MyToolbar,
0, 0);

try {
String title = a.getString(R.styleable.MyToolbar_toolbarTitle);
((Toolbar) findViewById(R.id.expanded_toolbar)).setTitle(title);
} finally {
a.recycle();
}
}

private void init() {
inflate(getContext(), R.layout.expanded_toolbar, this);
}
}

关于java - 当软键盘可见时,CollapsingToolbarLayout 不折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512896/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com