工具栏位于Appbar顶部 - CoordinatorLayout

时间:2016-02-10 22:43:56

标签: android android-toolbar android-coordinatorlayout android-appbarlayout

我一直在与AppBarLayout / Toolbar / CoordinatorView进行斗争。希望Toolbar 向上滚动, ,并在向下滚动时立即返回(与大多数阅读应用一样,g +也是一个示例)。但是,这就是我得到的:

正常:

Normal

小卷轴

A little scroll

完整滚动:

Everything scrolled

这是我的代码:

<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:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="main.MainActivity">

    <android.support.design.widget.AppBarLayout
    android:id="@+id/id_appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
        android:id="@+id/id_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
        android:title="Hello World"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

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


    <include layout="@layout/main__activitycontent"/>

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

main__activitycontent

<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="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="main.MainActivity"
tools:showIn="@layout/main__activity">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/text_margin"
    android:text="@string/large_text"/>

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

我一直在阅读很多博客文章,但他们的配置似乎都不适合我。滚动向上/向下滚动显示的隐藏工作正常,只有Toolbar在appbar上移动。检查Android视图层次结构我看到Toolbar位于深蓝色appbar上方,并且它们一起向上移动。

编辑1

fitsSytemWindows=true移除CoordinatorLayout会导致预期的行为,但无论CoordinatorLayout的bg颜色如何,appbar都会变为白色:

enter image description here

我的猜测是,行为实际上并没有改变,发生的事情是它不再覆盖appbar,因此工具栏不会覆盖它。

编辑2

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>

</resources>

编辑3

package main;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import com.ee.oef.refactor.R;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main__activity);
    Toolbar toolbar = (Toolbar) findViewById(R.id.main__toolbar);
    setSupportActionBar(toolbar);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main__menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

1 个答案:

答案 0 :(得分:11)

问题在于:

app:layout_scrollFlags="scroll|enterAlwaysCollapsed"

您可以将其添加到CollapsingToolbarLayoutenterAlwaysCollapsed ,这是CollapsingToolbarLayout而不是Toolbar的良好做法。

更新:我在布局和ID中看到了一些问题。

例如,不确定你是否看到过,但我会解释一下。首先,Toolbar的id id_toolbaronCreate中是:< / p>

Toolbar toolbar = (Toolbar) findViewById(R.id.main__toolbar);

所以,只需将其更改为:

<android.support.v7.widget.Toolbar
            android:id="@+id/main__toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

P.s:我刚刚删除了标题和Scrollflag标题来自 Manifest - &gt; android:label ,您需要对其进行更改。(如果您想更改它,请以编程方式进行更改。)

  

并在向下滚动时立即返回(与大多数阅读应用程序一样,g +是   一个例子)。

只需将其添加到Toolbar

即可
app:layout_scrollFlags="scroll|enterAlways"

最后,在这里你可以看到我对这个问题的答案:https://stackoverflow.com/a/35241363/4409113

我们有:

enter image description here

更新:我没有使用:

android:fitsSystemWindows="true"

也在CoordinatorLayout。你可以看到这里的例子:

https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml

<强>更新 要解决白色工具栏问题,请在values-v21 / styles.xml:

上设置
<item name="android:statusBarColor">@color/colorPrimaryDark</item>

这给出了适当的行为和外观。