2011-07-28 28 views
12
tập tin XML

lưu tại res/drawable/gradient_box.xml:Hình dạng có thể vẽ không hiển thị khi được sử dụng kết hợp với thuộc tính android: drawableBottom.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
</shape> 

(Định nghĩa hình trên là được lấy từ hướng dẫn phát triển sau đó Android Không có lỗi trong đó..).

Hãy cố gắng sử dụng nó cùng với một TextView:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with some crazy rectangle shape below it." 
    android:drawableBottom="@drawable/gradient_box"/> 

Các màn TextView, nếu như thuộc tính drawableBottom không có ở đó! Tuy nhiên, đặt hình dạng làm nền hoạt động tốt:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with crazy background" 
    android:background="@drawable/gradient_box"/> 

Đặt hình ảnh thực tế (ví dụ: * .png) thành android: drawableBottom cũng hoạt động tốt.

Bất kỳ ý tưởng nào?

Trả lời

31

Giải quyết! Vấn đề có vẻ là một hình dạng không nhất thiết phải có giới hạn nội tại. Đó là, kết quả drawable không biết làm thế nào để vẽ chính nó!

Để giải quyết vấn đề này, chỉ cần xác định kích thước của hình dạng, như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
    <size android:width="xxdp" 
      android:height="xxdp"/> 
</shape> 

Khi hình dạng đã được quy định như đối tượng vẽ được nền cho TextView, kích thước của nó được biết đến là giống như Kích thước TextView. Khi nói hình dạng đi tới bên phải hoặc phía trên TextView, kích thước hình dạng không thể được xác định tự động.

+4

Không thể đặt chiều rộng match_parent trong trường hợp này. –

+1

Đối với tôi, thiết lập gradient có thể vẽ được khi tôi đã đặt nó theo chương trình, ví dụ như ở đây https://stackoverflow.com/questions/8481322/create-a-radial-gradient-programmatically – foo

1

Nếu bạn đang sử dụng ImageView để lưu trữ hình dạng đường như thuộc thuộc tính "android: src", bạn cũng sẽ gặp phải vấn đề tương tự trừ khi bạn chỉ định chiều rộng và chiều cao như một phần của hình dạng xml. Một giải pháp khác là lưu trữ hình dạng đường như một phần của thuộc tính "android: background" của ImageView. Bằng cách này, bạn có thể sử dụng các thuộc tính kích thước của ImageView cho hình dạng đường thẳng để "hiển thị" qua.

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