3

アプリのホーム画面で、androidのメニューに似ているが、特定のセルにアイテムを表示する必要がないメニューを表示する方法。3 x 3 のグリッドを考慮すると、[0,1]、[1,0]、[1,1]、[1,2]、[2,1] の 5 つのアイテムを (行、列) に表示するだけで済みます。 .

GridView を試し、表示する必要のないアイテムの可視性を GONE (convertView.setVisibility(View.GONE);) に設定しました。これに続いて、アイテムはグリッドに表示されませんが、ユーザーが上下キーを使用して空白のアイテムを参照するか、空白のアイテムを直接クリックすると、そのアイコンが強調表示され、グリッドの空白のアイテムであるかのように選択されます。空白なので、ユーザー イベントに応答しないようにする必要があります。強調表示も選択もされません。

グリッド ビューのコード:

package org.XXX;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class XXXActivity extends Activity {
    GridView MyGrid;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.maingrid);
        MyGrid = (GridView)findViewById(R.id.MyGrid);
        MyGrid.setAdapter(new ImageAdapter(this));


        MyGrid.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                Toast.makeText(arg0.getContext(), position + " selected", Toast.LENGTH_LONG).show();

                switch(position) {
                case 0:break;
                case 1:
                    //Browse
                    Intent newIntent = new Intent(XXXActivity.this, YYYListItemIcons.class);
                    startActivity(newIntent);
                    break;
                case 2:break;
                case 3:
                    //Saved Searches
                    newIntent = new Intent(XXXActivity.this, ZZZListItemIcons.class);
                    startActivity(newIntent);
                    break;
                case 4:
                    //Sign in
                    break;
                case 5:
                    //Reminders
                    break;
                case 6:break;
                case 7:
                    //Sign up
                    break;
                case 8:break;
                }
            }

        });

        //onSearchRequested(); //to open search by default
    }


    public class ImageAdapter extends BaseAdapter
    {
        Context MyContext;

        public ImageAdapter(Context _MyContext)
        {
            MyContext = _MyContext;
        }

        @Override
        public int getCount()
        {
            return 9;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;
            LayoutInflater mInflater = LayoutInflater.from(MyContext);

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.grid_item, null);
                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.grid_item_text);
                holder.icon = (ImageView) convertView.findViewById(R.id.grid_item_image);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // Bind the data efficiently with the holder.
            holder.text.setText(getTextId(position));
            holder.icon.setImageBitmap(BitmapFactory.decodeResource(MyContext.getResources(), getIconId(position)));
            if(getIconId(position) == R.drawable.nothing) {
                convertView.setVisibility(View.GONE);
            }
            return convertView;
        }

        @Override
        public Object getItem(int arg0) {
            return arg0;
        }

        @Override
        public long getItemId(int arg0) {
            return arg0;
        }

        private int getIconId(int position) {
            int iconImages[] = {
                    R.drawable.nothing,
                    R.drawable.browse,
                    R.drawable.nothing,
                    R.drawable.saved_searches,
                    R.drawable.sign_in,
                    R.drawable.reminders,
                    R.drawable.nothing,
                    R.drawable.sign_up,
                    R.drawable.nothing
            };
            return iconImages[position];
        }

        private int getTextId(int position) {
            int iconNames[] = {
                    R.string.nothing,
                    R.string.browse,
                    R.string.nothing,
                    R.string.saved_searches,
                    R.string.sign_in,
                    R.string.reminders,
                    R.string.nothing,
                    R.string.sign_up,
                    R.string.nothing
            };
            return iconNames[position];
        }

    }

    static class ViewHolder {
        TextView text;
        ImageView icon;
    }

}

グリッドレイアウト:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/MyGrid"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
    android:padding="5dp"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="20dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"
    android:gravity="center">
</GridView>            

グリッドの PerItemIconLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/GridItem"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:gravity="center_horizontal">

   <ImageView android:id="@+id/grid_item_image"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
   </ImageView>

   <TextView android:id="@+id/grid_item_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="TextView"
      android:gravity="center_horizontal"
      android:textColor="#FFFFFF">
   </TextView>

</LinearLayout>
4

2 に答える 2

1
if(getIconId(position) == R.drawable.nothing) {
convertView.setVisibility(View.GONE);
}

上記の行を以下に置き換えて試してください....

if(getIconId(position) == R.drawable.nothing) {
   convertView.setVisibility(View.GONE);
   convertView.setClickable(false);
   convertView.setEnabled(false);
}

getview() でこのコードを試してください。

于 2012-04-05T05:32:43.173 に答える
0

コードを投稿したので、技術的に削除できるかどうかはわかりませんが、あなたが話している「強調表示された」クリックを無効にすることができます。このようにして、ユーザーがアイコンの 1 つをクリックすると、それはもはやハイライトします。

これは、XML またはコードで行うことができます。

https://stackoverflow.com/questions/2865683/android-disable-highlighting-in-gridview

Code: GridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
XML: android:listSelector="#00000000"

ただし、これはグリッドビューのすべてのアイコンに影響します。

これも見てください:

https://stackoverflow.com/questions/5514629/how-to-disable-item-click-for-particular-positions-in-grid-view-in-android

于 2012-04-05T04:51:46.193 に答える