Chỉ định chiều rộng cho một nửa chiều rộng màn hình khả dụng một cách khai báo


113

Có thể chỉ định chiều rộng tiện ích cho một nửa chiều rộng màn hình có sẵn và thực hiện bằng cách sử dụng xml khai báo không?

Câu trả lời:


274

Nếu tiện ích của bạn là một Nút:

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal">
    <Button android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="somebutton"/>

    <TextView android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
</LinearLayout>

Tôi cho rằng bạn muốn tiện ích con của mình chiếm một nửa và một tiện ích con khác chiếm nửa còn lại. Thủ thuật là sử dụng LinearLayout, cài đặt layout_width="fill_parent"trên cả hai tiện ích con và đặt layout_weightthành cùng một giá trị trên cả hai tiện ích con. Nếu có hai widget, cả hai đều có cùng trọng lượng, LinearLayout sẽ phân chia chiều rộng giữa hai widget.


15
Tốt hơn hãy sử dụng android: layout_width = "0dp" cho cả hai phần tử con, tránh định cỡ chúng hai lần.
tomash 21/12/12

2
Tôi chưa bao giờ hiểu tại sao bạn phải khai báo layout_width = "0dp"
Andrew

Bạn cũng có thể sử dụng <Space /> trên các phiên bản Android mới hơn làm bộ đệm. Tôi nghĩ View nhẹ hơn TextView một chút nếu bạn chỉ định sử dụng nó như một bộ đệm. layout_width = "0dp" thực sự là cách tiếp cận được khuyến nghị theo tài liệu Android.
Muz

Hoạt động tuyệt vời! Cảm ơn bạn rất nhiều!!
IcyFlame

1
@Andrew: bởi vì theo cách này, trình kết xuất bố cục không cố gắng làm việc với layout_width của thành phần, nó bỏ qua trực tiếp để chia sẻ chiều rộng bổ sung theo trọng số.
njzk2

43

Sử dụng bố cục ràng buộc

  1. Thêm hướng dẫn
  2. Đặt tỷ lệ phần trăm thành 50%
  3. Giới hạn chế độ xem của bạn với Hướng dẫn và cha mẹ.

nhập mô tả hình ảnh ở đây

Nếu bạn gặp sự cố khi thay đổi nó thành phần trăm, thì hãy xem câu trả lời này .

XML

<?xml version="1.0" encoding="utf-8"?>
<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="match_parent"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <android.support.constraint.Guideline
        android:id="@+id/guideline8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5"/>

    <TextView
        android:id="@+id/textView6"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/guideline8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    
</android.support.constraint.ConstraintLayout>

Đây sẽ là câu trả lời tốt nhất.
Jean Eric,

15

cung cấp chiều rộng là 0dp để đảm bảo kích thước của nó chính xác theo trọng lượng của nó, điều này sẽ đảm bảo rằng ngay cả khi nội dung của lượt xem con lớn hơn, chúng vẫn sẽ bị giới hạn ở chính xác một nửa (theo là trọng lượng)

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

    <Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="click me"
    android:layout_weight="0.5"/>


    <TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Hello World"
    android:layout_weight="0.5"/>
  </LinearLayout>

1
Tôi nghĩ rằng android: layout_width = "0dp" là đúng nhưng đặt mỗi trọng số thành 0,5 và weitghtSum thành tổng của chúng thì không cần thiết. Có vẻ như bạn chỉ cần có trọng số như nhau đối với cả hai lượt xem trẻ em ..
jj_

5

Một cách khác cho một mục ở giữa, lấp đầy một nửa màn hình:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:visibility="invisible" />

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2" />

       <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:visibility="invisible" />

</LinearLayout>

1
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/textD_Author"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Author : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
 <TextView
    android:id="@+id/textD_Tag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Edition : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:weightSum="1" >
    <Button
        android:id="@+id/btbEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Edit" />
    <Button
        android:id="@+id/btnDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Delete" />
</LinearLayout>
</LinearLayout>

3
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
gunr2171
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.