如何在协调器布局中准确地将视图放在中心?

时间:2016-08-17 07:43:19

标签: android android-recyclerview android-coordinatorlayout

我有一个带有Recycler视图和textview的片段,当没有数据可用时会显示。片段托管在具有协调器布局的活动中。现在的问题是文本视图并不完全位于屏幕的中心,但是当工具栏崩溃时它就位于中心。我希望textview完全在中心。怎么做。

when tolbar is normal in [![when toolbar is collapsed状态] 2] 2

活动布局

<android.support.design.widget.CoordinatorLayout 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"
    tools:context=".common.ui.BaseActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:elevation="0dp">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">
        </android.support.v7.widget.Toolbar>


    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/home_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

<FrameLayout
    android:id="@+id/navigation_view"
    android:layout_width="280dp"
    android:layout_height="match_parent"
    android:layout_gravity="left" />

FRAGMENT==><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_favourite">
</android.support.v7.widget.RecyclerView>
    <TextView
        android:id="@+id/empty_text_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:visibility="gone"
        android:padding="@dimen/margin"
        android:text="@string/empty_string_fav"
        android:layout_centerInParent="true" />
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"
        android:id="@+id/progress_bar"/>
</RelativeLayout>`

5 个答案:

答案 0 :(得分:1)

只需将其添加到视图的属性中:

    android:layout_gravity="center" 

答案 1 :(得分:0)

尝试在textview上添加:

android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
希望它有所帮助。

答案 2 :(得分:0)

这里试试这个:

<FrameLayout 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">
<LinearLayout
        android:id="@+id/llEmpty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="vertical">
<TextView
        android:id="@+id/empty_text_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:visibility="gone"
        android:padding="@dimen/margin"
        android:text="@string/empty_string_fav"
        android:gravity="center"/>
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:visibility="gone"
        android:id="@+id/progress_bar"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_favourite">
</android.support.v7.widget.RecyclerView>


</FrameLayout>

答案 3 :(得分:0)

尝试使用framelayout。

<FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center">

      <ProgressBar
          android:id="@+id/progressBar"
          android:layout_width="40dp"
          android:layout_height="40dp"
          android:layout_gravity="center" />

      <TextView
          android:id="@+id/empty"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:textColor="@color/black" />
</FrameLayout> 

答案 4 :(得分:-1)

您可以做的一件非常简单的事情就是将底部填充添加到textview“empty_text_tv”。在您的情况下,您可以将其设置为?attr / actionBarSize。至少这样,当工具栏未折叠时,文本将居中。它看起来好多了。

如果您需要将textview始终居中,则必须将addOnOffsetChangedListener添加到AppBarLayout。在这个监听器的'onOffsetChanged'方法中,取参数'verticalOffset'并将textview的translationY设置为verticalOffset / 2(可能带有一些委托/事件订阅技术)。