web-dev-qa-db-ja.com

ポップアップメニューを作成するCardView内のツールバー(オーバーフローアイコン)

Cardviewを使用したrecyclerviewでGoogle Playのように見えるリストがあり、完璧に動作します。

次のようなポップアップメニュー(オーバーフローアイコン付き)を追加する必要があります。

これを行う最良の方法はどれですか?

私は調査し、2つのオプションがあることを発見しました:

1-カードビューレイアウト内にツールバーがあります。このソリューションにはパフォーマンスの問題がありますか?

2-オーバーフローのアイコンが付いたimagebuttonまたはimageviewで、クリックするとメニューが作成されます。

API 10以上と互換性のあるソリューションが必要です

ありがとう

18
seba123neo

レイアウトによって異なります。

このようなレイアウトが必要な場合は、ツールバーを使用するとより簡単に実現できます。 enter image description here

何かのような

<Android.support.v7.widget.CardView>

   <LinearLayout>

        <Toolbar  Android:id="@+id/card_toolbar" />

        //......

   </LinearLayout>

</CardView>

toolbar.inflateMenu(R.menu.card_toolbar);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener(){..});

ポップアップのみを使用する場合は、画像を使用する方が簡単です。次のようなもの:

PopupMenu popup = new PopupMenu(getContext(), mImageButton);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(......);
20

ステップ1ポップアップメニューxmlを作成する

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/Not_interasted_catugury"
        Android:orderInCategory="100"
        Android:title="Never show stories from this category  " />

    <item
        Android:id="@+id/No_interasted"
        Android:orderInCategory="101"
        Android:title="Not Interested"></item>


</menu>

ステップ2:カードに画像ボタンを作成する

 <ImageButton
            Android:id="@+id/imageButton"
            Android:layout_width="20dp"
            Android:layout_height="30dp"
            Android:src="@drawable/ic_dots"
            Android:paddingLeft="8dp"
            Android:paddingRight="8dp"
            Android:layout_below="@+id/item_detail"
            Android:layout_alignParentRight="true"
            Android:layout_alignParentEnd="true"
            Android:background="@null"/>

次に、ドロアブルからアイコンを与えます

ステップ3:ホルダークラス内

onBindViewHolder内のアイテムクリックリスナを設定します

mImageButton= (ImageButton) view.findViewById(R.id.imageButton);
holder.mImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPopupMenu(holder.mImageButton,position);
            }
        });

ステップ4:ポップメニューを表示し、xmlを膨らませる

  private void showPopupMenu(View view,int position) {
        // inflate menu
        PopupMenu popup = new PopupMenu(view.getContext(),view );
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.popup_menu, popup.getMenu());
        popup.setOnMenuItemClickListener(new MyMenuItemClickListener(position));
        popup.show();
    }

ステップ5:OnMenuItemClickListenerを実装する

     class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {

        private int position;
        public MyMenuItemClickListener(int positon) {
            this.position=positon;
        }

        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            switch (menuItem.getItemId()) {

                case R.id.Not_interasted_catugury:
                    String RemoveCategory=mDataSet.get(position).getCategory();
                    // mDataSet.remove(position);
                    //notifyItemRemoved(position);
                   // notifyItemRangeChanged(position,mDataSet.size());

                    mySharedPreferences.saveStringPrefs(Constants.REMOVE_CTAGURY,RemoveCategory,MainActivity.context);
                    Toast.makeText(MainActivity.context, "Add to favourite", Toast.LENGTH_SHORT).show();
                    return true;
                case R.id.No_interasted:
                    mDataSet.remove(position);
                    notifyItemRemoved(position);
                    notifyItemRangeChanged(position,mDataSet.size());
                    Toast.makeText(MainActivity.context, "Done for now", Toast.LENGTH_SHORT).show();
                    return true;
                case R.id.delete:
                    mySharedPreferences.deletePrefs(Constants.REMOVE_CTAGURY,MainActivity.context);
                default:
            }
            return false;
        }
    }
40
Hamza