2012-10-08 94 views
6

編輯:我收到了關於固定邊距的兩個全面答案。儘管我已經決定完全使用固定利潤率而不是重量利潤率,但原始問題仍然存在。居中LinearLayout和「百分比」邊距

我試圖獲得的Android以下設計:

Desired Layout

居中的東西垂直列表(TextViews,EditViews等),其離開所述水平空間的約10%的遊離的左/右邊距,背景。

我嘗試和沒有工作/部分工作:

  • 的LinearLayout,垂直的,因爲頂層佈局。如果重力設置爲「居中」,則背景限制爲佈局的大小。另外,如何以這種方式設置百分比邊距(寬度)?
  • RelativeLayout上的LinearLayout:背景作品,水平居中作品,權重不存在。
  • LinearLayout上的LinearLayout:後臺工作,加權工作,水平居中將所有可用空間推向右側。

(在後兩種情況下,我的Eclipse還抱怨說,佈局的一個是多餘的。)

我沒有貼碼,已經認爲這是較爲原則有關的問題。完成此操作的(最佳)方式是什麼?

謝謝。對應測試用例的最後一個

XML:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:baselineAligned="false" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1.0" 
    android:weightSum="1.0" 
    android:background="#013c57" > 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linearLayout1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.9" 
     android:layout_gravity="center" 
     android:orientation="vertical" > 

     <!-- Stuff --> 
    </LinearLayout> 
</LinearLayout> 
+0

能否請您與我們分享您的xml文件? –

回答

2

以下是創建這種類型的佈局的最簡單的XML代碼檢查

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#000" 
    android:gravity="center"> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 
</LinearLayout> 
+0

儘管這確實保留了背景並消除了潛在的冗餘佈局,但這是如何實現左右邊距的? – TotoTitus

+0

通過簡單地添加這兩個語句並刪除android:layout_margin =「10dp」,(** android:layout_marginLeft =「10dp」和android:layout_marginRight =「10dp」**) – Pratik

+0

我明白,您的答案是有用的,但它沒有提供上漲或基於權重的利潤率。 (無論如何,這可能不是一個好主意;固定利潤率可能會更好,但它與原始問題有關)。 – TotoTitus

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#000" 
    android:gravity="center"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="#000" 
     android:layout_gravity="center" 
     android:gravity="center"> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

    </LinearLayout> 

</LinearLayout> 

試試這個

+0

該解決方案與Pratik的相同。它確實實現了利潤率,但不是一個百分比。 – TotoTitus

+0

那裏作爲更改如果您檢查它 – Syn3sthete

1

您可以使用compile 'com.android.support:percent:24.2.1'

您現在可以使用PercentFrameLayout或PercentRelativeLayout。他們都具有以下屬性:

layout_widthPercent 
layout_heightPercent 
layout_marginPercent 
layout_marginLeftPercent 
layout_marginTopPercent 
layout_marginRightPercent 
layout_marginBottomPercent 
layout_marginStartPercent 
layout_marginEndPercent 



<?xml version="1.0" encoding="utf-8"?> 
<android.support.percent.PercentRelativeLayout 
    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"> 

    <TextView 
     android:id="@+id/txt1" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%" /> 

    <TextView 
     android:layout_below="@id/txt1" 
     android:id="@+id/txt2" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 

    <TextView 
     android:layout_below="@id/txt2" 
     android:id="@+id/txt3" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 

    <TextView 
     android:layout_below="@id/txt3" 
     android:id="@+id/txt4" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 


</android.support.percent.PercentRelativeLayout> 
0

通過引入ConstraintLayout的,你可以爲你的觀點,通過指導約束他們設定百分比的利潤。

這裏的例子:

Layout Editor

<?xml version="1.0" encoding="utf-8"?> 
<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/editText1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     app:layout_constraintBottom_toTopOf="@+id/editText2" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_chainStyle="packed" /> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toTopOf="@+id/editText3" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText1" /> 

    <EditText 
     android:id="@+id/editText3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toTopOf="@+id/editText4" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText2" /> 

    <EditText 
     android:id="@+id/editText4" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText3" /> 

    <android.support.constraint.Guideline 
     android:id="@+id/startGuideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.1" /> 

    <android.support.constraint.Guideline 
     android:id="@+id/endGuideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.9" /> 

</android.support.constraint.ConstraintLayout>