【问题标题】:Floating Action Button doesn't appear correctly浮动操作按钮未正确显示
【发布时间】:2018-05-09 11:56:40
【问题描述】:

我在Fragment 中的TabLayout 中有一个floating action button

页面加载时,按钮保持如下:

点击“Quilometragem final”字段后,键盘出现,然后我的按钮保持在正确的位置:

如何解决此问题,以便在页面加载时将我的 floating action button 显示在正确的位置?

这是我的布局的 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true">
  <android.support.design.widget.CoordinatorLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="@dimen/common_margin"
        android:layout_marginRight="@dimen/common_margin">

      <!-- another fields -->

      <!-- KM FINAL -->
      <LinearLayout
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginTop="10dp">
        <TextView
            android:text="@string/end_exam_mileage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="25sp"
            android:fontFamily="sans-serif-condensed"
            android:textColor="@color/primary" />
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
          <EditText
              android:id="@+id/txtFinalKM"
              android:fontFamily="sans-serif-condensed"
              android:inputType="number"
              android:hint="@string/end_exam_insert_mileage"
              android:textSize="25sp"
              android:layout_width="match_parent"
              android:layout_height="wrap_content" />
        </android.support.design.widget.TextInputLayout>
      </LinearLayout>
    </LinearLayout>
          <!-- NEXT BUTTON -->
        <com.github.clans.fab.FloatingActionButton
            android:id="@+id/fab_next_information"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_marginRight="@dimen/common_margin"
            android:layout_marginBottom="@dimen/common_margin"
            android:src="@drawable/icon_fab_mini_next"
            android:clickable="true"
            app:fab_shadowColor="#00FFFFFF"
            app:fab_colorNormal="#272B35"
            app:fab_colorPressed="@color/accent"
            app:fab_colorRipple="#272B35" />
  </android.support.design.widget.CoordinatorLayout>
</LinearLayout>

【问题讨论】:

标签: android xamarin.android android-tablayout floating-action-button


【解决方案1】:

感谢 Aswin P Ashok 的评论,我能够修复这个 bug 阅读 this

解决方案是在我的Fragment 中的OnCreateView 中添加以下代码:

_linearLayout.Post(new Runnable(() =>
{
    _linearLayout.RequestLayout();
}));

为什么会这样?

here所说,

发布 requestLayout() 有效,因为依赖关系图是在 onMeasure() 方法中构建的 的 CoordinatorLayout。建立图表一次后, 为每个孩子调用 findAnchorView() 方法。在下一关 在 onMeasure() 中构建图形时,方法 dependsOn() 返回 正确的结果(除非添加了一些新视图,否则不会 工作)并且图形正确构建。它必须在 post() 中调用, 因为在前一个度量/布局之前调用 requestLayout() pass 开始不会导致新的 pass。

【讨论】:

    【解决方案2】:

    将重力改为底部|右

    <com.github.clans.fab.FloatingActionButton
                android:id="@+id/fab_next_information"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|right"
                android:layout_marginRight="@dimen/common_margin"
                android:layout_marginBottom="@dimen/common_margin"
                android:src="@drawable/icon_fab_mini_next"
                android:clickable="true"
                app:fab_shadowColor="#00FFFFFF"
                app:fab_colorNormal="#272B35"
                app:fab_colorPressed="@color/accent"
                app:fab_colorRipple="#272B35" />
    

    你也可以在你的父布局中添加

    android:clipChildren="false"
    android:clipToPadding="false"
    

    防止剪裁

    【讨论】:

    • 什么是剪辑?
    • 剪裁是指某物高于另一物,或者在这种情况下,您的父视图正在剪裁您的 fab 按钮,这意味着一个元素与另一个元素重叠
    • 不错!我会试试这个。
    【解决方案3】:

    试试这个

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="vertical">
    
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:orientation="vertical">
    
                <!-- another fields -->
    
                <!-- KM FINAL -->
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:orientation="vertical">
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="sans-serif-condensed"
                        android:text="end_exam_mileage"
                        android:textSize="25sp"
                        android:textStyle="bold" />
    
                    <android.support.design.widget.TextInputLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">
    
                        <EditText
                            android:id="@+id/txtFinalKM"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:fontFamily="sans-serif-condensed"
                            android:hint="end_exam_insert_mileage"
                            android:inputType="number"
                            android:textSize="25sp" />
                    </android.support.design.widget.TextInputLayout>
                </LinearLayout>
            </LinearLayout>
    
            <com.github.clans.fab.FloatingActionButton
                android:id="@+id/fab_next_information"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|end"
                android:clickable="true"
                android:src="@drawable/ic_message"
                app:fab_colorNormal="#272B35"
                app:fab_colorPressed="@color/accent"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_margin="20dp"
                app:fab_colorRipple="#272B35"
                app:fab_shadowColor="#00FFFFFF" />
    
    
    </RelativeLayout>
    

    【讨论】:

    • FloatingActionButton 不需要在 CoordinatorLayout 中?
    • @perozzo 是的,不需要使用 CoordinatorLayout
    • 您的代码没有 CoordinatorLayout。可以更新一下吗?
    • @perozzo 为什么你需要使用CoordinatorLayout
    • 哦,对不起,我理解错了。我会试试你的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 2016-11-09
    • 2022-06-25
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多