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?
Après quelques recherches, je n'ai pas réussi à trouver un moyen de faire ce travail, donc à la fin j'ai fait ceci:
Android:layout_gravity="center"
.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);
}
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
Android:layout_gravity="center"
fonctionne très bien. Et supprimez votre FrameLayout, c'est redondant.
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:
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>
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.
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>