FloatingActionButton 可见一段时间,即使可见性设置为消失
FloatingActionButton visible for sometime even if visibility is set to gone
我的 LinearLayout 中有一个 FAB (FloatingActionButton)。我希望隐藏 LinearLayout,即首先将可见性设置为消失,然后在单击菜单按钮时它应该可见。一切正常,但 FAB 在隐藏自身之前会保持可见一段时间。我尝试了从更改 FAB 的可见性到使用 hide() 和 show() 的所有方法,但没有任何效果。
我得到了以下链接,但由于某些原因它们对我不起作用。
我的activity_main.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.wolfarts.checklist2.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
android:paddingTop="24dp"
android:theme="@style/MyToolbarStyle">
<Spinner
android:id="@+id/spinner_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Base.TextAppearance.AppCompat.Title"
android:visibility="gone"/>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/emptyStateView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:src="@drawable/emptystatebag"
android:layout_marginTop="-30dp"
android:layout_gravity = "center"
android:layout_height="170dp"
android:layout_width="300dp"/>
<TextView
android:paddingTop="8dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:gravity = "center"
android:text="Nothing here. Try Adding Something."
android:textColor="#B8B8B8"
android:textSize="18sp"/>
</LinearLayout>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/maincontainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<LinearLayout
android:id="@+id/toolbarContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="72dp"
android:paddingStart="72dp"
android:paddingRight="18dp"
android:paddingEnd="18dp"
android:paddingBottom="80dp"
android:visibility="gone"
android:elevation="4dp"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<android.support.design.widget.TextInputLayout
android:id="@+id/username_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="#B3FFFFFF"
android:layout_gravity="center_vertical">
<EditText
android:id="@+id/taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="35sp"
android:maxLines="1"
android:hint="Item Name"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
<com.wolfarts.checklist2.CustomRecyclerView
android:id="@+id/taskListRecyclerView"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:paddingLeft="16dp"
android:clickable="true"
android:src="@drawable/ic_done_white_24dp"
app:layout_anchor="@id/toolbarContent"
app:layout_anchorGravity="bottom|right|end"
app:backgroundTint="@color/orange"
android:visibility="gone"
app:elevation="8dp"/>
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/navDrawer"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="left|start">
<ListView
android:id="@+id/navList"
android:paddingTop="24dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#ffeeeeee"/>
</LinearLayout>
这是 FAB 中的错误吗?
你试过这个吗?:
删除锚点似乎会影响 FAB 的 setVisibility。
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setAnchorId(View.NO_ID);
p.width = 0;
p.height = 0;
fab.setLayoutParams(p);
fab.setVisibility(View.GONE);
我遇到了同样的问题,浮动操作按钮在隐藏之前显示了一段时间。你应该做的第一件事是移除锚点 gravity ,锚点并在布局中将其高度和宽度设置为 0。
当你想让它可见时,像这样以编程方式设置高度、宽度、锚点、锚点重力:
CoordinatorLayout.LayoutParams p = new CoordinatorLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
p.setAnchorId(R.id.appbar);
p.anchorGravity = Gravity.BOTTOM|Gravity.END|Gravity.RIGHT;
fab.setLayoutParams(p);
fab.setVisibility(View.VISIBLE);
我的 LinearLayout 中有一个 FAB (FloatingActionButton)。我希望隐藏 LinearLayout,即首先将可见性设置为消失,然后在单击菜单按钮时它应该可见。一切正常,但 FAB 在隐藏自身之前会保持可见一段时间。我尝试了从更改 FAB 的可见性到使用 hide() 和 show() 的所有方法,但没有任何效果。
我得到了以下链接,但由于某些原因它们对我不起作用。
我的activity_main.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.wolfarts.checklist2.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
android:paddingTop="24dp"
android:theme="@style/MyToolbarStyle">
<Spinner
android:id="@+id/spinner_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Base.TextAppearance.AppCompat.Title"
android:visibility="gone"/>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/emptyStateView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:src="@drawable/emptystatebag"
android:layout_marginTop="-30dp"
android:layout_gravity = "center"
android:layout_height="170dp"
android:layout_width="300dp"/>
<TextView
android:paddingTop="8dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:gravity = "center"
android:text="Nothing here. Try Adding Something."
android:textColor="#B8B8B8"
android:textSize="18sp"/>
</LinearLayout>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/maincontainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<LinearLayout
android:id="@+id/toolbarContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="72dp"
android:paddingStart="72dp"
android:paddingRight="18dp"
android:paddingEnd="18dp"
android:paddingBottom="80dp"
android:visibility="gone"
android:elevation="4dp"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<android.support.design.widget.TextInputLayout
android:id="@+id/username_text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="#B3FFFFFF"
android:layout_gravity="center_vertical">
<EditText
android:id="@+id/taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="35sp"
android:maxLines="1"
android:hint="Item Name"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
<com.wolfarts.checklist2.CustomRecyclerView
android:id="@+id/taskListRecyclerView"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:paddingLeft="16dp"
android:clickable="true"
android:src="@drawable/ic_done_white_24dp"
app:layout_anchor="@id/toolbarContent"
app:layout_anchorGravity="bottom|right|end"
app:backgroundTint="@color/orange"
android:visibility="gone"
app:elevation="8dp"/>
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/navDrawer"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="left|start">
<ListView
android:id="@+id/navList"
android:paddingTop="24dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#ffeeeeee"/>
</LinearLayout>
这是 FAB 中的错误吗?
你试过这个吗?:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setAnchorId(View.NO_ID);
p.width = 0;
p.height = 0;
fab.setLayoutParams(p);
fab.setVisibility(View.GONE);
我遇到了同样的问题,浮动操作按钮在隐藏之前显示了一段时间。你应该做的第一件事是移除锚点 gravity ,锚点并在布局中将其高度和宽度设置为 0。
当你想让它可见时,像这样以编程方式设置高度、宽度、锚点、锚点重力:
CoordinatorLayout.LayoutParams p = new CoordinatorLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
p.setAnchorId(R.id.appbar);
p.anchorGravity = Gravity.BOTTOM|Gravity.END|Gravity.RIGHT;
fab.setLayoutParams(p);
fab.setVisibility(View.VISIBLE);