2011-09-13 16 views
22

Trong hình ảnh đính kèm, tôi muốn cột các nút phù hợp với chiều cao của hình ảnh, nhưng tôi cũng muốn có chiều cao tối thiểu cho cột của các nút.có minHeight làm gì không?

Kết hợp chính xác với chiều cao của hình ảnh nhưng không tôn trọng minHeight và sẽ làm mờ các nút.

Tôi đang thiết lập các thuộc tính cho cột của các nút:

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

enter image description here

Trả lời

38

Tôi không biết tất cả các yêu cầu chính xác của bạn, nhưng có vẻ như bạn có thể giải quyết việc này với lớp khác khá nhiều như trong sơ đồ của bạn. Đặt minHeight trên bố cục bên ngoài và sau đó chỉ cần fill_parent/match_parent ở bên trong. Có lẽ cái gì đó như:

<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

Nhưng hãy nhớ: nếu bạn sử dụng nhiều bố cục, ứng dụng của bạn có thể trở nên chậm chạp khi khởi động. Dường như bố trí cần nhiều bộ nhớ khi khởi động có thể kích hoạt bộ sưu tập rác làm chậm ứng dụng của bạn cho đến khi bộ nhớ cần thiết để khởi động đã được giải phóng một lần nữa. Và có, tôi có vấn đề đó và hiện tại tôi cố gắng chuyển sang RelativLayout thay thế. – Martin

6

câu hỏi Tricky vì nó gọi TextView.setMinHeight - nhưng sau đó bạn không sử dụng một TextView.

Vì vậy, thông thường, android:minHeight thực sự làm điều gì đó nhưng không thực hiện trong trường hợp cụ thể của bạn.

+5

Đây là câu trả lời hay cho câu hỏi ban đầu được hỏi. Nó có thể không giúp người dùng đạt được mục tiêu cuối cùng của họ, nhưng tôi thấy nó thú vị. – jwir3

+1

Điều này hoàn toàn không chính xác. minHeight nói chung cho các khung nhìn là một thuộc tính hợp lệ. Tương đương chương trình của nó là https://developer.android.com/reference/android/view/View.html#setMinimumHeight(int) –

+1

@David Liu Đó là thuộc tính hợp lệ trong XML không có nghĩa là nó được lưu trữ trong lượt xem. Và ngay cả khi thuộc tính được lưu trữ trong chế độ xem, điều đó không có nghĩa là thuộc tính đó thực sự được trình quản lý bố cục hoạt động sử dụng. Và để làm cho nó thú vị hơn: có một 'TextView.setMinHeight' và' View.setMinimumHeight' – Martin

0

Mặc dù câu trả lời khác của tôi vẫn hợp lệ, hiện nay chúng tôi có lợi ích là ConstraintLayout. Tôi chắc chắn rằng poster ban đầu đã lâu kể từ khi vượt qua vấn đề này, nhưng vì lợi ích của người dùng trong tương lai: bạn có thể đạt được kết quả tương tự mà không cần thêm lớp ViewGroup s. Một cái gì đó như thế này:

<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> 

Có thể bạn có thể cần một cái gì đó như:

app:layout_constrainedWidth="true" 

cho ImageView để xử lý hình ảnh lớn hơn, nhưng tôi đã không kiểm tra nó.

Các vấn đề liên quan