2012-09-25 8 views
5

Androidの他の要素の上に要素を浮かべて、コンテナのレイアウトに影響しないようにすることはできますか?レイアウトでスペースを取らないようにフロートビューを表示

enter image description here

上記の黄色のボックスは、私は他の要素の上に浮いているようにしたい要素があるが、あなたのように:

私が達成したい効果は浮動音声泡状の要素であります緑色のバーの下の灰色の領域の上に浮かぶのではなく、緑色のバーの下に黒いスペースを作成してコンテナを押し下げるのがわかります。

RelativeLayoutは要素を適切に配置できますが、配置された要素がそのコンテナの境界を拡張しないようにする方法が見つかりません。これはAndroidでも可能ですか?


類推ウェブの世界で

  • 等価「位置:絶対」を有する元素であり、したがって、「フロー」(すなわち:レイアウト)の一部としてカウントされない
  • WPF世界では、同等物はキャンバスの内部に配置される要素になります。キャンバスにはレイアウト内のスペースを占める独自の境界がありますが、その子供はその境界の外にありレイアウトには影響しません。iOSの世界では
  • のすべてのビューはキャンバスとして配置されます(レイアウトマネージャは存在しません)。この動作はbysimply RelativeLayoutが適切に要素を配置することができますが、私は位置付け要素はそのコンテナの境界を拡大しないようにする方法を見つけることができない要素フレームのxとyプロパティ
+0

"RelativeLayoutは要素を適切に配置できますが、配置された要素をそのコンテナの境界を拡張しないようにする方法を見つけることができません"ということはどういう意味ですか?コンテナはrelativeLayoutですか? – JRaymond

答えて

10

を相殺達成されます。

あなたは間違った容器を持っています。例えば

:ここ

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

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="@string/big" 
     android:textSize="120dip" 
     android:textStyle="bold"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="@string/small"/> 

</RelativeLayout> 

Floating buttons

、小さなボタンは、大きなボタンの上に浮かびます。コンテナがコンテンツビュー全体であるため、小さなボタンはコンテナの境界を拡張しません。

子供が浮遊できる可能性のある領域を含む容器になるようにRelativeLayout(またはFrameLayout)のコンテナを設定します。それが画面全体であろうとサブセットであろうと、それはあなた次第です。逆に、子供がコンテナの境界に影響を与えている場合は、間違ったコンテナを使用しているか、このロール専用のコンテナを設定する必要があります。別の例では

Roman Nurik shows how to implement a floating "undo bar"、Gmailのに似て:

Floating Undo Bar

+1

驚くばかりの答え!答えはいいえ、Androidはレイアウトの要素として数えられない要素をサポートしていないようです)。そのため、回避策は、1)RelativeLayoutコンテナをUIツリーの上に配置し、その境界に必要なすべての領域(つまり、すべての画面の要素)が含まれるようにするか、2)FrameLayout内のすべての要素をラップし、 'layout_gravity (上記にリンクした元に戻す例のように)要素を配置する余白を指定します。思考をありがとう! – Marchy

+0

@Marchy: "Androidはレイアウトの要素として数えられない要素をサポートしていません" - それは正しいです。 – CommonsWare

1

はアンドロイドで相対的なレイアウトを見てみましょう:たとえば、あなたは相対的なレイアウト内のビューのすべての位置を指定いけないとき彼らはお互いの上に浮かぶだろう。

http://developer.android.com/guide/topics/ui/layout/relative.html

例:

<?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" > 

    <TextView 
     android:id="@+id/update" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="#444444" 
     android:text="Update" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/lost_of_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/some_button" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="text view with lots of text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <Button 
     android:id="@+id/some_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:text="Some Button" /> 

</RelativeLayout> 

編集:CommonsWareが速かった;)彼の美しい答えを見てみましょう!

+1

+1相対的な配置が指定されていない場合、RelativeLayoutの要素は互いの上に配置されます – Marchy

関連する問題