2012-05-13 42 views

Trả lời

23

Theo tôi hiểu, không có cách nào dễ dàng để thực hiện. nhưng nếu bạn sử dụng danh sách lớp với một mục có đường viền và sau đó không có một khoảng trống từ tất cả các cạnh mà bạn muốn có đường viền bằng với chiều rộng đường viền, bạn sẽ đạt được điều đó.

Hãy để tôi làm cho xml cho bạn đại diện cho phía dưới không biên giới ..

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- Border --> 
    <item> 
     <shape> 
      <solid android:color="#f000"></solid> 
     </shape> 
    </item> 
    <!-- Body --> 
    <item android:left="2dip" 
      android:top="2dp" 
      android:right="2dp"> 
     <shape> 
      <solid android:color="#ffafafaf"></solid> 
     </shape> 
    </item> 
</layer-list> 

Như bạn thấy, tôi đang nói sự mục thứ hai được inset của một đầu tiên bởi hai của dp trên tất cả các bên trừ đáy (do đó kết quả không biên giới ở phía dưới), có bạn đi:

enter image description here

Vì vậy, về cơ bản đây không phải là một biên giới mỗi gia nhập, đó là hình dạng từ bên dưới (mặc dù bạn có thể thêm một biên giới nếu bạn cần dấu gạch ngang hoặc chấm hoặc bất kỳ thứ gì) được bao phủ bởi một mục thứ hai sẽ là phần thân của nút. Tất cả trong cùng một drawable :)

Điều này có thể được áp dụng cho bất kỳ biên giới bạn muốn loại bỏ, bằng cách thay đổi các giá trị mà mục là hình chữ nhật, ví dụ, nếu tôi thay đổi right trong mục Body để bottom, các thiếu biên giới sẽ một trong những quyền vì đó là một mà không có sự inset

+0

Vâng, nơi làm Tôi phải đặt phong cách của mình? Trong đầu tiên, phải không? –

+0

Nhân tiện, tôi đang cố gắng sử dụng nó cho EditText. –

+0

Việc bạn áp dụng nó không quan trọng. 'Mục' đầu tiên chỉ dành cho đường viền, vì vậy bạn cần chia kiểu giữa hai mục đó. Nếu bạn muốn có nền màu xanh lá cây chẳng hạn, bạn sẽ thêm nó vào mục thứ hai, cái được gọi là "body" trên mã của tôi –

10

Đây là một chút của một hack, nhưng nó có thể loại bỏ một hoặc nhiều biên giới sử dụng một drawable inset với giá trị âm. Bọc hình dạng trong một inset và áp dụng một tiêu cực android:insetTop, android:insetBottom, android:insetLeft hoặc android:insetRight với giá trị abs bằng với chiều rộng nét.

enter image description here

Ví dụ, để loại bỏ các biên giới phía dưới từ một hình chữ nhật với một cơn đột quỵ 4dp, sử dụng giá trị android:insetBottom của -4dp.

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="-4dp"> 

    <shape android:shape="rectangle"> 
     <solid android:color="#FFFFFF" /> 
     <stroke android:width="4dp" android:color="#000000" /> 
     <corners android:radius="4dp" /> 
    </shape> 

</inset> 

Điều này dường như hoạt động tốt miễn là các góc của hình dạng có bán kính nhỏ hơn chiều rộng nét. Nếu không, hãy sử dụng giá trị lớn hơn của hai giá trị (bán kính) khi áp dụng inset để ẩn hoàn toàn các phần được làm tròn của các đường viền liền kề.

+0

tuyệt vời, Cảm ơn, Nó rất hữu ích –

0

Đó là mẹo xml. Trước tiên, bạn phải tô màu layer với một màu cụ thể (Line Color). Sau đó, bạn phải điền nó với một màu khác (Màu nền) trong khi để đẩy bản vẽ một chút từ phía bạn muốn vẽ đường. Đây là mã của tôi:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

     <!-- First we have to create the line color (Black: #000000 and 
      Set position to 0 from all sides, this will allow us 
      even to to determine border size in any side (top, 
      right, bottom, left) --> 

    <item android:top="0dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000"></solid> 
     </shape> 
    </item> 

    <!-- Here we fill the content with our color, and I will 
     push 1dp from the top so this size (top = 1dp) will 
     keep the previous color and it will look like the border 
     --> 

    <item android:top="1dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f4f4f4"></solid> 
     </shape> 
    </item> 
</layer-list> 

https://i.stack.imgur.com/ifak8.jpg

Ở đây nó trông như thế:

enter image description here

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