1

작업 표시 줄의 버튼을 클릭 한 후 PopupMenu를 표시하려고합니다.안드로이드 - ActionBar 버튼 클릭시 PopupMenu 만들기

'menu'폴더에있는 파일에 action.xml 버튼이 있습니다.

여기에는 ActionBar 용 버튼이 있습니다. 버튼이 나는 PopupMenu를 원하는 클릭하면

<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**" 
    /> 

이 표시된다. showPopup 방법은 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을주고입니다.

아이디어가 있으십니까?

도움을 주시면 대단히 감사하겠습니다.

답변

-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; 
} 
+0

감사합니다,하지만 나는 먼저 FragmentActivity에서 ActionBar를 만듭니다.그런 다음 ActionBar의 버튼을 선택하면 PopupMenu가 나타나길 원합니다. – ARampal

1

우선, 이것은 매우 쉽습니다.

이 속성을 actionBar 항목에 추가해야합니다.

android:onClick="openPopup" 

openPopup는 팝업 방법이다. ActionBarActivity 당신이 onClick를 호출 할 것이다 방법을 추가해야
을 연장하기로하는 방식으로 당신의 MainActivity에서 다음

.

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(); 
    } 
    }); 
} 

그게 전부입니다.

0

나는 그것을하는 방식으로 공유하고 싶습니다. id가 "btn"인 Button (또는 clicakbale 뷰를 어디에서나 볼 수 있음)이 있고 그 팝업에 popupMenu를 첨부하려고한다고 가정 해 보겠습니다. 다음 xml "menu1.xml"에 메뉴 폴더에 표시 할 메뉴를 넣으십시오.

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

showPopupMenu()를 다음과 같이 정의된다 : 다음과 같이 버튼의

의 OnClick 정의된다

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

관련 문제