【问题标题】:Floating Action Button is positioned wrong on pre lollipop devices浮动操作按钮在棒棒糖前设备上的位置错误
【发布时间】:2015-12-13 10:55:21
【问题描述】:

我有一个奇怪的行为问题:

在任何版本低于 lollipop 的设备或模拟器上,浮动操作按钮和其他浮动在工具栏上的组件(例如 Spinner 的弹出窗口)的位置错误。它们似乎根据 app:elevation 的值移动,但即使 app:elevation="0" 也不会将它们定位为与棒棒糖设备相同的位置。

编辑: 我只是想更好地解释 FAB 的行为。当我在预棒棒糖设备上添加一个海拔标签到工厂时,它的 x 和 y 坐标增加。在棒棒糖设备上,海拔标签对位置没有影响。

编辑 2: 经过一些实验,我发现问题是在棒棒糖之前的设备上布局尺寸增加以绘制阴影。这也增加了可点击区域。这种行为使得不可能为棒棒糖和前棒棒糖设备创建 2 种不同的布局,因为 FAB 的行为和大小是错误的。在棒棒糖设备上,布局是(根据需要)40dp * 40dp,FAB 在其下方的布局上绘制阴影。

布局:

<android.support.v4.widget.DrawerLayout
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="match_parent"
android:fitsSystemWindows="true"
android:id="@+id/id_drawer_layout">

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

    <android.support.v7.widget.Toolbar
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:layout_height="128dp"
        android:layout_width="match_parent"
        android:background="@color/primaryColor"
        android:id="@+id/id_toolbar"
        android:elevation="20dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        <Spinner
            android:layout_marginStart="12dp"
            android:layout_marginTop="62dp"
            android:id="@+id/id_toolbar_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </android.support.v7.widget.Toolbar>

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/id_swipe_refresh_layout"
        android:layout_below="@id/id_toolbar"
        android:layout_height="match_parent"
        android:layout_width="match_parent">

        <android.support.v7.widget.RecyclerView
            android:layout_below="@id/id_toolbar"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:id="@+id/id_filemanager_recycler_view"
            android:background="@android:color/white"/>

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

    <android.support.design.widget.FloatingActionButton
        android:layout_below="@id/id_toolbar"
        android:layout_marginTop="-20dp"
        android:layout_marginStart="16dp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/id_floating_action_button"
        android:src="@drawable/ic_add_white_24dp"
        app:elevation="30dp"
        app:borderWidth="0dp"
        app:fabSize="mini"/>
</RelativeLayout>

<android.support.design.widget.NavigationView
    android:layout_width="288dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@android:color/white"
    android:id="@+id/id_main_navigation_view"
    app:menu="@menu/menu_drawer_main"/>

前棒棒糖

棒棒糖

【问题讨论】:

  • 为什么不创建 2 个布局,一个在 layout-v21 中,一个用于以前的版本。你可以做相应的调整

标签: android material-design android-support-library


【解决方案1】:

将这些行添加到您的 FloatingActionButton 标记中,还将我的代码 sn-p 中的 appBar 更改为您要附加 FloatingActionButton 的布局的 id。

app:layout_anchor="@+id/appBar"
app:layout_anchorGravity="bottom|left|end"

【讨论】:

  • 回答,但遗憾的是它不起作用。晶圆厂仍然放置错误。晶圆厂似乎在高度标签的价值上移动。海拔越高,按钮越向右和向下移动。
【解决方案2】:

我遇到了同样的问题。解决方案是将您的FloatingActionButton 放入android.support.design.widget.CoordinatorLayout

这就是我正在使用的

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|bottom"
        android:layout_margin="16dp"
        android:src="@drawable/ic_add_white_24dp"
        app:elevation="6dp"
        app:fabSize="normal"
        app:pressedTranslationZ="12dp" />
</android.support.design.widget.CoordinatorLayout>

您可以修改此代码以满足您的需要。

【讨论】:

  • 谢谢你的回答我会尽快尝试这个解决方案
  • 确保您的FloatingActionButtonCoordinatorLayout 的直接子代。否则将无法正常工作。
  • 很遗憾这也不起作用。问题是 2 个晶圆厂的布局边界在 2 个版本之间是不同的。另一方面,在棒棒糖设备上,晶圆厂是想要的 40dp*40dp,而在棒棒糖之前的设备上,晶圆厂要大得多,更像是 200dp*200dp。前棒棒糖设备上的晶圆厂图像位于这个太大布局的中间。但是 2 个布局的左角都在正确的位置 -> 两个版本之间只有大小错误。
猜你喜欢
  • 2015-02-26
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多