我正在开发一个选项卡应用程序,其中的一个片段CollectionsFragment包含一个GridView,在每个插槽中都有一个ImageView。我想使用选择器来在用户点击其中一张图片时给出反馈。
我已经成功地实现了选择器,但是我的问题是选择器仅在图像的背景中绘制,我希望它能覆盖整个图像。我已经看到其他地方提到这个问题,但是被许多人选择的解决方案设置GridView的drawSelectorOnTop属性对我不起作用。
相关片段和适配器代码如下:
感谢您的帮助。
我已经成功地实现了选择器,但是我的问题是选择器仅在图像的背景中绘制,我希望它能覆盖整个图像。我已经看到其他地方提到这个问题,但是被许多人选择的解决方案设置GridView的drawSelectorOnTop属性对我不起作用。
相关片段和适配器代码如下:
public class CollectionsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_collections, container, false);
// Grid view is inside the xml view inflated above
GridView gridView = (GridView)view.findViewById(R.id.gridview);
gridView.setDrawSelectorOnTop(true);
((GridView) gridView).setAdapter(new CustomGridViewAdapter(getActivity()));
return view;
}
private class CustomGridViewAdapter extends BaseAdapter {
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
TextView name;
if(v == null) {
v = inflater.inflate(R.layout.collections_item, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView)v.getTag(R.id.picture);
name = (TextView)v.getTag(R.id.text);
Item item = (Item)getItem(i);
name.setText(item.name);
picture.setImageResource(item.drawableId);
picture.setBackgroundResource(R.drawable.selector);
return v;
}
}
}
完整的选择器如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/buttonhighlight"/> <!-- pressed state -->
<item android:state_focused="true"
android:drawable="@color/buttonhighlight"/> <!-- focused state -->
<item android:drawable="@android:color/transparent"/> <!-- default state -->
</selector>
感谢您的帮助。
gridView.setSelector(R.color.buttonhighlight));
而不是在这个答案中的示例代码gridView.setSelector(getResources().getDrawable(R.drawable.selector));
。 - JoeR.color.buttonhighlight
作为您的选择器只适用于故障排除,我猜 :) - JoeJoe
的建议吗? - Vikram