1

我有三個文本塊和一個圖像,我希望在草圖中顯示的佈局中適合。 (忽略一秒鐘的紅線) enter image description here
(我知道質量很糟糕,如果有人可以推薦我一個體面的(開放)os x/linux圖形編輯器,我會很感激它!(nope,not gimp !))定位文本塊和圖像

我的想法是,以解決這樣的問題:

  • 相對佈局。
  • 定位第二個文本塊相對於第一個文本塊。

例如爲:

android:layout_below=text1 
android:layout_ (make it "float" to screen's right edge - not sure how to do that, yet. 
  • 第三相對於所述第一和第二塊中的文本塊。

例如爲:

android:layout_below=text2 
android:layout_alignLeft = text1 

確定。沒有讓我們看到圖像。它的大小是任意的,所以我認爲我可以適應它。如果你知道從草圖中看到紅線,但是應該相應地對齊圖像。

android:layout_alignTop = text2 
android:layout_alignBottom = text2 
android:layout_alignLeft = text1 

但是我不這樣做的佈局非常好,當我試圖實現它這樣的4條內容或多或少地在屏幕上四處撞倒,但我從來沒有得到他們全部到位。

我能達到的最接近的是這個,但是我不喜歡在那裏使用硬編碼限制。恐怕它不是超級靈活的。
儘管我不得不限制圖像的顯示尺寸,但是我希望能夠使用包圍的文本塊,機器人可以很聰明地根據自己的尺寸計算出尺寸。

<TextView 
    android:id="@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dip" 
    android:text="text1" /> 

<ImageView 
    android:id="image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="text1" 
    android:layout_marginRight="7dip" 
    android:layout_marginTop="5dip" 
    android:adjustViewBounds="true" 
    android:maxHeight="150sp" 
    android:maxWidth="150sp" 
    android:src="srcFile" /> 

<TextView 
    android:layout_marginTop="5dip" 
    android:id="text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="image" 
    android:layout_below="text1" 
    android:layout_toRightOf="image" 
    android:text="text2" /> 

<TextView 
    android:id="text3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="image" 
    android:layout_marginTop="10dip" 
    android:text="text3" /> 

所以我想聽聽你怎麼想我的方法,如果有什麼東西我可以改進,以及如何真正實現它。

編輯: 所以我想找到一個解決方案,因爲我害怕它不夠靈活,我可以放下這部分代碼:

android:maxHeight="150sp" 
android:maxWidth="150sp" 

回答

1

可以保持圖像的比例並在無代碼的情況下調整其大小。只需使用線性佈局和重量的觀點相應

<TextView 
     android:id="@+id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="text1" /> 

    <LinearLayout 
     android:id="@+id/ll" 
     android:layout_below="@+id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="2" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="11" 
      android:adjustViewBounds="true" 
      android:src="srcFile" /> 

     <TextView 
      android:id="@+id/text2" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="text2" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/text3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/ll" 
     android:text="text3" /> 
+0

。奇蹟般有效!感謝那。 – yoshi 2012-02-03 13:29:37

0

簡單的解決方案可能是最好的。使用linear layout與方向設置爲垂直或水平:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 
    <TextView 
     android:id="@+id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dip" 
     android:text="text1" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal"> 
     <ImageView 
      android:id="image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_marginRight="7dip" 
      android:layout_marginTop="5dip" 
      android:adjustViewBounds="true" 
      android:maxHeight="150sp" 
      android:maxWidth="150sp" 
      android:src="srcFile" /> 

     <TextView 
      android:layout_marginTop="5dip" 
      android:id="text2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="text2" /> 

    </LinearLayout> 
    <TextView 
     android:id="text3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dip" 
     android:text="text3" /> 
</LinearLayout> 
+0

但也有一個硬編碼maxHeight/-width o.O – yoshi 2012-02-03 11:09:24

+0

,那麼你可以通過使用Display對象獲取屏幕尺寸 – 2012-02-03 11:32:00

0

這將足以

修復形象標識作爲

android:id="@+id/image" 

,並在第二個文本使用

android:layout_toRightOf="@+id/image" 
android:layout_below="@+id/text1" 

對於第三隻

android:layout_below="@+id/text2" 

LinearLayouts ......,我也喜歡,他們很容易,但是進展緩慢 - 不要太多地使用它們。

+0

我想我會編輯我的問題在運行時做到這一點。我想要一個不依靠硬編碼值調整圖像大小的解決方案。該解決方案僅在手動設置圖像大小限制時有效。 :C – yoshi 2012-02-03 11:24:33

+0

You **不能**保持圖像的比例,並且無代碼地同時調整其大小。 – Gangnus 2012-02-03 11:28:48

+0

問題得到解答,發現錯誤 - 請標記答案。所以改變的答案將是另一個。確實是 – Gangnus 2012-02-03 11:31:05