1

アクション バーのボタンをクリックすると、PopupMenu が表示されるようにしようとしています。

ファイルにボタンがあります - action.xml ' menu' フォルダにあります。

これには、ActionBar のボタンが含まれています。

<item
    android:id="@+id/overflow"
    android:icon="@drawable/ic_action_overflow"
    android:orderInCategory="2"
    android:menuCategory="container"
    android:title="Overflow Button"       
    android:showAsAction="ifRoom|withText"
    android:onClick="**showPopup**"
    />

<item
    android:id="@+id/add"
    android:icon="@drawable/add"
    android:title="Add Button"
    android:orderInCategory="100"
    android:showAsAction="ifRoom|withText"
    android:onClick="**showPopup**"
    />

ボタンをクリックすると、表示されるようにしたいと思いますPopupMenushowPopupメソッドは次のクラスFragmentActivityにあります。

 public void showPopup(MenuItem v) {        
        PopupMenu popup = new PopupMenu(this, this.getCurrentFocus());      
        popup.inflate(R.layout.pop);        
        popup.show();       
        }

ファイルはレイアウト フォルダーに保存されます(pop.xmlポップアップ メニューのビューが含まれます)。

残念ながら、これは私にRuntimeException java.lang.reflect.InvocationTargetException.

何か案は?

助けていただければ幸いです。

4

3 に答える 3

1

まず、これはとても簡単です。

この属性を actionBar アイテムに追加する必要があります。

android:onClick="openPopup"

openPopupあなたのポップアップメソッドです。

次に、MainActivity拡張することになってActionBarActivity
いるところで、呼び出されるメソッドを追加する必要がありますonClick

public void openPopup(MenuItem item){ 
      Point p;
      p.x = 0;
      p.y = 0;
      showPopup(MainActivity.this, p);
      Toast.makeText(this, "Popup Should Open", Toast.LENGTH_LONG).show();
  } 

もちろんそのshowPopup方法も。

private void showPopup(final Activity context, Point p) {

   // Inflate the popup_layout.xml
   LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup);
   LayoutInflater layoutInflater = (LayoutInflater) context
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   View layout = layoutInflater.inflate(R.layout.popup_layout, viewGroup);

   // Creating the PopupWindow
   final PopupWindow popup = new PopupWindow(context);
   popup.setContentView(layout);
   popup.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
   popup.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
   popup.setFocusable(true);

   popupWidth = popup.getWidth();

   // Clear the default translucent background
   popup.setBackgroundDrawable(new BitmapDrawable(this.getResources()));

   // Displaying the popup at the specified location.
   popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x, p.y);

   // Getting a reference to Close button, and close the popup when clicked.
   Button close = (Button) layout.findViewById(R.id.close);
   close.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
       popup.dismiss();
     }
   });
}

それでおしまい。

于 2013-12-26T19:47:43.507 に答える
0

私のやり方をシェアしたいと思います。IDが「btn」のボタン(または任意のクリックベールビュー)があり、そのクリックにpopupMenuをアタッチしたいとしましょう。表示したいメニューを次のxmlのメニューフォルダに入れ、「menu1.xml」とします。

ボタンの OnClick は次のように定義されます。

Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showPopupMenu(v);
            }
        });

showPopupMenu() は次のように定義されています。

private void showPopupMenu(View view) {
    // inflate menu and attach it to a view onClick of which you want to display menu
    PopupMenu popup = new PopupMenu(mContext, view);
    MenuInflater inflater = popup.getMenuInflater();
    //inflate menu items to popup menu
    inflater.inflate(R.menu.menu1, popup.getMenu());
    //assign a cutom onClick Listener to it.
    popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
    //Show Popup.
    popup.show();
}

完全な投稿はここにあります: http://revisitingandroid.blogspot.in/2017/01/how-to-display-popup-menu-on-any-view.html

于 2017-01-06T06:23:05.703 に答える
-1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="20sp"
        android:textColor="#000000"
        android:layout_margin="20dip"
        android:text="Popup Menu Example" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Touch here to see the menu."
        android:layout_margin="20dip"
        android:layout_gravity="center"
        android:textColor="#0000ff"
        android:id="@+id/anchor"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dip"
        android:layout_gravity="center"
        android:textSize="40sp"
        android:textColor="#808080"
        android:id="@+id/selection"/>
</LinearLayout>

package com.authorwjf.popmenu;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import android.app.Activity;
public class Main extends Activity implements OnClickListener, OnMenuItemClickListener
{

       private PopupMenu popupMenu;
       private final static int ONE = 1;
       private final static int TWO = 2;
       private final static int THREE = 3;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             popupMenu = new PopupMenu(this, findViewById(R.id.anchor));
             popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, "Item 1");
             popupMenu.getMenu().add(Menu.NONE, TWO, Menu.NONE, "Item 2");
             popupMenu.getMenu().add(Menu.NONE, THREE, Menu.NONE, "Item 3");
             popupMenu.setOnMenuItemClickListener(this);
             findViewById(R.id.anchor).setOnClickListener(this);
       }
}


@Override
public void onClick(View v) {
       popupMenu.show();
}


@Override
public boolean onMenuItemClick(MenuItem item) {
       TextView tv = (TextView) findViewById(R.id.selection);
       switch (item.getItemId()) {
       case ONE:
              tv.setText("ONE");
              break;
       case TWO:
              tv.setText("TWO");
              break;
       case THREE:
              tv.setText("THREE");
              break;
       }
       return false;
}
于 2013-04-05T12:49:04.303 に答える