私は相対的なレイアウトを使用し、画面の下部にボタンを設定したいのですが、これはそれをすべて下に配置し、画面の終わり/ビューとボタン。ただし、ボタンマージンをどうしても、何らかの理由で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>
Buttonのマージンの代わりに、RelativeLayoutに単純にパディングを追加できます。 Android:paddingBottom="15dp"
。
一般的に、APIレベル8の設定を使用して、Exclipseプレビューでレイアウトを常にテストしています。これにより、ICSおよびJBを含むほとんどのデバイスで非常に正確な結果が得られます。
他にできることは、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>
この例では、RelativeLayout
をImageView
で埋め、TextView
をImageView
の上に配置します。
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>
@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>
他の人が提案したように、下に配置されたビューにパディングを追加すると、ビューの背景も拡張されます。色付きの背景がある場合、ビューは下に接着されているように見えます。パディングとマージンはまったく異なり、パディングはビューの一部ですが、マージンはビューの間にスペースを残します。
設定するのが最善の方法だと思います:
<...
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)
最善の方法は、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)
私はこの問題に出くわし、自分の状況に合った答えが見つからなかったため、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>
これは一部の人々にとって有用であることが証明されるはずです。
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>