Android GridView高亮显示选中的项目
我正在尝试构建一个基本的颜色选择器,在这里我会显示一个包含10种颜色的列表,供用户选择 我已经决定使用GridView来保存颜色列表,在我的例子中,这些颜色和带有ShapeDrawables的ImageView(希望听到更好的解决方案) 我不知道如何在单击时突出显示选中的项目,以及如何同时只选择一个项目(单选模式) 知道怎么做吗 代码:Android GridView高亮显示选中的项目,android,android-gridview,Android,Android Gridview,我正在尝试构建一个基本的颜色选择器,在这里我会显示一个包含10种颜色的列表,供用户选择 我已经决定使用GridView来保存颜色列表,在我的例子中,这些颜色和带有ShapeDrawables的ImageView(希望听到更好的解决方案) 我不知道如何在单击时突出显示选中的项目,以及如何同时只选择一个项目(单选模式) 知道怎么做吗 代码: 公共类MainActivity扩展AppCompative实现AdapterView.OnItemClickListener{ @凌驾 创建时受保护的void(
公共类MainActivity扩展AppCompative实现AdapterView.OnItemClickListener{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView GridView=(GridView)findViewById(R.id.mygrid);
setAdapter(新的MyAdapter(this));
setOnItemClickListener(this);
}
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//选定颜色
int color=(int)adapterView.getItemAtPosition(i);
//选定视图
ImageView bla=(ImageView)视图;
}
公共类MyAdapter扩展了BaseAdapter{
私人最终上下文c;
公共MyAdapter(上下文c){
这个.c=c;
}
@凌驾
public int getCount(){
返回颜色。长度;
}
@凌驾
公共对象getItem(int i){
返回颜色[i];
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
图像视图颜色;
如果(视图==null){
LinearLayout.LayoutParams lpParams=新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.MATCH_父级);
lpParams.gravity=重心;
ivColor=新图像视图(c);
ivColor.setLayoutParams(lpParams);
}否则{
ivColor=(图像视图)视图;
}
ShapeDrawable shape=新的ShapeDrawable(新的椭圆形());
shape.getPaint().setColor(colors[i]);
形状。设置内部宽度(180);
形状:setIntrinsicHeight(180);
ivColor.setImageDrawable(形状);
返回颜色;
}
私有int[]颜色={
颜色.蓝色,颜色.黑色,颜色.青色,颜色.绿色,颜色.黄色,颜色.灰色,颜色.洋红,颜色.红色
};
}
}
XML:
GridView上有一个“setSelection”方法,可用于维护当前选定的项目位置。您可以在后台或布局中的某个位置为每个项目使用选择器来更改外观:
您需要的是“选择状态”。因此,如果您试图设置背景颜色,请创建一个可绘制的xml文件,如下所示,并将其设置为色样的背景
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true" android:color="hex_color" />
<item android:state_selected="false" android:color="hex_color_unselected" />
</selector>
您可以做很多选择,例如在选定的样例周围放置边框,等等。。。但这是最基本的想法
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<GridView
android:id="@+id/mygrid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:columnWidth="64dp"
android:horizontalSpacing="8dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="8dp" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true" android:color="hex_color" />
<item android:state_selected="false" android:color="hex_color_unselected" />
</selector>