تغییر ظاهر item های ListView ، در حالت های مختلف اشاره بر روی آنها (حالت های focused و focused and pressed و pressed و default)، در برنامه نویسی اندروید
فرض کنید که قصد داریم که هنگام اشاره کاربر بر روی item های ListView (برای حالت های focused و focused and pressed و pressed و default)، ظاهر item اشاره شده، تغییر پیدا کند. برای این منظور، فرض کنید که مثلا کدهای فایل xml حاوی تگ ListView ، به صورت زیر باشد :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF" >
<ListView
android:id="@+id/el"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp" />
</RelativeLayout>
مشخصه های زیر را به تگ ListView اضافه می کنیم :
android:listSelector="@drawable/listview_selector_1"
یعنی کدهای فایل xml به صورت زیر تغییر داده می شود :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF" >
<ListView
android:id="@+id/el"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp"
android:drawSelectorOnTop="true"
android:listSelector="@drawable/listview_selector_1" />
</RelativeLayout>
با قرار دادن مشخصه drawSelectorOnTop برابر true ، تعیین کرده ایم که تغییراتی که مد نظرمان است (یعنی Selector ای که انتخاب خواهیم کرد)، بر روی لایه مربوط به item قرار بگیرد (نه در پشت آن). مثلا در ادامه، ما رنگ های مختلفی (معمولا نیمه شفاف که item هم مشخص باشد) را برای تغییرات item ها در نظر می گیریم که بر روی کل item نمایش داده می شوند (آن را می پوشانند).
با مشخصه listSelector ، به Selector ای که ویژگی های حالت های مختلف را تعریف می کند، اشاره کرده ایم (چگونگی ساخت آن را در ادامه شرح می دهیم).
اکنون در پوشه های drawable از پروژه اندروید، یک فایل xml با نام listview_selector_1.xml می سازیم که شامل کدهای زیر می باشد :
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/color_1" /> <!-- focused -->
<item android:state_focused="true" android:state_pressed="true" android:drawable="@color/color_2" /> <!-- focused and pressed -->
<item android:state_pressed="true" android:drawable="@color/color_3" /> <!-- pressed -->
<item android:drawable="@color/color_4" /> <!-- default -->
</selector>
مشاهده می کنید که برای 4 حالت زیر، چهار رنگ را تعیین کرده ایم :
focused and pressed --> color_2
pressed --> color_3
default --> color_4
این 4 رنگ (که معمولا نیمه شفاف انتخاب می شوند، البته اگر بر روی item ها قرار بگیرند) را باید در فایل colors.xml در پوشه values تعریف کنیم (