web-dev-qa-db-ja.com

CoordinatorLayout内のレイアウト/ビューを中央に配置することはできますか?

FrameLayoutを含むフラグメントを膨らませるCoordinatorLayoutの中にRecyclerViewがあります。問題は、RecyclerViewを読み込むときにプログレスバーを表示することですが、プログレスバーは常に画面の上部のToolbarの下にあります。 gravityまたはcenterInParentを設定してさまざまなレイアウトを試しましたが、どれも機能しませんでした。これを達成する方法はありますか?

39
Hải Nguyễn

いくつかの研究の後、私はこの仕事をする方法を見つけることができなかったので、結局私はこれをしました:

  1. _Android:layout_gravity="center"_を使用して、進行状況バーをCoordinatorLayout内に配置します。
  2. アクティビティで、進行状況バーを表示/非表示にする2つの方法を作成します。

    _public void showProgress() {
          progressBar.setVisibility(View.VISIBLE);
    }
    
    public void hideProgress() {
          progressBar.setVisibility(View.INVISIBLE);
    }
    _
  3. フラグメントでは、getActivity()を介して上記のアクティビティの参照を取得し、それを実際のアクティビティにキャストし、必要なメソッドを呼び出します。

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

編集:これはサポートライブラリ23.1.1で修正されているようです

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

うまく動作します。 FrameLayoutを削除すると、冗長になります。

51
Defuera

ビューを別のビューの中央に配置する場合は、すべての側面に制約を追加する必要があります。

    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>

結果:

centered view in coordinator layout

3
Dimas Mendes

私のようなビューを作成しました:

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

CoordinatorLayoutをRelativeLayout内に配置し、このRelativeLayout内にプログレスバーを追加します。 progressbarのCenterInParentをtrueにします。必要に応じて、progressbarをGone/Visibleにします。

1

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>
0
Android Team