Je souhaite centrer mon LinearLayout dans ScrollView. Lorsque la hauteur de LinearLayout est petite, elle est bien centrée (voir image n ° 1), mais lorsque la hauteur de LinearLayout est supérieure à celle de l'écran, son comportement est étrange. Je ne peux pas voir le haut de LinearLayout (voir image n ° 2) et au bas de ScrollView se trouve un rembourrage énorme. Je ne sais pas ce qui se passe ici. Lorsqu'il y a beaucoup de contenu dans LinearLayout, tout l'écran devrait ressembler à l'image n ° 3.
Voici mon fichier de mise en page:
<?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:background="#cccfff" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:layout_margin="28dp"
Android:background="#ffffff"
Android:orientation="vertical"
Android:paddingBottom="40dp"
Android:paddingLeft="20dp"
Android:paddingRight="20dp"
Android:paddingTop="40dp" >
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="16dp"
Android:src="@drawable/ic_launcher" />
<TextView
Android:id="@+id/tip_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="12dp"
Android:text="Title"
Android:textColor="@color/orange_text"
Android:textSize="@dimen/font_size_medium" />
<TextView
Android:id="@+id/tip_description"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Description description..."
Android:textSize="@dimen/font_size_small" />
</LinearLayout>
</ScrollView>
Vous devez utiliser un LinearLayout horizontal externe. Cela fonctionne pour moi dans la même situation.
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center"
Android:orientation="horizontal" >
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal" >
<TextView
Android:text="@string/your_text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
</LinearLayout>
Vous pouvez utiliser Android:fillViewport="true"
pour centrer le contenu. Quelque chose comme ça:
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true">
<!-- content -->
</ScrollView>
Mettez l'accent sur votre composant d'interface utilisateur le plus haut que vous souhaitez voir
<ImageView
Android:focusable="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="16dp"
Android:src="@drawable/ic_launcher" />
Utilisez simplement ma classe CenteringLinearLayout ci-dessous.
import Android.content.Context
import Android.support.constraint.ConstraintLayout
import Android.util.AttributeSet
import Android.view.View
import Android.widget.LinearLayout
class CenteringLinearLayout: LinearLayout {
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context) : super(context)
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
val parentView = this.parent as View
if (h > parentView.height) {
parentView.post {
val params = parentView.layoutParams as ConstraintLayout.LayoutParams
params.height = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT
parentView.layoutParams = params
}
} else {
val params = parentView.layoutParams
params.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
parentView.layoutParams = params
}
super.onSizeChanged(w, h, oldw, oldh)
}
}
Essayez cela peut satisfaire votre exigence.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#cccfff"
Android:gravity="center"
Android:orientation="vertical" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_margin="10dp"
Android:background="#ffffff"
Android:gravity="center_vertical"
Android:orientation="vertical"
Android:paddingBottom="40dp"
Android:paddingLeft="20dp"
Android:paddingRight="20dp"
Android:paddingTop="40dp" >
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="16dp"
Android:src="@drawable/ic_launcher" />
<TextView
Android:id="@+id/tip_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="12dp"
Android:text="Title" />
<TextView
Android:id="@+id/tip_description"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="biruDescription description..." />
</LinearLayout>
</LinearLayout>
Une ligne de plus dans votre code Java
TextView tip_description = (TextView) findViewById(R.id.tip_description);
tip_description.setMovementMethod(new ScrollingMovementMethod());
Cela fera défiler le contenu de votre description plutôt que la disposition entière.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:gravity="center"
Android:padding="10dp"
Android:background="#cccfff">
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:layout_margin="28dp"
Android:background="#ffffff"
Android:orientation="vertical"
Android:paddingBottom="40dp"
Android:paddingLeft="20dp"
Android:paddingRight="20dp"
Android:paddingTop="40dp" >
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="16dp"
Android:src="@drawable/ic_launcher" />
<TextView
Android:id="@+id/tip_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="12dp"
Android:text="Title"
Android:textColor="@color/orange_text"
Android:textSize="@dimen/font_size_medium" />
<TextView
Android:id="@+id/tip_description"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Description description..."
Android:textSize="@dimen/font_size_small" />
</LinearLayout>
</ScrollView>
</LinearLayout>