(折叠)工具栏标题在Snackbar外观后重置其位置

时间:2016-09-23 13:27:19

标签: android android-design-library android-collapsingtoolbarlayout android-appbarlayout android-snackbar

我有一个以CollapsingToolbarLayoutCoordinatorLayout为根元素的布局。 每当Snackbar中显示activitytitle的{​​{1}}将其位置重置为toolbar的默认展开标题位置,即使CollapsingToolbar toolbar 1}}没有(完全)扩展。

第二张图片显示,无论title是否展开,toolbar都已修复。

Fully expanded

After Snackbar was shown

当我在snackbar.show()activity中拨打fragment时结果相同。

我的布局结构如下所示:

<CoordinatorLayout>
<AppBarLayout>
    <CollapsingToolbarLayout>
        <Toolbar />
        <TabLayout />
    </CollapsingToolbarLayout>
</AppBarLayout>
<ViewPager />
<FloatingActionButton />

我使用appcompat and design library (v24.2.1)的最新依赖项。 我希望有足够的信息,并且有人知道如何解决这个问题:P

修改 同样在模板中,当您启动新项目并选择Scrolling activity时,调用snackbar.show()时会出现同样的问题。所以这是一个图书馆问题。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,这是一个库问题。在最新版本的设计支持库(25.0.0)上已修复。在build.gradle上使用以下命令:

compile 'com.android.support:design:25.0.0'

希望这有帮助。

答案 1 :(得分:0)

我知道一种解决此问题的方法。

将您的 CoordinatorLayout 放入FrameLayout中。在显示小吃店时,而不是传递coordinatorlayout的ID而是传递FrameLayout的ID。

<FrameLayout     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:id="@+id/rel_full"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>



Snackbar.make(findViewById(R.id.rel_full), "SNACKBAR",Toast.LENGTH_SHORT).show();

答案 2 :(得分:0)

// Try This (Kotlin) :
    val collapsingToolbar = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
            collapsingToolbar.title = " "
            val appBarLayout = findViewById<AppBarLayout>(R.id.appbar)
            appBarLayout.setExpanded(true)
            appBarLayout.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener {
                var isShow = false
                var scrollRange = -1
                @SuppressLint("DefaultLocale")
                override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) {
                    if (scrollRange == -1) {
                        scrollRange = appBarLayout.totalScrollRange
                    }
                    if (scrollRange + verticalOffset == 0) {
                        collapsingToolbar.title = "YOUR_TITLE" 
                        isShow = true
                    } else if (isShow) {
                        collapsingToolbar.title = " "
                        isShow = false
                    }
                }
            })