0

でAndroidアプリを開発していGridViewます。gridView にはボタンが含まれています。ボタン アダプターを使用して gridView をカスタマイズしました。

問題は、選択したアイテムを境界線で強調表示したままにする必要があるということです。プレスを離すと、選択が消えます。
私はアンドロイドの専門家ではありません。ボタンを押した後の次のステップは、「確認」と書かれた雲の形の画像を表示することです。

これはまさに私が必要としていたものです。

4

1 に答える 1

3

フォルダーに名前の付いたフォルダーを作成しdrawableますresxml次に、フォルダーにファイルを作成し、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;
    }

}
于 2013-04-29T11:11:25.503 に答える