web-dev-qa-db-ja.com

Android:親の下部と下部のマージンを揃える

私は相対的なレイアウトを使用し、画面の下部にボタンを設定したいのですが、これはそれをすべて下に配置し、画面の終わり/ビューとボタン。ただし、ボタンマージンをどうしても、何らかの理由で2.1以降では何もしません。相対的なレイアウトには背景が含まれているので、私はできませんが、その上にマージンがあります。

誰でもこれの修正を知っていますか?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="0dp"
Android:background="@drawable/background" >

    <Button
        Android:id="@+id/confirm_mobile_button_next"
        Android:layout_width="fill_parent"
        Android:layout_height="40dip"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="false"
        Android:layout_centerHorizontal="false"
        Android:layout_centerInParent="false"
        Android:layout_margin="15dp"
        Android:background="@drawable/button_shape_selector"
        Android:paddingLeft="10dip"
        Android:paddingRight="10dip"
        Android:text="@string/confirm_mobile_no_continue"
        Android:textColor="@color/white"
        Android:textStyle="bold" />

</RelativeLayout>
64
Jacob

Buttonのマージンの代わりに、RelativeLayoutに単純にパディングを追加できます。 Android:paddingBottom="15dp"

一般的に、APIレベル8の設定を使用して、Exclipseプレビューでレイアウトを常にテストしています。これにより、ICSおよびJBを含むほとんどのデバイスで非常に正確な結果が得られます。

67
André

他にできることは、Viewの下部に揃えられたRelativeLayoutを配置し、その高さを使用したい下部マージンに設定することです(または単にlayout_marginBottomの値を指定します)そう:

 <RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"        
    > 
    <ImageView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:src="@drawable/some_image"
        Android:adjustViewBounds="true"

         />
    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Some Overlay"
        Android:padding="3dip"
        Android:gravity="center_vertical|center_horizontal"

        Android:layout_above="@+id/empty_view"
        Android:layout_marginBottom="35dip"
        />
    <View 
        Android:id = "@+id/empty_view"
        Android:layout_height = "30dip"
        Android:layout_width = "match_parent"
        Android:visibility="invisible"
        Android:layout_alignParentBottom="true"
        />

    </RelativeLayout>

この例では、RelativeLayoutImageViewで埋め、TextViewImageViewの上に配置します。

30
ajacian81

YuはtranslateY属性を使用できます

translateY="-16dp"

最終コード

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginBottom="0dp"
    Android:background="@drawable/background">

    <Button
        Android:id="@+id/confirm_mobile_button_next"
        Android:layout_width="fill_parent"
        Android:layout_height="40dip"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentLeft="false"
        Android:layout_centerHorizontal="false"
        Android:layout_centerInParent="false"
        Android:layout_margin="15dp"
        Android:background="@drawable/button_shape_selector"
        Android:paddingLeft="10dip"
        Android:paddingRight="10dip"
        Android:text="@string/confirm_mobile_no_continue"
        Android:textColor="@color/white"
        Android:textStyle="bold"
        Android:translateY="-16dp" />

</RelativeLayout>
17
Shubham

@franny zhaoが提案する有効なソリューションのみを以下に示します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <FrameLayout
        Android:id="@+id/fl_layout"
        Android:layout_alignParentBottom="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content">
        <TextView
            Android:id="@+id/tv_layout"
            Android:text="hello world"
            Android:layout_marginBottom="50dp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </FrameLayout>
</RelativeLayout>

他の人が提案したように、下に配置されたビューにパディングを追加すると、ビューの背景も拡張されます。色付きの背景がある場合、ビューは下に接着されているように見えます。パディングとマージンはまったく異なり、パディングはビューの一部ですが、マージンはビューの間にスペースを残します。

3
Satheesh

設定するのが最善の方法だと思います:

<...
Android:layout_alignParentBottom="true" />

その後、Javaコードビハインドで:

Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)
confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)
3
sadegh saati

最善の方法は、Android:layout_alignParentBottomをXMLに設定してから、Javaコードビハインドに設定することです。

Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)

そして

confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)
2
sadegh saati

私はこの問題に出くわし、自分の状況に合った答えが見つからなかったため、0.5秒間考え始め、RelativeLayoutサンプル内のビューに負のマージンを設定することで解決しました。

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <ImageView
    Android:layout_width="48dp"
    Android:layout_height="48dp"
        Android:layout_marginTop="-8dp"
        Android:layout_marginStart="-8dp">
</RelativeLayout>

これは一部の人々にとって有用であることが証明されるはずです。

1
Mathijs Segers

ViewGroup(FrameLayoutやLinearLayoutなど)を使用して、ビューをラップできます。外側のViewGroupでalignParentBottomを設定すると、marginBottomは内側のViewで機能します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <FrameLayout
        Android:id="@+id/fl_layout"
        Android:layout_alignParentBottom="true"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content">
        <TextView
            Android:id="@+id/tv_layout"
            Android:text="hello world"
            Android:layout_marginBottom="50dp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    </FrameLayout>
</RelativeLayout>
1
franny zhao