2017-07-03 12 views
0

元の質問を大幅に誤認してしまったため、以前の質問を詳細情報で再投稿しています。Android:コントロールを相対レイアウトの別のコントロールの中心に合わせる

以下は元のレイアウトです。これは右のボタンで、2つの編集テキストボックスは残りの幅の半分を占めています。

実際には、これは別の線形レイアウトにネストされていますが、これは私が援助する必要がある部分です。

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" > 

     <EditText 
      android:id="@+id/txtUser" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:layout_weight="1" 
      android:maxLines="1" /> 

     <EditText 
      android:id="@+id/txtPassword" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:layout_weight="1" 
      android:maxLines="1" /> 

     <Button 
      android:id="@+id/btnAddPassword" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/add" /> 

    </LinearLayout> 


     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/LinInput" /> 

     <TextView 
      android:id="@android:id/empty" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/LinInput" 
      android:text="@string/EmptyPass" 
      android:textSize="24sp" 
      android:padding="10dp" /> 

</RelativeLayout> 

私の目的は、ドキュメントで示唆されているようにLinearLayoutsの数を減らすことでした。 1つの可能性は、以下のレイアウトで行ったように空のビューを持つことです。空のビューの幅は残りの幅(ボタンを引いたもの)と同じです。このビューの両側に2つのEditTextコントロールを設定しました。

ここでは、幅をビューの中央から始める方法を理解する必要があります。

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

    <View 
     android:id="@+id/vwEmptyView" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_toLeftOf="@+id/btnAddPassword" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true"> 

    </View> 

    <EditText 
     android:id="@+id/txtUser" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:layout_weight="1" 
     android:maxLines="1" 
     android:layout_toLeftOf="@+id/vwEmptyView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <EditText 
     android:id="@+id/txtPassword" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:layout_weight="1" 
     android:maxLines="1" 
     android:layout_toRightOf="@+id/vwEmptyView" 
     android:layout_toLeftOf="@+id/btnAddPassword" 
     android:layout_toStartOf="@+id/btnAddPassword" /> 

    <Button 
     android:id="@+id/btnAddPassword" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/add" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnAddPassword" /> 

</RelativeLayout> 

これは、レンダリング時にどのように見えるかです。 Android Layout Screen Shot

ところで、階層ビューアには他の相対レイアウトの3つの緑色の点が表示されますが、赤色、赤色、黄色が表示されます。

+0

あなたの最初のアプローチはまったく問題ありません。 'LinearLayout'を削除する必要はありません。それはあまり避けられないものです。あなたがしようとしているものは、直線レイアウトなしで実装するのは難しい –

答えて

0

これは、ConstraintLayoutで必要なレイアウトを実装した方法です。

<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <EditText 
     android:id="@+id/txtUser" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:layout_marginEnd="8dp" 
     android:layout_marginTop="8dp" 
     android:layout_weight="1" 
     android:ems="10" 
     android:maxLines="1" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toLeftOf="@+id/txtPassword" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <EditText 
     android:id="@+id/txtPassword" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:layout_marginTop="8dp" 
     android:layout_toStartOf="@+id/btnAddPassword" 
     android:layout_weight="1" 
     android:ems="10" 
     android:maxLines="1" 
     app:layout_constraintLeft_toRightOf="@+id/txtUser" 
     app:layout_constraintRight_toLeftOf="@+id/btnAddPassword" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Button 
     android:id="@+id/btnAddPassword" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="add" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentEnd="true" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginEnd="8dp" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_below="@+id/btnAddPassword" 
     android:layout_marginTop="8dp" 
     app:layout_constraintTop_toBottomOf="@+id/btnAddPassword" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="8dp" 
     android:layout_marginLeft="8dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginRight="8dp" 
     app:layout_constraintRight_toRightOf="parent" /> 

</android.support.constraint.ConstraintLayout> 

あなたは気づいているかもしれませんが、あなたは利用可能なスペースで2 EditTextsを中心に任意の追加のビューを必要としません。私は質問がRelativeLayoutと同じことをすることについて知っているが、私はいくつかの不要なビューを追加せずにそれを行う方法を考えることはできません。この場合は、ConstraintLayoutを使用するのが最適です。

関連する問題