5

Tôi đang tạo bố cục (tệp XML) trong Android có hai chế độ xem con (một ở bên phải màn hình và một ở bên trái). Tôi muốn chế độ xem ở bên phải chiếm không gian được xác định trước (trong dp) và có chế độ xem ở bên trái chiếm toàn bộ không gian còn lại đến giới hạn, tại thời điểm đó nó sẽ ngừng mở rộng và hai bố cục sẽ chỉ di chuyển xa hơn khi màn hình lớn hơn.Bố cục Android với chế độ xem ở bên phải chiếm không gian được đặt trước và xem trên thang trái để điền phần còn lại của màn hình lên đến giới hạn nhất định

Điều kỳ lạ là điều này sẽ rất dễ dàng nếu tôi muốn chế độ xem ở bên phải là hình mở rộng, và chế độ xem ở bên trái là chế độ chiếm không gian được đặt trước. Nếu bạn đặt từng chế độ xem theo chiều rộng bạn muốn (trong bố cục tuyến tính ngang), Android sẽ tự động thu nhỏ chế độ xem ở bên trái trong trường hợp cả hai chế độ xem không vừa.

Tôi muốn thực hiện việc này trong một tệp bố cục; bố cục này đã được thiết kế để hiển thị giữa đất sw512dp và đất sw765dp.

Mã bên dưới sẽ hoạt động nếu tôi có thể tìm cách làm cho Android thu nhỏ bố cục ở bên trái (khi bố cục cả hai không thể vừa với kích thước được chỉ định). Nhưng theo mặc định, hệ thống sẽ thu nhỏ bố cục ở bên phải đầu tiên.

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

<RelativeLayout 
    android:id="@+id/left" 
    android:layout_width="150dip" 
    android:layout_height="fill_parent" 
    android:background="@color/red" > 
</RelativeLayout> 

<LinearLayout 
    android:id="@+id/right" 
    android:layout_width="100dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@color/green" > 
</LinearLayout> 

Mã này (từ @Lokesh) sẽ làm việc nếu tôi không cần bố trí ở bên trái để ngừng mở rộng tại một điểm nhất định.

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

<LinearLayout 
    android:id="@+id/left" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_toLeftOf="@+id/right" 
    android:background="@color/red" > 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/right" 
    android:layout_width="100dip" 
    android:layout_height="fill_parent" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@color/green" > 
</LinearLayout> 

Nó cũng sẽ được tốt đẹp để biết nếu có ai nghĩ này là không thể vì vậy tôi có thể nghỉ mát để làm việc đó một cách thực dụng hoặc thay đổi cách tiếp cận của tôi để bố trí.

Cảm ơn!

+0

Chính xác những gì * các chế độ xem * này bạn đang nói đến? Tôi có nghĩa là Layouts hoặc vật dụng? –

+0

Thử đăng mã – Chaitanya

+0

Điều này phải dễ thực hiện nhưng phụ thuộc vào ý bạn là gì * chiếm hết dung lượng còn lại đến giới hạn *. – Luksprog

Trả lời

3

Điều này phù hợp với tôi. Tôi đã đặt bố cục đúng thành 100dip, thay đổi theo nhu cầu của 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:orientation="horizontal" > 

    <LinearLayout 
     android:id="@+id/left" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_toLeftOf="@+id/right" 
     android:background="@color/red" > 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/right" 
     android:layout_width="100dip" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@color/green" > 
    </LinearLayout> 

</RelativeLayout> 

EDIT 1: tôi đã sử dụng màu nền chỉ để rành mạch hiển thị bố cục. Không cần thiết chút nào. :)

EDIT 2: Nếu bạn muốn có một cách để mở rộng việc bố trí lại tối đa chỉ có một giới hạn sau đó thử này -

<?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:orientation="horizontal" > 

    <LinearLayout 
     android:id="@+id/left" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_toLeftOf="@+id/right"> 
     <LinearLayout 
          android:id="@+id/inner" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent"   
      android:background="@color/yellow"> 

      <TextView 
       android:id="@+id/myTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="This will expand only to a limit" 
       android:maxWidth="300dip" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:background="@color/red" /> 

     </LinearLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/right" 
     android:layout_width="100dip" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:background="@color/green" > 
    </LinearLayout> 

</RelativeLayout> 

Ở đây bạn cần phải đặt widget của bạn trong inner bố trí và đây là những gì nó trông giống như trong các màn hình khác nhau.

3.1in HVGA 3.2in HVGA

5.2in QVGA 5.2in QVGA

Màu sắc được sử dụng: màu đỏ (# FFFF00), màu vàng (# FFFFFF00), xanh lá cây (# FF00FF00).

+0

Cảm ơn, tôi đã thêm ví dụ này và một ví dụ khác có cùng ID bố cục cho bài đăng chính dưới dạng tham chiếu. Vấn đề với điều này là bố trí bên trái sẽ không bao giờ ngừng mở rộng khi màn hình trở nên lớn hơn. Nếu bố trí ở bên trái được gán giá trị nhúng thì khi nó ngừng mở rộng, nó sẽ di chuyển ra khỏi phía bên trái của màn hình chứ không phải là khoảng trống giữa hai bố cục. – zjuhasz

+0

Tôi không chắc chắn nếu bạn có thể đạt được những gì bạn muốn trực tiếp nhưng nếu bạn đặt một số 'Widgets' trong bố trí bạn có thể đạt được bằng cách đặt một Layout bên trong bên trái với' wrap_content' và sau đó đặt 'Widgets' với' 'android: maxWidth'. Chờ tôi sẽ chỉnh sửa câu trả lời của tôi. –

+0

Thông minh, phù hợp với tôi, cảm ơn rất nhiều! – zjuhasz

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