web-dev-qa-db-fra.com

Centrer le contenu en mode défilement

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.

image # 1
image # 2
image # 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>
13
Egis

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>
24

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>
29
yaircarreno

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" />
2
Jitender Dev

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)
    }
}
0
Salih

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.

0
Biraj Zalavadia
<?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>
0
Hariharan