2010-04-10 34 views
17

Tôi đã làm đau đớn não của tôi (newbie android đây, vì vậy không khó để làm) cho một lúc cố gắng tìm ra cách để thực hiện điều này:Làm cách nào để căn giữa các nút trên màn hình theo chiều ngang và chiều dọc cộng với nhau cách nhau?

enter image description here

sử dụng một RelativeLayout hoặc một cái gì đó khác hơn AbsoluteLayout đó là những gì này đã được tạo ra với. Tôi đến từ một nền lập trình Windows, nơi thiết bị điều chỉnh vị trí 'tuyệt đối' cho bạn và bố trí GUI là một vấn đề không.

Bố cục đầu tiên hoạt động tốt trong trình mô phỏng, nhưng không định dạng cho Nexus One của tôi hoặc bất kỳ màn hình nào khác với kích thước trình giả lập. Tôi mong đợi điều này vì nó hoàn toàn được định vị, nhưng không tìm thấy giải pháp nào sẽ định dạng chính xác cho các kích thước màn hình khác nhau. Mục tiêu của tôi là có bố cục hoạt động cho các kích thước màn hình khác nhau và theo chiều dọc/ngang.

Dưới đây là Bộ luật mà tôi hiện đang sử dụng: [main.xml]

<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
    <Button 
    android:id="@+id/Button01" 
    android:layout_width="188px" 
    android:layout_height="100px" 
    android:text="A" 
    android:layout_y="50px" android:layout_x="65px" android:textSize="48sp"/> 

<Button 
    android:id="@+id/Button02" 
    android:layout_width="188px" 
    android:layout_height="100px" 
    android:text="B" 
    android:layout_y="175px" android:layout_x="65px" android:textSize="48sp"/> 

<Button 
    android:id="@+id/Button03" 
    android:layout_width="188px" 
    android:layout_height="100px" 
    android:text="C" 
    android:layout_y="300px" android:layout_x="65px" android:textSize="48sp"/> 
</AbsoluteLayout> 

Sử dụng mẩu tin từ các câu hỏi khác ở đây, tôi đã đưa ra với điều này, nó gần gũi hơn, nhưng không có được nêu ra.

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
android:gravity="center" 
android:id="@+id/widget49" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
<Button 
    android:id="@+id/Button01" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:text="A" 
    android:textSize="48sp"/> 

<Button 
    android:id="@+id/Button02" 
    android:layout_width="0dip"   
    android:layout_weight="1" 
    android:text="B" 
    android:textSize="48sp"/> 

<Button 
    android:id="@+id/Button03" 
    android:layout_width="0dip"  
    android:layout_weight="1" 
    android:text="C" 
    android:textSize="48sp"/> 
</TableLayout> 

Dưới đây là một hình ảnh của TableLayout:

enter image description here

Bất kỳ sự giúp đỡ/hướng dẫn sẽ được đánh giá rất nhiều.

Trả lời

11

Sử dụng số RelativeLayout. Nút B có android:layout_centerInParent="true". Nút A có android:layout_centerHorizontal="true", android:layout_above="@id/Button02" và một số android:layout_marginBottom để thiết lập bất kỳ khoảng trắng khoảng trắng nào bạn muốn. Nút C có android:layout_centerHorizontal="true", android:layout_below="@id/Button02" và một số android:layout_marginTop để thiết lập bất kỳ khoảng trống khoảng trắng nào bạn muốn.

Không sử dụng AbsoluteLayout, dấu chấm.

+2

Ngoài ra, không sử dụng px (pixel), sử dụng nhúng (hiển thị pixel độc lập). –

+0

Cảm ơn bạn đã đăng câu trả lời hoàn chỉnh, tôi sao chép và dán nó vào mã của tôi và nó hoạt động tuyệt vời. –

23

Sử dụng các đề xuất của cả hai bạn đã hoạt động hoàn hảo!

Đối với những người quan tâm, đây là mã main.xml thức ở định dạng RelativeLayout mà xuất hiện những gì tôi đã cố gắng để làm với AbsoluteLayout ..

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 

    <Button 
    android:id="@+id/Button02" 
    android:layout_width="188dip" 
    android:layout_height="100dip" 
    android:text="B" 
    android:layout_centerInParent="true" 
    android:textSize="48sp" android:textStyle="bold" /> 

    <Button 
    android:id="@+id/Button01" 
    android:layout_width="188dip" 
    android:layout_height="100dip" 
    android:text="A" 
    android:layout_centerHorizontal="true" 
    android:layout_above="@id/Button02" 
    android:layout_marginBottom="30dip" 
    android:textSize="48sp" android:textStyle="bold" /> 

    <Button 
    android:id="@+id/Button03" 
    android:layout_width="188dip" 
    android:layout_height="100dip" 
    android:text="C" 
    android:layout_centerHorizontal="true" 
    android:layout_below="@id/Button02" 
    android:layout_marginTop="30dip" 
    android:textSize="48sp" android:textStyle="bold" /> 

</RelativeLayout> 

Ngoài ra, trên một lưu ý thú vị mà có thể giúp ai đó trong Tương lai. Khi tôi sửa đổi mã đầu tiên tôi đã đăng với các đề xuất này, tôi đã nhận được lỗi này khi cố biên dịch: "\ res \ layout \ main.xml: 9: error: Lỗi: Không tìm thấy tài nguyên nào khớp với tên đã cho (tại 'layout_above' với giá trị '@ id/Button02').

Với một chút Googling về những gì có thể là nguyên nhân, tôi phát hiện ra rằng do tham chiếu đến Button02 (thông qua mã Button01) xảy ra trước khi Button02 được tạo ra thực tế, điều này tạo ra Vì vậy, lưu ý trong mã cuối cùng Button02 được tuyên bố là FIRST

+0

+1 cho lỗi 'layout_above' của bạn. – SingleShot

+0

Cảm ơn ví dụ điển hình này, điều này đã làm rõ với tôi về bố cục tương đối và +1 cho việc đặt button2 ở trên button1 trong ví dụ này – Manju

2

Dưới đây là một ví dụ tốt khi sử dụng TableLayout.Nó có ba hàng bảng, mỗi hàng có layout_weight = 1 đảm bảo mỗi hàng chiếm 1/3 của scre vi. Hàng ở giữa sẽ chứa các nút của bạn và các hàng trong bảng đầu tiên và cuối cùng trống.

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
    <TableRow android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp"/> 
    <TableRow android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:gravity="center"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="24sp" 
       android:padding="24dp" 
       android:text="Button 1"/> 
      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="24sp" 
       android:padding="24dp" 
       android:text="Button 2"/> 
      <Button 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textSize="24sp" 
       android:padding="24dp" 
       android:text="Button 3"/> 
     </LinearLayout> 

    </TableRow> 
    <TableRow android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp"/> 
</TableLayout> 

Chỉnh sửa ...

Và đây là một cách tương tự, cho phép chiều rộng nút để phù hợp với phụ huynh.

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
    <TableRow android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp"/> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="24sp" 
     android:padding="24dp" 
     android:text="Button 1"/> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="24sp" 
     android:padding="24dp" 
     android:text="Button 2"/> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="24sp" 
     android:padding="24dp" 
     android:text="Button 3"/> 
    <TableRow android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp"/> 
</TableLayout> 
Các vấn đề liên quan