TextView必須設定focus屬性, 才能使focused/pressed行為生效, 即這兩行
android:focusable="true"
android:focusableInTouchMode="true"
android:focusableInTouchMode="true"
<TextView
android:id="@+id/tv_communication"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Communication"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColor="@drawable/selector_communication_textcolor"
android:background="@drawable/selector_communication_background"
/>
接下來需要在./res/drawable/自訂.xml來規範focused/pressed行為
state_focused="true"時, 字體顏色為黑色
state_pressed="true"時, 字體顏色為紅色
<item
android:color="@color/white"
/>
表示既沒有focused也沒有pressed時, 字體顏色為白色
./res/drawable/selector_communication_textcolor.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true"
android:state_pressed="false"
android:color="@color/black"
/>
<item
android:state_focused="true"
android:state_pressed="true"
android:color="@color/red"
/>
<item
android:state_focused="false"
android:state_pressed="true"
android:color="@color/red"
/>
<item
android:color="@color/white"
/>
</selector>
state_focused="true"時, 換一張背景圖label_focus.png
state_pressed="true"時, 換一張背景圖label_pressed.png
既沒有focused也沒有pressed時, 表示沒有圖
./res/drawable/selector_communication_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true"
android:state_pressed="false"
android:drawable="@drawable/label_focus"
/>
<item
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/label_pressed"
/>
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/label_pressed"
/>
</selector>
在GridView中不必設
android:focusable="true"
android:focusableInTouchMode="true"
因為它有專屬的屬性可以建立這種功能, 即android:listSelector
android:verticalSpacing="40dip"←表示每一列資料的垂直間隔是40dip
android:numColumns="6" ←表示每一列可以放6筆資料
android:fadingEdge="none" ←當資料超過頁面需要拖拉時, 不要產生陰影的特殊效果
<GridView
android:id="@+id/gv_list"
android:listSelector="@drawable/selector_list_background"
android:verticalSpacing="40dip"
android:numColumns="6"
android:fadingEdge="none"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
一樣在./res/drawable/自訂.xml來規範focused/pressed行為
state_focused="true"時, 換一張圖item_focus.png
state_pressed="true"時, 換一張圖item_pressed.png
既沒有focused也沒有pressed時, 表示沒有圖
./res/drawable/selector_list_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true"
android:state_pressed="false"
android:drawable="@drawable/item_focus"
/>
<item
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/item_pressed"
/>
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/item_pressed"
/>
</selector>
但在變換TextView文字的部份, 有一種作法是再寫一個layout來定義GridView的資料內容
./res/layout/gridview_item.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/name"
android:layout_width="280dp"
android:layout_height="280dp"
android:textColor="@drawable/selector_list_textcolor"
/>
</LinearLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/name"
android:layout_width="280dp"
android:layout_height="280dp"
android:textColor="@drawable/selector_list_textcolor"
/>
</LinearLayout>
gridview_item.xml的引用會在source code裡
LayoutInflater mInflater;
public View getView(int position, View convertView, final ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.gridview_item, null);
}
.
.
.
}
public View getView(int position, View convertView, final ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.gridview_item, null);
}
.
.
.
}
值得注意的是, 在此得用selected/pressed
state_selected="true"時, 字體顏色為黑色
state_pressed="true"時, 字體顏色為紅色
<item
android:color="@color/white"
/>
表示既沒有selected也沒有pressed時, 字體顏色為白色
./res/drawable/selector_list_textcolor.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:state_pressed="false"
android:color="@color/black"
/>
<item
android:state_selected="true"
android:state_pressed="true"
android:color="@color/red"
/>
<item
android:state_selected="false"
android:state_pressed="true"
android:color="@color/red"
/>
<item
android:color="@color/white"
/>
</selector>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
至於前面提到的android:color="@color/black"
android:color="@color/red"
android:color="@color/white"
則是預先在./res/values/colors.xml中定義好
<resources>
<color name="black">#000000</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
</resources>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
沒有留言:
張貼留言