[英]Align 2 rows of controls that align at the center using relativelayout
Android Studio 0.5.4
你好,
我有一個帶有2列EditText的relativeLayout。
我希望第二行從屏幕的中心開始,第一列的EditText從左邊開始,並在中心停止。
我一直在搞砸centerInParent和centerHorizonatal toLeftOf,但看不到正確。 我不想使用LinearLayout並希望僅在可能的情況下使用RelativeLayout來執行此操作。 所以linearLayout對我來說不是一個選擇。
非常感謝您的任何建議。 屏幕截圖:
我使用的樣式:
<resources>
<style name="addressBookLand">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">22sp</item>
<item name="android:layout_marginBottom">4dp</item>
</style>
</resources>
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fffc">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"
android:gravity="center"
android:inputType="text"
android:text="Address Book App"
android:textStyle="bold|italic" />
<EditText
android:id="@+id/etFirstName"
style="@style/addressBookLand"
android:hint="Enter your first name"
android:inputType="text"
android:layout_below="@id/tvTitle"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/etLastName"/>
<EditText
android:id="@+id/etLastName"
style="@style/addressBookLand"
android:hint="Enter your last name"
android:inputType="text"
android:layout_below="@id/tvTitle"
android:layout_centerHorizontal="true"/>
<EditText
android:id="@+id/etAddressLine"
style="@style/addressBookLand"
android:hint="Enter your address"
android:inputType="text"
android:layout_below="@id/etFirstName"/>
<EditText
android:id="@+id/etDistrict"
style="@style/addressBookLand"
android:hint="Enter your district"
android:inputType="text"
android:layout_below="@id/etLastName"
android:layout_toRightOf="@id/etAddressLine"/>
<EditText
android:id="@+id/etCity"
style="@style/addressBookLand"
android:hint="Enter your city"
android:inputType="text"
android:layout_below="@id/etAddressLine"/>
<EditText
android:id="@+id/etPostCode"
style="@style/addressBookLand"
android:hint="Enter your postcode"
android:inputType="number"
android:layout_below="@id/etDistrict"
android:layout_toRightOf="@id/etCity"/>
<EditText
android:id="@+id/etPhoneNumber"
style="@style/addressBookLand"
android:hint="Enter your phone number"
android:inputType="phone"
android:layout_below="@id/etCity"/>
<EditText
android:id="@+id/etEmailAddress"
style="@style/addressBookLand"
android:hint="Enter your email Address"
android:inputType="textEmailAddress"
android:layout_below="@id/etPostCode"
android:layout_toRightOf="@id/etPhoneNumber"/>
<Button
android:id="@+id/btnSubmit"
style="@style/addressBookLand"
android:text="Submit"
android:layout_below="@id/etPhoneNumber"
android:layout_toLeftOf="@id/btnCancel"
android:layout_alignParentLeft="true"/>
<Button
android:id="@+id/btnCancel"
style="@style/addressBookLand"
android:onClick="onClickCancel"
android:text="Cancel"
android:layout_below="@id/etEmailAddress"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
如果您絕對不想使用LinearLayout
那么一個優雅的解決方案可能是創建一個寬度和高度為0的TextView
作為中心點的標記,並使用它在其周圍放置其他View
。 例如;
<TextView
android:id="@+id/centre_marker"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_centerHorizontal="true"/>
因為它的寬度為0( 如果您想在EditText
之間留一個間距,則可以給此標記一個寬度,或者在其他View
上使用邊距 ),它的大小或多或少都將在中心。 因此,您可以將其左側的所有組件對齊到右側,並將所有組件的左側對齊。 例如;
<EditText
android:id="@+id/etFirstName"
style="@style/addressBookLand"
android:hint="Enter your first name"
android:inputType="text"
android:layout_below="@id/tvTitle"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/centre_marker"/>
<EditText
android:id="@+id/etLastName"
style="@style/addressBookLand"
android:hint="Enter your last name"
android:inputType="text"
android:layout_below="@id/tvTitle"
android:layout_toRightOf="@id/centre_marker"/>
另外,就像其他人提到的那樣,在水平LinearLayout
兩個相等大小的垂直LinearLayouts
可以得到所需的結果,只要您不打算使布局更復雜或更緊湊。
我希望這有幫助。 如果您需要澄清,可以給我留言,我會盡力解釋。
將EditText分組為兩個垂直的LinearLayouts。 將水平的LinearLayout環繞在其中,並賦予垂直的LinearLayouts權重=“ 1”
<LinearLayout
android:orientation="horizontal"
android:width="match_parent"
android:height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:weight="1"
android:width="0dp"
android:height="wrap_content">
<!-- put first column here -->
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:weight="1"
android:width="0dp"
android:height="wrap_content">
<!-- put second column here -->
</LinearLayout
</LinearLayout
只需使用放置在線性布局中的2個相對布局創建列,並在Width_layout設置為match_parent的列上使用權重即可。 請記住,您可以在其他布局中嵌套布局。
嘗試以下代碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fffc" >
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:inputType="text"
android:text="Address Book App"
android:textSize="22sp"
android:textStyle="bold|italic" />
<EditText
android:id="@+id/etFirstName"
style="@style/addressBookLand"
android:layout_alignParentLeft="true"
android:layout_below="@id/tvTitle"
android:layout_toLeftOf="@id/etLastName"
android:hint="Enter your first name"
android:inputType="text" />
<EditText
android:id="@+id/etAddressLine"
style="@style/addressBookLand"
android:layout_below="@id/etFirstName"
android:hint="Enter your address"
android:inputType="text" />
<EditText
android:id="@+id/etCity"
style="@style/addressBookLand"
android:layout_below="@id/etAddressLine"
android:hint="Enter your city"
android:inputType="text" />
<Button
android:id="@+id/btnCancel"
style="@style/addressBookLand"
android:layout_below="@id/etEmailAddress"
android:layout_centerHorizontal="true"
android:onClick="onClickCancel"
android:text="Cancel" />
<Button
android:id="@+id/btnSubmit"
style="@style/addressBookLand"
android:layout_alignParentLeft="true"
android:layout_below="@id/etPhoneNumber"
android:layout_toLeftOf="@id/btnCancel"
android:text="Submit" />
<EditText
android:id="@+id/etLastName"
style="@style/addressBookLand"
android:layout_alignBaseline="@+id/etFirstName"
android:layout_alignBottom="@+id/etFirstName"
android:layout_alignParentRight="true"
android:ems="10"
android:hint="Enter your last name"
android:inputType="text" />
<EditText
android:id="@+id/etDistrict"
style="@style/addressBookLand"
android:layout_alignParentRight="true"
android:layout_below="@+id/etLastName"
android:ems="10"
android:hint="Enter your district"
android:inputType="text" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/etPostCode"
style="@style/addressBookLand"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:ems="10"
android:hint="Enter your postcode"
android:inputType="number" />
<EditText
android:id="@+id/etEmailAddress"
style="@style/addressBookLand"
android:layout_alignParentRight="true"
android:layout_below="@+id/etPostCode"
android:ems="10"
android:hint="Enter your email Address"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/etPhoneNumber"
style="@style/addressBookLand"
android:layout_alignParentLeft="true"
android:layout_below="@+id/etCity"
android:ems="10"
android:hint="Enter your phone number"
android:inputType="phone" />
希望這能解決您的問題
嘗試使用以下代碼。 希望這會起作用。
<?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" >
<View
android:id="@+id/center"
android:layout_width="1dp"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true" />
<EditText
android:id="@+id/fist_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/center" />
<EditText
android:id="@+id/second_row"
android:layout_alignLeft="@+id/center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/fist_row"/>
另外,您說linearlayout對您來說不是一個選擇,您應該考慮將其用作相對布局的子元素!
這樣,您可以在兩個按鈕周圍設置水平線性布局,並將它們水平居中。
因此,代替了兩個按鈕,類似於:
<LinearLayout
android:height="wrap_content"
android:width="match_parent"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_below="@id/etPhoneNumber" >
<Button
android:id="@+id/btnSubmit"
style="@style/addressBookLand"
android:text="Submit"/>
<Button
android:id="@+id/btnCancel"
style="@style/addressBookLand"
android:onClick="onClickCancel"
android:text="Cancel"/>
</Linearlayout>
這也可能是一個解決方案: 水平居中放置兩個按鈕
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.