web-dev-qa-db-ja.com

Android GridLayout center horizo​​ntal

中央に配置される2列のGridLayoutを作成しようとしています。

私のデザインは次のとおりです。

<GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:custom="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    custom:rowCount="4"
    custom:columnCount="2"
    Android:orientation="horizontal">
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:gravity="top|left"
        Android:background="#00FF00"
        custom:color="green"
        custom:layout_row="0"
        custom:layout_column="0" />
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:gravity="top|left"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="blue"
        custom:layout_row="0"
        custom:layout_column="1" />
</GridLayout>

そしてそれは次のようになります:

そして、このボタンを中央に配置し、それらの間隔を完全に揃えたいと思います。

出来ますか?

-編集:

また、結果なしでLinearLayoutに入れようとしました:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center"
    Android:orientation="vertical">
    <GridLayout xmlns:custom="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        custom:rowCount="4"
        custom:columnCount="2"
        Android:orientation="horizontal"
        Android:gravity="center"
        Android:layout_gravity="center">
        <TimeTableKeeper.Tile
            Android:layout_width="75dp"
            Android:layout_height="75dp"
            Android:background="#00FF00"
            custom:color="green"
            custom:layout_row="0"
            custom:layout_column="0" />
        <TimeTableKeeper.Tile
            Android:layout_width="75dp"
            Android:layout_height="75dp"
            Android:background="#00FF00"
            custom:color="blue"
            custom:layout_row="0"
            custom:layout_column="1" />
    </GridLayout>
</LinearLayout>
15
Tomasz

グリッドのコンテンツをlayout_width="wrap_content"で水平方向に折り返し、layout_gravitycenterに設定します。

<GridLayout
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_gravity="center"
    // ......
    >
33
razzak

GridLayout documentation から:

GridLayoutの余分なスペースの分布は、重みではなく優先度に基づいています。

(...)

列を引き伸ばすには、その中のすべてのコンポーネントが重力を定義していることを確認してください。

したがって、明らかにlayout_gravityAndroid:layout_gravity="top|center"に設定する必要があります(これはテストしていませんが、ドキュメントからはこれらの行に沿っているはずです)。

6
njzk2

あなたはほとんどそこにいます。私はこれが仕事をすると思う:

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<GridLayout

    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    custom:rowCount="4"
    custom:columnCount="2"

    Android:layout_gravity="center_horizontal"
    Android:orientation="horizontal">
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="green"
        custom:layout_row="0"
        custom:layout_column="0" />
    <TimeTableKeeper.Tile
        Android:layout_width="75dp"
        Android:layout_height="75dp"
        Android:background="#00FF00"
        custom:color="blue"
        custom:layout_row="0"
        custom:layout_column="1" />
</GridLayout>
</FrameLayout>
4
Jazib