Câu hỏi Làm thế nào để thêm (dọc) chia cho một LinearLayout ngang?


Tôi đang cố gắng để thêm một chia cho một bố trí tuyến tính ngang nhưng tôi không nhận được hư không. Bộ chia không hiển thị. Tôi là một người mới sử dụng Android.

Đây là XML bố cục của tôi:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/llTopBar"
        android:orientation="horizontal"
        android:divider="#00ff00"
        android:dividerPadding="22dip"
        android:showDividers="middle"
       >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf" />
            <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="asdf"
             />

    </LinearLayout>

</RelativeLayout>

75
2018-02-28 06:08


gốc


Bạn đang chạy phiên bản Android nào? setDividerDrawable chỉ tồn tại kể từ API 11 - alex
thạch đậu 4.2 api 17 - Ahmed-Anas
Nếu bạn đã thử mọi thứ khác, hãy đảm bảo LinearLayout có định hướng chính xác. Đặt chiều cao cho dải phân cách có hướng nằm ngang sẽ rất khó hiểu. - Nino van Hooff
đừng quên sự phẫn nộ SHOWDIVIDERS mục !!!!!! - Fattie


Các câu trả lời:


sử dụng điều này cho chia ngang

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/honeycombish_blue" />

và điều này cho chia dọc

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/honeycombish_blue" />

HOẶC nếu bạn có thể sử dụng bộ chia LinearLayout, cho dải phân cách ngang

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:height="1dp"/>
    <solid android:color="#f6f6f6"/>
</shape>

và trong LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@drawable/divider"
    android:orientation="vertical"
    android:showDividers="middle" >

Nếu bạn muốn người dùng chia dọc thì thay cho android:height="1dp" trong sử dụng hình dạng android:width="1dp"

Tiền boa: Đừng quên các android:showDividers mục.


182
2018-02-28 06:17



cảm ơn. nhưng làm thế nào tôi sẽ thêm điều này vào thuộc tính "android: divider"? về cơ bản, ý tôi là, một cách tự động nào đó để thêm bộ chia giữa mỗi phần tử? Tôi có nghĩa là không phải là lý do tại sao thuộc tính android: divider là có? - Ahmed-Anas
@ death_relic0 android: divider là avil cho ListView, có thể mở rộng Listview và TabWidget - Padma Kumar
cảm ơn, nhưng tại sao nó ở đây sau đó: s developer.android.com/reference/android/widget/… - Ahmed-Anas
Có vẻ như bạn nên sử dụng bất kỳ màu vẽ nào, không phải màu - demaksee
Có vẻ bạn đã có layout_width và layout_height giá trị hỗn hợp lên: cho ngang layout_width nên là "fill_parent" và layout_height nên là "1dp". Nên được hoán đổi tương tự cho bộ chia dọc. - Jay Sidri


Hãy thử điều này, tạo dải phân cách trong res/drawable thư mục:

vertical_divider_1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">    
    <size android:width="1dip" />
    <solid android:color="#666666" />    
</shape> 

Và sử dụng divider thuộc tính trong LinearLayout như sau:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:orientation="horizontal"
    android:divider="@drawable/vertical_divider_1"
    android:dividerPadding="12dip"
    android:showDividers="middle"
    android:background="#ffffff" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

Chú thích:  android:divider chỉ khả dụng trong Android 3.0 (API cấp 11) trở lên.


64
2018-02-28 06:24



nhưng điều đó sẽ chỉ thêm một dải phân cách .. giả sử tôi có 10 phần tử, thêm mã bổ sung cho dải phân cách giữa mỗi phần tử có vẻ như một sự lãng phí - Ahmed-Anas
@ death_relic0 Tại sao bạn không tạo bố cục riêng biệt cho dải phân cách và sau đó sử dụng thẻ bao gồm để thêm nó ở bất kỳ đâu và bao nhiêu lần bạn muốn. Tôi nghĩ điều này sẽ giúp tôi tốt hơn và không lãng phí. - GrIsHu


Thật dễ dàng để thêm dải phân cách vào bố cục, chúng tôi không cần một chế độ xem riêng biệt.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:divider="?android:listDivider"
    android:dividerPadding="2.5dp"
    android:orientation="horizontal"
    android:showDividers="middle"
    android:weightSum="2" ></LinearLayout>

Đoạn mã trên tạo dải phân cách dọc cho LinearLayout


29
2017-10-21 06:51



Tôi luôn quên thuộc tính showDividers. Cảm ơn bạn! - Unknownweirdo
Làm thế nào để hiển thị ngang divider programatically? - Ketan Mehta
Cảm ơn bạn đã sử dụng mẹo? Android: listDivider. Tôi chỉ nhận thấy rằng điều này là vô hình trong API 21 hoặc cao hơn. Trong các phiên bản API thấp hơn, một dòng màu xám nhỏ được hiển thị - user114676
@KetanMehta chúng ta sẽ định nghĩa nó với thuộc tính 'android: divider', nó có thể vẽ được hoặc màu sắc. - khaintt
Android: divider có hỗ trợ API 15 + không? - RoCk


Cập nhật: pre-Honeycomb bằng AppCompat

Nếu bạn đang sử dụng thư viện AppCompat v7, bạn có thể muốn sử dụng LinearLayoutCompat lượt xem. Sử dụng phương pháp này, bạn có thể sử dụng các dải phân cách có thể vẽ trên Android 2.1, 2.2 và 2.3.

Mã ví dụ:

<android.support.v7.widget.LinearLayoutCompat
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:showDividers="middle"
        app:divider="@drawable/divider">

drawable / divider.xml: (chia với một số đệm trên đầu và cuối)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetBottom="2dp"
        android:insetTop="2dp">
    <shape>
        <size android:width="1dp" />
        <solid android:color="#FFCCCCCC" />
    </shape>
</inset>

Lưu ý rất quan trọng: Các LinearLayoutCompat xem không mở rộng LinearLayout và bạn không nên sử dụng android:showDividers hoặc là android:divider thuộc tính nhưng tùy chỉnh: app:showDividers và app:divider. Trong mã, bạn cũng nên sử dụng LinearLayoutCompat.LayoutParams không phải LinearLayout.LayoutParams!


15
2018-03-13 16:08



Đây có phải là cách duy nhất để thêm đệm dọc vào ngăn chia không? - SARose
@ SARose no, bạn luôn có thể tạo chế độ xem tùy chỉnh hoặc hack vào các thành phần chế độ xem hiện tại. Tuy nhiên, đây là phương pháp mặc định và ưa thích để thực hiện. - Rolf ツ


Tôi chỉ chạy vào cùng một vấn đề ngày hôm nay. Như các câu trả lời trước đó cho thấy, vấn đề bắt nguồn từ việc sử dụng một màu trong thẻ chia, chứ không phải là một drawable. Tuy nhiên, thay vì viết xml của riêng tôi, tôi thích sử dụng các thuộc tính theo chủ đề càng nhiều càng tốt. Bạn có thể sử dụng android: attr / dividerHorizontal và android: attr / dividerVertical để có được bản vẽ được xác định trước thay vào đó:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showDividers="middle"
    android:divider="?android:attr/dividerVertical"
    android:orientation="horizontal">
    <!-- other views -->
</LinearLayout>

Các thuộc tính có sẵn trong API 11 trở lên.

Ngoài ra, như đã đề cập bởi bocekm trong câu trả lời của mình, thuộc tính dividerPadding KHÔNG thêm phần đệm thừa ở hai bên của một dải phân cách dọc, như người ta có thể giả định. Thay vào đó nó định nghĩa phần đệm trên và dưới và do đó có thể cắt bớt dải phân cách nếu nó quá lớn.


8
2018-03-31 16:55





Bực bội, bạn phải bật hiển thị các ngăn từ mã trong hoạt động của bạn. Ví dụ:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set the view to your layout
    setContentView(R.layout.yourlayout);

    // Find the LinearLayout within and enable the divider
    ((LinearLayout)v.findViewById(R.id.llTopBar)).
        setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);

}

4
2018-06-28 22:04





Bạn có thể sử dụng bộ chia tích hợp, điều này sẽ làm việc cho cả hai hướng.

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:divider="?android:attr/listDivider"
  android:orientation="horizontal"
  android:showDividers="middle">

4
2018-02-29 16:53





Dải phân cách của bạn có thể không hiển thị do dải phân cách quá lớn. Bạn đặt 22dip, điều đó có nghĩa là bộ chia được cắt bớt 22dip từ trên xuống và 22dip từ dưới cùng. Nếu chiều cao bố cục của bạn nhỏ hơn hoặc bằng 44dip thì không có dải phân cách nào hiển thị.


1
2018-05-15 16:09





Bạn phải tạo bất kỳ chế độ xem nào cho dấu phân cách như textview hoặc imageview sau đó đặt nền cho điều đó nếu bạn có hình ảnh khác sử dụng màu làm nền.

Hy vọng điều này sẽ giúp bạn.


0
2018-02-28 06:20





Để được rút ra, chia LinearLayout phải có một số chiều cao trong khi ColorDrawable (về bản chất #00ff00cũng như bất kỳ màu cứng nào khác) không có. Cách đơn giản (và chính xác) để giải quyết vấn đề này, là bọc màu của bạn vào một số Drawable với chiều cao được xác định trước, chẳng hạn như shape có thể vẽ được


0
2018-01-06 17:47





Bạn có thể sử dụng IcsLinearLayout, như được sử dụng trên thư viện ActionBarSherlock hoặc sử dụng API thông thường có sẵn trên ICS (hoặc sao chép mã của nó).

EDIT: bạn cũng có thể sử dụng LinearLayoutICS như được sử dụng trên thư viện hỗ trợ. Tôi đã viết một bài về nó đây.

Bạn có thể sử dụng kỹ thuật tương tự để tạo hình vẽ như được hiển thị đâyhoặc tạo bản vẽ 9 bản vẽ.


0
2018-02-01 18:26