2011-07-19 28 views
9

Tôi biết nó phải là một câu hỏi dễ dàng ... Tôi chỉ không biết cách sửa nó.Làm cách nào để chế độ xem lấp đầy không gian sẵn có?

Vì vậy, (Chỉ cần một ví dụ),

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:orientation="vertical"> 
    <Button  android:id="@+id/fakeButton" 
       android:layout_height="match_parent" 
       android:layout_width="match_parent"/> 
    <Button  android:id="@+id/saveSearch" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/saveSearch"/> 
</LinearLayout> 

này sẽ không hoạt động - nút đầu tiên sẽ làm cho vô hình 2. Trọng lượng sẽ làm cho nó tất cả một trò chơi tỷ lệ phần trăm mà không phải là những gì tôi muốn.

Tôi có bị dày không?

EDIT: Tôi không biết, nhưng dường như thứ tự quan trọng (từ câu trả lời). Tải bố cục lặp lại thay vì toàn diện. Bạn có thể làm cho phần tử đầu tiên có chiều cao cố định và phần còn lại của các phần tử sẽ lấp đầy những gì còn lại. NHƯNG những gì tôi cần là để làm cho các yếu tố cuối cùng một chiều cao cố định.

Trả lời

11

Bạn có thể sử dụng layout_weight chính xác cho rằng:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:orientation="vertical"> 
    <Button  android:id="@+id/fakeButton" 
       android:layout_height="1" 
       android:layout_width="match_parent" 
       android:layout_weight="1.0" /> 
    <Button  android:id="@+id/saveSearch" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/saveSearch"/> 
</LinearLayout> 

Với điều này, bạn sẽ có nút phía dưới có chiều cao cơ bản, và fakeButton mất tất cả còn lại không gian.

layout_height kiểm soát cách không gian còn lại sẽ được phân chia giữa các chế độ xem khác nhau. Giá trị mặc định là 0 (không chiếm thêm bất kỳ không gian nào). Nếu bạn đặt cả hai nút ở cùng độ cao và cân nặng là 1,0 thì mỗi nút sẽ chiếm 50% không gian.

+0

Tôi không hiểu làm thế nào điều này đang làm việc (Mặc dù không làm cho tôi sai - Nó/là/làm việc). Bạn có thể đưa ra lời giải thích chi tiết hơn không? – Graeme

+1

Ah - nếu một đứa trẻ trong LinearLayout có layout_weight thì chiều rộng (chiều ngang) hoặc chiều cao (hướng dọc) sẽ bị bỏ qua. Thay vào đó, nó sẽ lấp đầy container của nó ở mức độ tối đa của các trẻ khác với trọng lượng là 0 hoặc các trẻ khác có trọng số> 0 người sẽ chia sẻ một% của vùng chứa bằng cách so sánh các giá trị trọng số. – Graeme

+3

Bạn thực sự cần phải suy nghĩ về hệ thống này trong 2 lần: đầu tiên, bỏ qua trọng lượng, làm bố trí bình thường. Nếu LinearLayout có thêm không gian trong đó, và một số trẻ có trọng số> 0, sau đó cung cấp phần trăm không gian thừa (ngang và/hoặc dọc) cho trẻ có cân nặng> 0, tỷ lệ với tổng trọng lượng. – Gregory

-1

Nó phải là cách khác ..
đầu tiên bạn nên có các yếu tố cố định và sau đó là match_parent hoặc fill_parent

0

Tôi nghĩ rằng nó giúp bạn ..

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:scaleType="center" 
android:background="@drawable/bg" 
> 

<Button 
android:id="@+id/button" 
android:layout_width="wrap_content" 
android:layout_height="60dip" 
android:text="button" 

/> 
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:layout_weight="1" 
android:layout_below="@+id/button" 
android:text="button1" 

/> 


</RelativeLayout> 
+0

Điều này chỉ hoạt động vì chế độ xem trên được đặt trước. – Graeme

2

Tôi nghĩ rằng bạn muốn tạo fakeButton để lấp đầy không gian còn lại, phải không? Bạn có thể sử dụng android:layout_weight để thực hiện việc này. Dưới đây là một ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:orientation="vertical"> 
<Button  android:id="@+id/fakeButton" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_weight="1"/> 
<Button  android:id="@+id/saveSearch" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/saveSearch"/> 
</LinearLayout> 
2

Một giải pháp khá dễ dàng khác. Chỉ cần sử dụng thuộc tính FrameLayout và margin:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <Button  android:id="@+id/fakeButton" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent" 
       android:text="Fake button" 
       android:layout_marginBottom="50dip" /> 

    <Button  android:id="@+id/saveSearch" 
       android:layout_gravity="bottom" 
       android:layout_width="fill_parent" 
       android:layout_height="50dip" 
       android:text="Save search"/> 
</FrameLayout> 
+1

Cách thú vị để làm điều đó! – Graeme

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