在向Recycler视图添加一个元素时,FAB与AppBarLayout对齐

时间:2017-07-13 18:25:42

标签: android layout material-design floating-action-button

我在基于CoordinatorLayout创建布局时遇到问题。布局非常简单,它包含工具栏,RecyclerView,TextView(当列表中没有元素时替换回收器视图)和浮动操作按钮。这是代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/mainCoordinatorLayout"
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"
tools:context="com.steveq.qroclock_20.presentation.activities.MainActivity"
android:orientation="vertical">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize">
    <android.support.v7.widget.Toolbar
        android:id="@+id/mainToolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:elevation="4dp"
        android:fitsSystemWindows="true">
        <TextView
            android:id="@+id/toolbarTitleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:text="@string/app_name"
            android:textSize="24sp"
            fontPath="fonts/SourceSansPro-Bold.ttf"
            android:textColor="@color/material_teal_800"/>
    </android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView
    android:id="@+id/alarmsRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"
    android:padding="4dp"
    android:visibility="visible"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

<TextView
    android:id="@+id/emptyRecyclerViewReplacement"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:visibility="gone"
    android:text="no alarms" />


<android.support.design.widget.FloatingActionButton
    android:id="@+id/addAlarmFab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/plus_vec"
    android:layout_margin="16dp"
    app:layout_anchor="@id/alarmsRecyclerView"
    app:layout_anchorGravity="bottom|right|end"
    android:clickable="true"

问题在于,当我启动应用程序并将项目添加到回收站视图时,它将FAB与工具栏对齐(AppBarLayout?)。当我添加另一个项目时,FAB会到达目的地。下面我还添加了图片的外观。你对这个问题的原因有什么看法吗?

此致 亚当

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

您的XML布局不完整,但乍一看,我不确定您是否需要在FloatingActionButton中设置锚点。您可以尝试替换

app:layout_anchor="@id/alarmsRecyclerView"
app:layout_anchorGravity="bottom|right|end"

android:layout_gravity="bottom|end"

答案 1 :(得分:0)

很好,谢谢。我还调查了当我以编程方式使用文本视图切换回收器视图时,某些属性layout_anchorGravity缺失但是以下代码无法解决问题:

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) 
alarmFab.getLayoutParams();
params.setAnchorId(emptyTextView.getId());
params.gravity = Gravity.BOTTOM | GravityCompat.END;
alarmFab.setLayoutParams(params);
alarmsRecyclerView.setVisibility(View.GONE);
emptyTextView.setVisibility(View.VISIBLE);

布局实际上已完成,只缺少结束标记。