studio - propiedades scrollview android
sin gravedad para scrollview. cómo hacer contenido dentro de scrollview como centro (6)
Quiero que el contenido dentro de scrollView sea el centro.
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay"
android:layout_gravity="center" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</ScrollView>
Nota: no hay android:gravity
atributo de android:gravity
para scrollvew.
cualquier sol: -
¿Qué tal esto?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
Creo que una solución más elegante sería usar la propiedad android:fillViewport
. Un ScrollView
es un poco diferente en la forma en que trata su contenido (solo puede tener uno), incluso si establece match_parent
( fill_parent
) en ScrollView
, no le dará mucho espacio a su vista de contenido, sino que el comportamiento predeterminado es ScrollView
para envolver el contenido independientemente de lo que especifique para esa vista. Lo que hace android:fillViewport
es decirle a ScrollView
que android:fillViewport
su contenido para llenar la ventana gráfica ( http://developer.android.com/reference/android/widget/ScrollView.html#attr_android:fillViewport ). Entonces, en este caso, su LinearLayout
se LinearLayout
para que coincida con la ventana LinearLayout
y si la altura va detrás de la ventana gráfica, entonces será desplazable, ¡que es exactamente lo que quiere!
La respuesta aceptada no funcionará correctamente cuando el contenido se extienda más allá de ScrollView
porque aún centrará primero la vista de contenido, lo que cortará una parte de la vista, y ScrollView
centrado en otro diseño funcionará pero no se sentirá bien. , además creo que también dará como resultado un error de pelusa (padre inútil o algo así).
Pruebe algo como esto:
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay"
android:fillViewport="true">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check" />
</LinearLayout>
</ScrollView>
Solo recuerda que la razón por la que ahora se centra aquí es debido a la android:gravity
en LinearLayout
ya que ScrollView
LinearLayout
así que LinearLayout
en cuenta dependiendo de lo que agregas al diseño.
Otra buena lectura en ScrollView
aunque no se trata de centrar, sino de fillViewport
es http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
Para @Patrick_Boss - lo que detuvo el contenido de corte en mi aplicación fue cambiar la gravedad y la distribución_gravedad a center_horizontal para LinearLayout.
Me funcionó ... pero no estoy seguro si funcionará para ti.
Modificación de la respuesta de @Ghost -
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
Tuve el mismo problema y finalmente lo descubrí. Esto es para una vista de ScrollView
vertical.
Coloque su ScrollView
dentro de RelativeLayout
y céntrelo en RelativeLayout
. Para que esto funcione, tu ScrollView
debería tener
android:layout_height="wrap_content"
Así es como debería verse el código final:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b1"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b2"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b3"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
Una cosa a considerar es qué NO establecer. Asegúrese de que los controles de su hijo, especialmente los controles EditText, no tengan configurada la propiedad RequestFocus. Esta puede ser una de las últimas propiedades interpretadas en el diseño y anulará la configuración de gravedad en sus padres (el diseño o ScrollView).
Use este atributo en ScrollView
android:fillViewport="true"
Ejemplo
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay"
android:fillViewport="true"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--Your Code goes here-->
</RelativeLayout>
</ScrollView>
Asegúrese de usar Single Child en ScrollView como en el ejemplo anterior que es Relativelayout.