2011-12-06 48 views
17

Trong bố cục xml android của tôi, tôi đang áp dụng đường viền bằng cách sử dụng borderframe.xml làm nền.Tại sao tôi không thể tạo đường viền tròn cho góc cụ thể?

tập tin borderframe.xml được trông giống như dưới đây:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px"/> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

Bây giờ, khi có một android: bán kính = "10px", sau đó nó là công trình nhưng trong khi tôi đang đi để cung cấp cho hình tròn để chỉ góc cụ thể sau đó nó không hoạt động. Không có bất kỳ thông báo Erro trong nhật ký mèo nhưng tôi tìm thấy lỗi trong nhật thực như:

The graphics preview in the layout editor may not be accurate: 
* Different corner sizes are not supported in Path.addRoundRect. 

Thậm chí nếu không có đệm ở chỗ tập tin xml sau đó cũng tôi không thể nhìn thấy bất kỳ biên giới.

Bây giờ, tôi phải làm gì cho nó? và whats sollution của nó nếu tôi muốn tạo đường viền tròn cho chỉ topLeftcorner và bottomLeftCorner. ? Cảm ơn.

Trả lời

10

Bạn sẽ phải làm điều đó, giả sử bạn chỉ muốn có một góc phía trên bên trái tròn:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <corners 
     android:radius="20sp" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" 
     android:bottomLeftRadius="0dp" /> 
    <gradient 
     android:startColor="@color/logo_blue" 
     android:endColor="@color/blue" 
     android:angle="0"/> 
</shape> 

Giải thích: Mỗi góc phải (ban đầu) được cung cấp một góc bán kính lớn hơn 1, nếu không không có góc nào được làm tròn. Nếu bạn muốn các góc cụ thể không được làm tròn, xung quanh công việc là sử dụng android:radius để đặt bán kính góc mặc định lớn hơn 1, nhưng sau đó ghi đè từng góc và với các giá trị bạn thực sự muốn, cung cấp số không ("0dp") bạn không muốn các góc tròn. [source]

Do đó, bạn cần xác định drawable của bạn như:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" /> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

Cập nhật

Từ The Shape Drawable Resource Android Documentation:

android: bán kính Dimension. Bán kính cho tất cả các góc, làm kích thước giá trị hoặc tài nguyên kích thước. Điều này được ghi đè cho mỗi góc bởi các thuộc tính sau đây .

ghi đè là từ khóa cho vấn đề của bạn ...

+0

OK Cảm ơn. Hãy để tôi thử nó. –

+1

Ok Cảm ơn. Nhưng nếu không có padding xác định trong hình dạng sau đó tôi không thể nhìn thấy biên giới. . tại sao ? –

+0

Nếu không có đệm vào hình dạng đó thì tôi không thể nhìn thấy góc vì sao ?? –

6

Tôi đang sử dụng các công cụ SDK 19, nền tảng công cụ 11 và chạy các ứng dụng trong Android 4.0.3. Sử dụng XML sau hoạt động cho tôi:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="#dd000000"/> 
    <padding 
     android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners 
     android:bottomLeftRadius="25dp" 
     android:bottomRightRadius="25dp" 
     android:topLeftRadius="0dp" 
     android:topRightRadius="0dp" /> 
</shape> 

Cảnh báo Eclipse không thể hiển thị bản xem trước. Trong ứng dụng het nó hiển thị chính xác.

+0

Aha. Nó vẫn xảy ra với Android Studio kể từ bây giờ. –

16

Tôi cũng đang gặp phải vấn đề tương tự. Nhưng tôi sử dụng danh sách lớp. Tôi đăng câu trả lời của tôi ở đây có thể giúp bạn.
Vui lòng kiểm tra màn hình đầu ra image 1

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
      <corners android:radius="20dp"/> 
     </shape> 
    </item> 

    <item android:right="20dp" 
     > 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
     </shape> 
    </item> 

</layer-list> 
+0

Đây là cái duy nhất phù hợp với tôi. Cảm ơn. – black

0

tôi có những giải pháp trên một trong các diễn đàn. Tôi giải quyết nó bằng cách bình luận mỗi góc & thêm vào xml trong drawable.Tôi đã giữ lại mã bình luận dưới đây chỉ để hiểu.

XML số-

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 
     <solid android:color="#fd2149" /> 
     <stroke android:width="1dip" android:color="#ffd102"/> 
     <!-- <corners 
      android:bottomLeftRadius="8dp" 
      android:bottomRightRadius="8dp" 
      android:topLeftRadius="8dp" 
      android:topRightRadius="8dp" /> 
     --> 
     <corners android:radius="8dp" /> 
    </shape> 

--- Edited- Đoạn mã trên là back.xml của tôi trong thư mục drawable và nếu cần bạn có thể thêm đệm vào back.xml cùng. Đối với những người là nhà phát triển mới, tệp back.xml được tham chiếu từ tệp bố cục của bạn như sau

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="20sp" 
    android:scrollbars="vertical" 
    android:background="@drawable/back"> 

Hy vọng điều này sẽ hữu ích.

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