2011-09-13 187 views
22

在附圖中,我希望按鈕的列與圖像的高度相匹配,但我也希望按鈕列的高度最小。做minHeight做什麼?

它正確匹配圖像的高度,但不尊重minHeight,並會按下按鈕。

我爲按鈕欄設置這些屬性:

<LinearLayout 
    ... 
    android:layout_alignTop="@+id/image" 
    android:layout_alignBottom="@+id/image" 
    android:minHeight="150dp" 
    > 

enter image description here

回答

38

我不知道你所有的具體要求,但似乎你可以與其他層解決這個很像在你的圖中。在外部佈局上設置minHeight,然後在內部設置fill_parent/match_parent。也許是這樣的:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:minHeight="150dp"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content"> 
    </LinearLayout> 
    <ImageView /> 
</LinearLayout> 
+2

但請記住:如果您使用多種佈局,您的應用程序在啓動時可能會變得緩慢。似乎佈局在啓動時需要大量內存,這可能會觸發垃圾收集,從而減慢應用程序的運行速度,直到啓動所需的內存再次釋放爲止。是的,我有這個問題,目前我嘗試切換到RelativLayout。 – Martin

6

棘手的問題,因爲它要求TextView.setMinHeight - 但你不使用TextView

因此,一般android:minHeight確實做了一些事情,但不是在你的具體情況。

+5

這是對原問題的一個很好的回答。它可能不會幫助用戶達到最終目標,但我發現它很有趣。 – jwir3

+1

這完全不正確。一般來說minHeight對於視圖來說是一個有效的屬性。它的編程等效是https://developer.android.com/reference/android/view/View.html#setMinimumHeight(int) –

+1

@David Liu該屬性在XML中有效並不意味着它存儲在視圖。 即使該屬性存儲在視圖中,也不表示該值實際上是由活動佈局管理器使用的。 爲了讓它更有趣:有一個'TextView.setMinHeight'和一個'View.setMinimumHeight' – Martin

0

雖然我的其他答案仍然有效,但現在我們有ConstraintLayout的好處。我確定原來的海報早已過去了這個問題,但爲了未來用戶的緣故:如果沒有額外的ViewGroup秒,您可以達到相同的結果。事情是這樣的:

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

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button1" 
     app:layout_constraintBottom_toTopOf="@+id/button2" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button2" 
     app:layout_constraintBottom_toTopOf="@+id/button3" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/button1" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:text="Button3" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/button2" /> 

    <android.support.constraint.Barrier 
     android:id="@+id/barrier" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:barrierDirection="end" 
     app:constraint_referenced_ids="button1,button2,button3" /> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="@id/barrier" 
     app:layout_constraintTop_toTopOf="parent" /> 
</android.support.constraint.ConstraintLayout> 

也許你可能需要類似:

app:layout_constrainedWidth="true" 

ImageView處理更大的圖像,但我沒有測試它。