Gridview选中的项目保持突出显示并确认图像

时间:2013-04-29 09:58:56

标签: android android-listview android-gridview

我正在使用GridView开发一款Android应用。 gridView包含按钮。我已经使用按钮适配器定制了我的gridView。

问题是:我需要用边框突出显示所选项目。现在,在释放印刷机后,选择正在消失。
我不是android的专家。因此,按下按钮后的下一步是显示“确认”的云形图像。

This是我真正需要的。

1 个答案:

答案 0 :(得分:3)

drawable文件夹中创建名为res的文件夹。现在在xml文件夹中创建一个drawable文件,将其命名为任何名称(小写)并将此代码放入文件中。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_focused="true" android:state_pressed="true"><shape>

            <!-- <solid android:color="#CCCCCC"/> -->

            <gradient android:endColor="#67A7F8" android:startColor="#1067C8" />

            <stroke android:width="1dp" android:color="#000000" />

            <corners android:radius="8dp" />
        </shape></item>
    <item android:state_focused="false" android:state_pressed="true"><shape>

            <!-- <solid android:color="#07B107"/> -->

            <gradient android:endColor="#67A7F8" android:startColor="#1067C8" />

            <stroke android:width="1dp" android:color="#000000" />

            <corners android:radius="8dp" />
        </shape></item>
    <item android:state_focused="true" android:state_pressed="false"><shape>
            <solid android:color="#FFFFFF" />

            <stroke android:width="1dp" android:color="#0055FF" />

            <corners android:radius="8dp" />
        </shape></item>
    <item android:state_focused="false" android:state_pressed="false"><shape>
            <gradient android:angle="270" android:centerColor="#FFFFFF" android:endColor="#FFFFFF" android:startColor="#F2F2F2" />

            <stroke android:width="0.8dp" android:color="#000000" />

            <corners android:radius="12dp" />
        </shape></item>
    <item android:state_enabled="true"><shape>
            <padding android:bottom="4dp" android:left="5dp" android:right="4dp" android:top="4dp" />
        </shape></item>

</selector>

现在在GridView代码集android:drawSelectorOnTop="true"android:listSelector属性中,然后选择您刚创建的drawable。它将解决您的问题。

您的网格视图代码如下所示:

    <GridView
        android:id="@+id/lstFrames_available_frames"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:layout_weight="1"
        android:animateLayoutChanges="true"
        android:columnWidth="100dp"
        android:gravity="center"
        android:horizontalSpacing="3dp"
        android:listSelector="@drawable/round_buttons"
        android:numColumns="auto_fit"
        android:drawSelectorOnTop="true"
        android:stretchMode="columnWidth"
        android:verticalSpacing="3dp" >
    </GridView>

<强>更新 你可以在自定义适配器中使用这样的东西来实现你想要的东西:

public class AlbumCoverAdapter extends BaseAdapter {

    private Activity activity;

    private static LayoutInflater inflater = null;

    private int mSelected;

    public AlbumCoverAdapter(Activity a) {
        activity = a;

        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return 50;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public static class ViewHolder {
        public TextView txtCaption;

        public ImageView imgImage;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        ViewHolder holder;
        if (convertView == null) {
            vi = inflater.inflate(R.layout.grid_adapter, null);
            holder = new ViewHolder();
            holder.txtCaption = (TextView)vi.findViewById(R.id.txtGridText);
            holder.txtCaption.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    mSelected = (Integer)arg0.getTag();
                    notifyDataSetChanged();
                }
            });
            vi.setTag(holder);
        } else
            holder = (ViewHolder)vi.getTag();

        try {
            holder.txtCaption.setTag(position);

            if (position == mSelected) {
                holder.txtCaption.setBackgroundResource(R.drawable.round_corner_background);
            } else {
                holder.txtCaption.setBackgroundDrawable(null);

            }

            holder.txtCaption.setText("Item: " + position);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return vi;
    }

}
相关问题