2017-08-08 93 views
0

我比Swift更喜歡Swift,但我正在嘗試學習它。Android XML:設備更改時的佈局行更改

隨着Swift我使用自動佈局的約束,使我的佈局很容易。我似乎無法達到我想要的Android XML。

我正在創建自定義列表視圖行。我希望該行與圖像(128px)的高度相同或更少。然後,我希望標題居中並在標題下方,每個文本有2個圖像。

  • 使用相對佈局,我將圖像設置爲128x128。
  • 場景標題要中心對齊,並在主要 圖像的左側放置30dp。
  • 其他2個圖像和文本的意見總是低於標題
  • 第一個「SceneOptionImage」符合題
  • 其他意見只是走在一條線上「sceneOptionImage」
後開始

我以爲我把它作爲較小的設備預覽它看起來很好。但是,當我向上移動屏幕分辨率時,就好像該行的高度變小了一樣。

4.0英寸屏幕:

enter image description here

6.0英寸屏幕:

enter image description here

那麼,爲什麼行的高度出現改變?

我可以得到一些指針嗎?謝謝。

以下是完整的XML代碼以供參考:

<RelativeLayout 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="128px" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/sceneImage" 
     android:layout_width="128px" 
     android:layout_height="128px" 
     android:layout_margin="0px" 
     app:srcCompat="@mipmap/clipboard" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:id="@+id/sceneName" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="20dp" 
     android:text="Scene Title" 
     android:layout_toEndOf="@id/sceneImage" 
     android:layout_marginLeft="30dp" 
     android:gravity="center"/> 

    <ImageView 
     android:id="@+id/sceneOptionImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/forest" 
     android:layout_below="@+id/sceneName" 
     android:layout_alignStart="@+id/sceneName" 
     android:layout_marginTop="18dp" /> 

    <TextView 
     android:id="@+id/sceneOptionText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="8dp" 
     android:layout_toEndOf="@+id/sceneOptionImage" 
     android:layout_below="@id/sceneName" 
     android:layout_marginTop="20dp" 
     android:text="TextView" /> 

    <ImageView 
     android:id="@+id/sceneColourImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="70dp" 
     app:srcCompat="@mipmap/forest" 
     android:layout_below="@+id/sceneName" 
     android:layout_alignStart="@+id/sceneOptionText" 
     android:layout_marginTop="18dp" /> 

    <TextView 
     android:id="@+id/sceneColourText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="8dp" 
     android:layout_toEndOf="@+id/sceneColourImage" 
     android:layout_below="@id/sceneName" 
     android:layout_marginTop="20dp" 
     android:text="TextView" /> 
</RelativeLayout> 
+4

使用'dp',而不是'px' –

+0

管理佈局也許你應該嘗試[ConstraintLayour](https://developer.android.com/training/ constraint-layout/index.html) –

+0

那麼這是一個簡單的修復。謝謝。任何機會你可以解釋爲什麼dp對於所有設備都是一樣的,而px不是? – jackabe

回答

0

Image

解決問題的方法是體重總和。這將允許您在不同的屏幕尺寸

<LinearLayout 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="128dp" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <LinearLayout 
      android:gravity="center" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@mipmap/ic_launcher"/> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="0.5" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:gravity="center" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1"> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Scene Title"/> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:orientation="horizontal"> 

       <LinearLayout 
        android:gravity="center" 
        android:layout_weight="1" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
        <ImageView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:src="@mipmap/ic_launcher"/> 
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Text View"/> 
       </LinearLayout> 
       <LinearLayout 
        android:gravity="center" 
        android:layout_weight="1" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
        <ImageView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:src="@mipmap/ic_launcher"/> 
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Text View"/> 
       </LinearLayout> 

      </LinearLayout> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout>