FrameLayout
を含むフラグメントを膨らませるCoordinatorLayout
の中にRecyclerView
があります。問題は、RecyclerView
を読み込むときにプログレスバーを表示することですが、プログレスバーは常に画面の上部のToolbar
の下にあります。 gravity
またはcenterInParent
を設定してさまざまなレイアウトを試しましたが、どれも機能しませんでした。これを達成する方法はありますか?
いくつかの研究の後、私はこの仕事をする方法を見つけることができなかったので、結局私はこれをしました:
Android:layout_gravity="center"
_を使用して、進行状況バーをCoordinatorLayout内に配置します。アクティビティで、進行状況バーを表示/非表示にする2つの方法を作成します。
_public void showProgress() {
progressBar.setVisibility(View.VISIBLE);
}
public void hideProgress() {
progressBar.setVisibility(View.INVISIBLE);
}
_
フラグメントでは、getActivity()
を介して上記のアクティビティの参照を取得し、それを実際のアクティビティにキャストし、必要なメソッドを呼び出します。
_context = getActivity();
((MainActivity)context).showProgress();
_
編集:これはサポートライブラリ23.1.1で修正されているようです
Android:layout_gravity="center"
うまく動作します。 FrameLayoutを削除すると、冗長になります。
ビューを別のビューの中央に配置する場合は、すべての側面に制約を追加する必要があります。
app:layout_constraintBottom_toBottomOf="@id"
app:layout_constraintLeft_toLeftOf="@id"
app:layout_constraintRight_toRightOf="@id"
app:layout_constraintTop_toTopOf="@id"
以下の例では、TextViewを制約レイアウトの中央に配置しました。
<?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>
結果:
私のようなビューを作成しました:
<?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>
CoordinatorLayoutをRelativeLayout内に配置し、このRelativeLayout内にプログレスバーを追加します。 progressbarのCenterInParentをtrueにします。必要に応じて、progressbarをGone/Visibleにします。
RelativeLayout内でFrameLayoutを使用し、CenterInParentプロパティをプログレスバーに設定します。
<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>