Liên hệ
Ủng hộ, đăng ký theo dõi kênh

Tài nguyên Drawable (6) ảnh StateListDrawable trong Android

Tạo ảnh Drawable biểu thị nhiều trạng thái StateListDrawable để sử dụng làm nền cho các control cũng như tùy biến các hình ảnh biểu tượng diễn tả trạng thái

Tài nguyên StateListDrawable <selector>

StateListDrawable là loại Drawable mà nó chứa nhiều phần tử <item> bên trong, mỗi phần tử này biểu diễn một Drawable, chúng biểu diện một vài trạng thái nào đó của View khi làm đối tượng đồ họa cụ thể trong từng loại View như làm nền, làm biểu tượng lựa chọn ...

Cú pháp xml tạo ra StateListDrawable như sau:

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <!--Drawable của item-->
    </item>

    <item>
        <!--Drawable của item-->
    </item>
    <!-- ... -->
</selector>

Thuộc tính của <item> trong LayerDrawable

<item> (lớp) của LayerDrawable bên trong nó có chứa phần tử con là bất kỳ loại Drawable nào đã biết như bitmap, vector ... và có thể thiết lập các thuộc tính như sau:

Thuộc tính Ý nghĩa
android:state_pressed
android:state_checked
android:state_selected
android:state_activated
android:state_focused
android:state_active
android:state_enabled
Thiết lập bằng true thì Drawable của Item biểu diễn trạng thái tương ứng. Nếu thiết lập bằng false biểu diễn không kích hoạt trạng thái có tên tương ứng. Nếu không thiết lập thì không có diễn tả gì cho trạng thái đó. Ví dụ:
  • android:state_pressed="true" Drawable biểu thị trạng thái bị nhấn
  • android:state_pressed="false" Drawable biểu thị trạng thái không bị nhấn
  • Không có thiết lập android:state_pressed thì khi nhấn / không nhấn không sử dụng đến Drawable này

Ví dụ StateListDrawable

Tạo file xml có tên res/drawable/statelistexample.xml

<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither="true">
    <item android:state_pressed="true">
      <shape android:shape="oval">
            <gradient android:angle="270"
                      android:endColor="#D1362B"
                       android:startColor="#94231B" />
            <stroke
                android:width="1dp"
                android:color="#96231D" />
            <corners android:radius="4dp" />
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />
     </shape>
    </item>


    <item>
         <shape>
            <gradient
                android:angle="270"
                android:endColor="#94231B"
                android:startColor="#D1362B" />
            <stroke
                android:width="1dp" a
                ndroid:color="#96231D" />
            <corners android:radius="4dp" />
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />
        </shape>

    </item>

</selector>

StateListDrawable này biểu thị hai trạng thái nhấn / không nhấn. Khi không nhấn dùng Drawable có hình chữ nhật, khi nhấn dùng Drawable có hình Oval. Đặt làm nền cho Button có kết quả như sau:

Vui lòng đăng ký ủng hộ kênh