Cómo agregar el botón de acción flotante en la parte superior de scrollview
Tengo un botón de acción flotante que me gustaría añadir en la parte superior de un scrollview para que el botón permanece, incluso si se desplaza. Lo quiero en la parte superior de la vista de desplazamiento y en la esquina inferior derecha de la pantalla. ¿Qué combinación de puntos de vista necesito usar para lograr esto?
Aquí está el archivo xml:
- Desplazamiento de TextView en una ScrollView a una subcadena de texto específica
- Cómo obtener el desplazamiento de una vista dentro de un ScrollView?
- Android: agrega dinámicamente una vista de imagen a un ScrollView
- Android: TextView dentro de ScrollView: Cómo limitar la altura
- Mantenga ScrollView de ocupar demasiado altura
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.nhscoding.safe2tell.STORIES" android:background="@color/stor_back"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom" > <com.getbase.floatingactionbutton.FloatingActionButton android:id="@+id/pink_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" fab:fab_icon="@drawable/ic_add" fab:fab_colorNormal="@color/fab_back" fab:fab_colorPressed="@color/fab_pressed_back" android:layout_gravity="end" android:layout_marginBottom="16dp" android:layout_marginRight="16dp"/> </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card1_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title1" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view2" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view1"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card2_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text2" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view3" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view2"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card3_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text3" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="wrap_content" android:layout_height="match_parent"/> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card4_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title4" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="16dp" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card5_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title5" /> </android.support.v7.widget.CardView> </LinearLayout> </ScrollView> </RelativeLayout>
- Manejo de MotionEvent en ScrollView en Android
- Cómo reproducir video de video-view que actualmente se enfoca en la vista de reciclador
- Implementar zoom en scrollView android
- ScrollView ignora el layout_height del niño
- Scrollview puede alojar sólo un hijo directo
- Android, LinearLayout no se desplaza
- Mi listview no rellena el padre
- Captura toda la vista de desplazamiento más grande que la pantalla
Los niños más tarde en un RelativeLayout
tienden a flotar sobre los niños más tempranos en un RelativeLayout
.
(Digo "tienden a" porque las cosas de elevation
Android 5.0 también desempeña un papel, y la relación entre ellos es mal definida)
Por lo tanto, para tener un float FAB sobre un ScrollView
en un RelativeLayout
, asegúrese de que el ScrollView
se define primero en el XML, con el FAB después. Esto no afectará a las reglas X / Y, pero debería tener el FAB aparecer sobre el ScrollView
en el eje Z.
Otra posibilidad, si solo estás soportando Android 5.0+, sería usar android:elevation
sí para elevar el FAB.
prueba esto:
Androide: layout_alignParentRight = "true"
Androide: layout_alignParentBottom = "true"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:fab="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.nhscoding.safe2tell.STORIES" android:background="@color/stor_back"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card1_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title1" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view2" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view1"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card2_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text2" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view3" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view2"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card3_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text3" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="wrap_content" android:layout_height="match_parent" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card4_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title4" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="16dp" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card5_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title5" /> </android.support.v7.widget.CardView> </LinearLayout> </ScrollView> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="bottom" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_margin="10dp"> <com.getbase.floatingactionbutton.FloatingActionButton android:id="@+id/pink_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" fab:fab_icon="@drawable/ic_add" fab:fab_colorNormal="@color/fab_back" fab:fab_colorPressed="@color/fab_pressed_back" android:layout_gravity="end" android:layout_marginBottom="16dp" android:layout_marginRight="16dp" /> </LinearLayout> </RelativeLayout>
Puede usar android.support.design.widget.CoordinatorLayout
como diseño principal. Hacer dos xml uno en el que se puede establecer la barra de desplazamiento o la lista. Otro es el contenedor de los padres que tiene toda la información con su FloatingActionButton
.
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" app:elevation="6dp" app:backgroundTint="@color/colorAccent" app:pressedTranslationZ="12dp" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_add" /> </android.support.design.widget.CoordinatorLayout>
Content_main.xml
Aquí puede poner su ScrollBar. Es bastante fácil.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:gravity="center" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_main" tools:context=".MainActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card1_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title1" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view2" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view1"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card2_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text2" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view3" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius" android:layout_below="@id/card_view2"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card3_title" android:textSize="@dimen/card_title_size" android:gravity="top" /> <TextView android:id="@+id/info_text3" android:layout_marginTop="16dp" android:layout_marginBottom="0dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_width="wrap_content" android:layout_height="match_parent" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="@dimen/card_margin_bottom" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card4_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title4" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view1" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="@dimen/card_margin_top" android:layout_marginBottom="16dp" android:layout_marginLeft="@dimen/card_margin_left" android:layout_marginRight="@dimen/card_margin_right" card_view:cardCornerRadius="@dimen/card_radius"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/card_title_top" android:layout_marginBottom="@dimen/card_title_bottom" android:layout_marginLeft="@dimen/card_title_left" android:layout_marginRight="@dimen/card_title_right" android:text="@string/card5_title" android:textSize="@dimen/card_title_size" android:gravity="top" android:id="@+id/title5" /> </android.support.v7.widget.CardView> </LinearLayout> </ScrollView> </RelativeLayout>
- Cómo abrir un fragmento diferente en recyclerview OnClick
- Obtener la sugerencia actual de `AutoCompleteTextView`