【问题标题】:When centering vertically, how to account for action bar?垂直居中时,如何考虑操作栏?
【发布时间】:2016-03-21 02:14:42
【问题描述】:

我的居中正确,正如您在查看 content_main.xml 设计选项卡时看到的那样,

但是,当您查看带有操作栏的 activity_main.xml 设计时,虽然它仍然在应用程序中居中,但它并没有在空白处居中,这是我更喜欢的。关于如何考虑操作栏的任何建议?如果可能,最好在 XML 中。

这是我的 XML

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 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:id="@+id/voting_layout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin"
              android:orientation="vertical"
              android:layout_gravity="fill_vertical|center"
              android:configChanges="orientation|screenSize"
              android:screenOrientation="nosensor"
              tools:context="com.gesslar.threshvote.MainActivity"
              android:background="@color/colorFaded"
              app:layout_behavior="@string/appbar_scrolling_view_behavior"
              tools:showIn="@layout/activity_main">

        <TextView android:id="@+id/textStatusMessage"
                  android:textColor="@color/colorText"
                  android:textAppearance="?android:attr/textAppearanceLarge"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:gravity="center" />

        <ImageButton android:id="@+id/buttonVote"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:clickable="false"
                     android:src="@drawable/ic_vote_button_image"
                     android:paddingBottom="@dimen/activity_vertical_margin"
                     android:paddingLeft="@dimen/activity_horizontal_margin"
                     android:paddingRight="@dimen/activity_horizontal_margin"
                     android:paddingTop="@dimen/activity_vertical_margin"
                     android:background="@android:color/transparent"
                     android:scaleType="fitCenter"
                     android:onClick="onVotePressed"
                     android:layout_gravity="center_horizontal|center_vertical"
                     android:adjustViewBounds="true"
                     android:contentDescription="@string/desc_vote_button" />

        <TextSwitcher android:id="@+id/textCountdown"
                      android:gravity="center"
                      android:layout_gravity="center_horizontal"
                      android:textColor="@color/colorText"
                      android:textAppearance="?android:attr/textAppearanceLarge"
                      android:textSize="@dimen/countdown"
                      android:includeFontPadding="false"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content" />

        <ProgressBar android:id="@+id/loadingBar"
                     style="@style/Widget.AppCompat.ProgressBar"
                     android:layout_gravity="end"
                     android:layout_width="fill_parent"
                     android:layout_height="wrap_content"
                     android:visibility="invisible"
                     android:indeterminate="true"/>
    </LinearLayout>

【问题讨论】:

    标签: android layout alignment


    【解决方案1】:

    那个 xml 对我有用:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:id="@+id/voting_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="fill_vertical|center"
        android:background="@color/colorFaded"
        android:configChanges="orientation|screenSize"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:screenOrientation="nosensor"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="com.gesslar.threshvote.MainActivity"
        tools:showIn="@layout/activity_main">
    
        <TextView
            android:id="@+id/textStatusMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/colorText" />
    
        <ImageButton
            android:id="@+id/buttonVote"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:adjustViewBounds="true"
            android:background="@android:color/transparent"
            android:clickable="false"
            android:contentDescription="@string/desc_vote_button"
            android:onClick="onVotePressed"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_vote_button_image" />
    
        <TextSwitcher
            android:id="@+id/textCountdown"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/buttonVote"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:includeFontPadding="false"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/colorText"
            android:textSize="@dimen/countdown" />
    
        <ProgressBar
            android:id="@+id/loadingBar"
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/textCountdown"
            android:layout_gravity="end"
            android:indeterminate="true"
            android:visibility="invisible" />
    </RelativeLayout>
    

    但您需要在设备或模拟器上运行它。 Android Studio 预览显示错误。关键行是app:layout_behavior="@string/appbar_scrolling_view_behavior"

    编辑
    您还需要使用RelativeLayout - 它支持良好的父母居中。在 LinearLayout 中,只有当您的 ImageView 为 match_parent 时,您才能将图像居中。

    【讨论】:

    • 我已更新以包含我的 XML,我应该首先完成。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多