0

私はこれに似た何かを達成しようとしています:

ここに画像の説明を入力

ユーザーがグリッド ビューのグリッド セルを長押しすると、上記のようにグリッド セル領域内にメニューが描画されます。誰かがこれに似たものを試したことがある場合、または同じことを行うために利用可能なライブラリがある場合は、私を助けてください.

これは、長押しでコンテキストメニューがどのようにトリガーされるかに関するコードスニペットです。

私のアクティビティクラス:

public class GridViewActivity extends Activity {

GridView gridView;

ImageAdapter mImageAdapter;

static final String[] MOBILE_OS = new String[] {
        "Android", "iOS", "Windows", "Blackberry"
};

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mImageAdapter = new ImageAdapter(this, MOBILE_OS);

    gridView = (GridView)findViewById(R.id.gridView1);

    registerForContextMenu(gridView);
    gridView.setAdapter(mImageAdapter);

    gridView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(getApplicationContext(),
                    ((TextView)v.findViewById(R.id.grid_item_label)).getText(),
                    Toast.LENGTH_SHORT).show();

        }
    });

}

@Override
public void onCreateContextMenu(ContextMenu iMenu, View iView, ContextMenuInfo iMenuInfo) {
    super.onCreateContextMenu(iMenu, iView, iMenuInfo);

    iMenu.setHeaderTitle("OPTIONS");
    iMenu.clear();
    iMenu.add(Menu.NONE, 0, Menu.NONE, "VIEW");
    iMenu.add(Menu.NONE, 1, Menu.NONE, "EDIT");
    iMenu.add(Menu.NONE, 2, Menu.NONE, "SHARE");
    iMenu.add(Menu.NONE, 3, Menu.NONE, "DELETE");
}

ImageAdapter クラス:

public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;
public LayoutInflater inflater;
public LinearLayout linearLayout;

public ImageAdapter(Context context, String[] mobileValues) {
    this.context = context;
    this.mobileValues = mobileValues;
}

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

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

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from mobile.xml
        gridView = inflater.inflate(R.layout.mobile, null);

        // set value into textview
        linearLayout = (LinearLayout)gridView.findViewById(R.id.linear1);
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setText(mobileValues[position]);

        // set image based on selected text
        ImageView imageView = (ImageView) gridView
                .findViewById(R.id.grid_item_image);

        String mobile = mobileValues[position];

        if (mobile.equals("Windows")) {
            imageView.setImageResource(R.drawable.windows_logo);
        } else if (mobile.equals("iOS")) {
            imageView.setImageResource(R.drawable.ios_logo);
        } else if (mobile.equals("Blackberry")) {
            imageView.setImageResource(R.drawable.blackberry_logo);
        } else {
            imageView.setImageResource(R.drawable.android_logo);
        }

    } else {
        gridView = (View) convertView;
    }

    return gridView;
}

@Override
public int getCount() {
    return mobileValues.length;
}

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

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

}

main.xml :

<?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridView1"
        android:numColumns="auto_fit"
        android:gravity="center"
        android:columnWidth="100dp"
        android:stretchMode="columnWidth"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

    </GridView>

mobile.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="50px"
        android:layout_height="50px"
        android:layout_marginRight="10px"
        android:src="@drawable/android_logo" >
    </ImageView>

    <TextView
        android:id="@+id/grid_item_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:layout_marginTop="5px"
        android:textSize="15px" >
    </TextView>

</LinearLayout>

ここで達成しようとしているのは、グリッド セルを長押しすると、この特定のグリッド セル ビューが上記のビューに置き換えられ、各ボックス (つまり、表示、編集、共有、削除) が何らかのイベント リスナーに応答することです。

4

1 に答える 1

0

このようなことをすると、より大きな画面になると思いますよね?しかし、各グリッドセルを作成して、そこにあるものを何でも収容できると思いますRelativeLayout。次に、長押しすると、別のビューを追加します。おそらく、言いたいことを言うLinearLayout4つを収容するビューです。TextViewsRelative レイアウトの最下位レベルの View が一種のフローティング効果を生成するため、機能する可能性があります。さらに、不透明度を追加して透けて見えるようにすることもできます。ああ、おそらく Android には長押しと手放し機能が付属しているので、これを実装するのはそれほど悪くないはずです。

于 2012-11-09T07:13:42.313 に答える