web-dev-qa-db-fra.com

Est-il possible de centrer une disposition / vue à l'intérieur de CoordinatorLayout?

J'ai un FrameLayout à l'intérieur CoordinatorLayout pour gonfler mes fragments qui contiennent RecyclerView. Le fait est que je veux afficher une barre de progression lors du chargement de RecyclerView, mais la barre de progression est toujours en haut de l'écran sous Toolbar. J'ai essayé différentes dispositions, en définissant gravity ou centerInParent mais aucune n'a fonctionné. Existe-t-il un moyen d'y parvenir?

39
Hải Nguyễn

Après quelques recherches, je n'ai pas réussi à trouver un moyen de faire ce travail, donc à la fin j'ai fait ceci:

  1. Placez la barre de progression à l'intérieur de CoordinatorLayout avec Android:layout_gravity="center".
  2. Dans l'activité, faites 2 méthodes pour afficher/masquer la barre de progression:

    public void showProgress() {
          progressBar.setVisibility(View.VISIBLE);
    }
    
    public void hideProgress() {
          progressBar.setVisibility(View.INVISIBLE);
    }
    
  3. Dans le fragment, obtenez une référence de l'activité ci-dessus via getActivity(), convertissez-la en l'activité réelle et appelez la méthode nécessaire.

    context = getActivity();
    ((MainActivity)context).showProgress();
    

EDIT: cela semble être corrigé dans la bibliothèque de support 23.1.1

8
Hải Nguyễn
    Android:layout_gravity="center" 

fonctionne très bien. Et supprimez votre FrameLayout, c'est redondant.

51
Defuera

Si vous allez centrer une vue à l'intérieur d'une autre, vous devez ajouter des contraintes à tous les côtés:

    app:layout_constraintBottom_toBottomOf="@id"
    app:layout_constraintLeft_toLeftOf="@id"
    app:layout_constraintRight_toRightOf="@id"
    app:layout_constraintTop_toTopOf="@id"

Pour l'exemple ci-dessous, j'ai simplement centré une TextView au milieu d'une disposition de contrainte.

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout 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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
            Android:text="This is a centered View"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

</Android.support.constraint.ConstraintLayout>

Le résultat:

centered view in coordinator layout

3
Dimas Mendes

J'ai créé My View Like:

<?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:wheel="http://schemas.Android.com/tools"
    Android:id="@+id/main_content"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/order_list_app_bar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/order_list_collapsing_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|enterAlways">

            <RelativeLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:padding="@dimen/padding_normal">

                <TextView
                    Android:id="@+id/order_list_outstanding_amount"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_alignTop="@Android:id/icon"
                    Android:layout_margin="@dimen/margin_normal"
                    Android:layout_marginLeft="@dimen/margin_high"
                    Android:layout_toRightOf="@Android:id/icon"
                    Android:text="@string/format_outstanding_amout"
                    Android:textColor="@Android:color/white"
                    Android:textSize="@dimen/font_large" />
            </RelativeLayout>
        </Android.support.design.widget.CollapsingToolbarLayout>
    </Android.support.design.widget.AppBarLayout>


        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/order_list_recycler_view"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

        </Android.support.v7.widget.RecyclerView>

        <Android.support.design.widget.FloatingActionButton
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="bottom|right"
            Android:layout_margin="16dp"
            Android:src="@Android:drawable/ic_input_add"
            app:layout_anchor="@id/order_list_recycler_view"
            app:layout_anchorGravity="bottom|right|end" />

        <include
            Android:id="@+id/order_list_empty_view"
            layout="@layout/empty_view"></include>

    <com.pnikosis.materialishprogress.ProgressWheel
        Android:id="@+id/progress_wheel"
        Android:layout_width="80dp"
        Android:layout_height="80dp"
        Android:layout_gravity="center"
        wheel:matProg_barColor="@color/colorAccent" />
</Android.support.design.widget.CoordinatorLayout>

enter image description here

2

Mettez le CoordinatorLayout dans RelativeLayout et ajoutez la barre de progression dans ce RelativeLayout. Définissez CenterInParent pour la barre de progression sur true. Rendre la barre de progression disparue/visible selon les besoins.

1
Swapnil Chaudhari

Utilisez FrameLayout dans RelativeLayout et définissez la propriété CenterInParent sur la barre de progression.

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <FrameLayout
        Android:id="@+id/myFrameLyt"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

    </FrameLayout>

    <ProgressBar
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true" />

</RelativeLayout>
0
Android Team