ボタンをRelativeLayoutの中央に配置できますか?


174

相対レイアウトでボタンを中央に配置しようとしていますが、これは可能ですか?私は重力と向きの関数を試しましたが、何もしません。


1
言語?フレームワーク?OS?
アーノルドスペンス

3
@アーノルド・スペンス:あなたは私を24秒で打ちました:)
Nippysaurus

3
申し訳ありませんが、スタックオーバーフローを使用するのは初めてです。はい、Android向けに開発しています。=)
アルカディア

7
問題ありません。適切なタグを付けると、適切な人々の注意がより早く得られます。修正済み:)
アーノルドスペンス

8
思いやりがあるためアーノルドスペンスに+1。SOの一部の人々は、単に「新しい」という理由でOPを口頭で破壊したでしょう。
Subby 2014年

回答:


370

試す

android:layout_centerHorizontal="true"

まさにこのように、それは私にとってはうまくいきます:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

5
あなたの幅にmatch_parentがある場合、私は動作しません。
Ghoti

2
幅にmatch_parentがある場合、すでに水平方向の中央に配置されています。
ataulm

103

相対レイアウトにはCENTER_IN_PARENTを使用できます。

android:layout_centerInParent="true"RelativeLayoutの中央に配置する要素に追加します


これは、水平方向と垂直方向の中央に配置され、 'bout layout_centerHorizo​​ntal = true
user3076750

37

アルカディア、以下のコードを試してみてください。探している結果を得るにはいくつかの方法がありますが、これは簡単な方法の1つです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

RelativeLayout自体の重力を設定すると、その中に配置されているすべてのオブジェクトに影響します。この場合、それは単なるボタンです。もちろん、ここでは任意の重力設定を使用できます(center_horizo​​ntal、top、rightなど)。

以下のコードも使用できます。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>

1
ありがとう。ただし、複数のボタンがあり、1つだけ中央に配置したい場合は、どうすればよいでしょうか。最初のコードは、すべてを親relativelayout内の中央に配置します。また、ボタンを行の上部に中央揃えするにはどうすればよいですか?
アルカディア

2番目の例を使用し、中央に配置したいボタンにのみcenterInParentを追加します。また、centerHorizo​​ntalとlayout_alignParentTopを使用して上に揃え、水平方向の中央に配置することもできます。あなたが正確に何を達成しようとしているのか、私はもっと良い例をあげることができます。
Kevin Coppock

私はAndroid開発の研究をやっと始めて、やりたいことを行うために物事を操作する方法を完全に理解しようとしています。基本的に私は物事をピクセルに揃えないようにしたいと思います。なぜなら、画像が異なるスクリーンタイプ/解像度で非常に異なって見える可能性があるからです。ただし、重力コマンドを使用すると、すべてがそれに続きます。ignoreGravityを使用してボタンの重力を無効にしてみましたが、機能しませんでした。これは非常にトリッキーです。
アルカディア

ええ、それは間違いなくできます。特定のレイアウトを行う方法はたくさんあります。最善の方法は、頭の中でそれを思い通りにスケッチして、そこから移動することです。:このクイックチュートリアルでは、いくつかあまりにも役立つことdeveloper.android.com/resources/tutorials/views/...
ケビンCoppock

ええ、私は実際にそのチュートリアルをやっていた。私はそれぞれのチュートリアルを進めて、それらを完全に操作する方法を学びます。そうでなければ、それぞれの違いを理解できません。
アルカディア

25

要約

追加:

android:layout_centerInParent="true"

以下の属性のいずれかがビューにも設定されている場合、RelativeLayoutでのみ機能します。

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

子ビューを親ビューに揃えます。「中心」は、選択した配置の軸に基づいています。

左/右->垂直

上/下->水平

ビュー内の子/コンテンツの重力の設定:

android:gravity="center"

配置が設定されていない場合は、いずれにしても、親ビュー内で子が中央に配置されます。オプションで選択できます:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

次にあります:

android:layout_gravity="center"

ビュー自体をその親の中央に配置しています

そして最後に、次の属性を親ビューに追加できます。

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

7

android:centerInParent="true"相対レイアウトでビューを中央に配置する場合は、ビュー内の属性を使用します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>

5

簡単です。何にも合わせないでください

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>


2

方向のいずれかに中央揃えするには、子レイアウトでandroid:layout_centerHorizo​​ntal = "true"またはandroid:layout_centerVertical = "true"を使用します


1

android:layout_alignParentStart = "true"のような配置を削除し、centerInParentを追加するとうまくいきました。「配置」がそのままの場合、centerInParentは機能しません


1

とても簡単です。以下のコードを試してください、

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

1
ここではコードのみの回答は歓迎されません。上記の回答が機能する理由の詳細を投稿してください。:)
Vivz 2017

ガイドラインをありがとう。私はここで新しいです。
Primesh 2017

0

親ビューの左または右に配置する必要があります

android:centerInParent="true"コードを使用する場合は、これらを使用しないでください 。

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.