2012-05-01 8 views
25

私はRelativeLayoutの経験がありますが、私が提示した問題を解決する方法はありませんでした(ハードコーディングのマージンの値を除いて、 。避けるために)Android RelativeLayout別のビューの右上隅にあるビューの中心を合わせる

を私はRelativeLayoutに、以下の画像のようなものを作成するために試してみたい:

enter image description here

ボックスは、独自のビューであると私はオレンジ色の円が含まれているビューを取得したいです青いボックスが含まれているビューの右上隅に中央揃えされます。

私はandroid:alignTop="boxView"android:alignRight="boxView"で試しましたが、それは私のオレンジ色の丸を私の箱の中に完全に入れました。円がボックスの右上隅の中央にくるようにしたい。

私はRelativeLayoutでどのようにその結果を得ることができますか?好ましくは、オレンジドット表示のためにスクリーンの縁から離れた余白をハードコードする必要がない。

+0

なぜ、余白を使用したくないですか?マージンはこれを達成するための完璧な方法のようです。 – Bobbake4

+0

私は画面の端からどのくらい離れているかに余裕を持たせたくありません。私はボックスにそれを整列させ、実際に理想的なマージンを持って直径の半分以上を上にシフトすることができれば。しかし、私はどのようにそれを行うには、画面の端からどれくらい遠くに、私は一直線にしたい点からどのくらい離れているかを教えることによってそれを行う方法を見つけることができます。 – FoamyGuy

答えて

29

このコードは、探しているものを作成しますが、マージンを使用します。これが作成している動的構造であれば、コード内に余白を設定できるようになりました。あなたが見ることができるように、私は青いボックスの外側の右上の形を移動するために負のマージンを使用しました。これらは移動しようとしているサークルの高さの半分にする必要があります。コード内でこのすべてを行い、円を右上隅の中央に配置することができます。

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

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:background="#0000FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="26dp" 
      android:layout_height="26dp" 
      android:layout_alignRight="@+id/linearLayout1" 
      android:layout_alignTop="@+id/linearLayout1" 
      android:layout_marginRight="-13dp" 
      android:layout_marginTop="-13dp" 
      android:background="#FF00FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </RelativeLayout> 
+3

負のマージンについて知りませんでした。完璧に感謝します。 – FoamyGuy

+0

2つ目のビューのサイズが画像の場合、実際には機能しません。なぜなら、ドロウアブルはDP内で一貫したサイズを持たないからです(DPIバケットから連続的にスケーリングするのではなく、 26dp/2 = 13dpだけではできません。 回避策の1つは、画像よりはるかに大きいサイズを選択し、その周りに元のビューを中心とした一定のサイズのラッパーレイアウトを追加して、その半分を計算することです。 – Karu

+0

負のマージン!はい! – RexSplode

関連する問題