2016-03-30 19 views
6

Làm cách nào tôi có thể tùy chỉnh menuItem trong menu bật lên? Tôi cần một công tắc cho menuitem đầu tiên. Dưới đây là những gì tôi có cho đến nay:Trình đơn Popup tùy chỉnh của Android với công tắc

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="android.oli.com.fitnessapp.activities.LiveSelectActivity"> 

    <item 
     android:icon="@drawable/ic_access_alarm_white_24dp" 
     android:orderInCategory="100" 
     app:showAsAction="always" 
     android:visible="true" 
     android:title="@string/action_settings" 
     android:onClick="showPopup"/> 

</menu> 

menu_popup.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/one" 
     android:title="One"/> 

    <item 
     android:id="@+id/setTime" 
     android:title="Two" 
     android:onClick="showTimePickerDialog"/> 


</menu> 

Hoạt động đoạn mã

public void showPopup(MenuItem menuItem){ 
     View view = findViewById(R.id.action_alarm); 
     PopupMenu popup = new PopupMenu(this, view); 
     MenuInflater inflater = popup.getMenuInflater(); 
     inflater.inflate(R.menu.menu_popup, popup.getMenu()); 
     popup.show(); 
    } 

Trả lời

13

Bạn có thể sử dụng popupwindow vì nó cho phép sử dụng bố trí tùy chỉnh.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" 
    android:padding="5dp"> 

<Switch 
    android:id="@+id/mySwitch" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="20dp" 
    android:text="Play with the Switch" /> 

<TextView 
    android:id="@+id/switchStatus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/mySwitch" 
    android:layout_marginTop="22dp" 
    android:text="Medium Text" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

và trong hoạt động ur thực hiện phương pháp này:

/* you should refer to a view to stick your popup wherever u want. 
** e.g. Button button = (Button) findviewbyId(R.id.btn); 
**  if(popupWindow != null) 
**   showPopup(button); 
**/ 
    public void showPopup(View v) { 


      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      final View popupView = layoutInflater.inflate(R.layout.popup_filter_layout, null); 

      popupWindow = new PopupWindow(
        popupView, 
        ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

      popupWindow.setBackgroundDrawable(new BitmapDrawable()); 
      popupWindow.setOutsideTouchable(true); 
      popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 
       @Override 
       public void onDismiss() { 
        //TODO do sth here on dismiss 
       } 
      }); 

      popupWindow.showAsDropDown(v); 
} 
+0

BitmapDrawable() bị phản đối. Cửa sổ không hiển thị. làm thế nào tôi có thể vị trí nó mà nó trông giống như một popupmenu? –

+2

Tôi đã chỉnh sửa câu trả lời của mình. Bạn nên gọi popupWindow.showAsDropDown (v) để làm cho nó hiển thị. Và đó là sự thật BitmapDrawable() không được chấp nhận nhưng nó là một mẹo để làm cho nó biến mất khi nhấn phím. Chi tiết hơn tham khảo http://stackoverflow.com/a/3122696/5923606 – uguboz

+1

Và để định vị nó như popupmenu, hãy nhập vào chế độ xem của bạn "View view = findViewById (R.id.action_alarm)" vào popupWindow.showAsDropDown (xem) – uguboz

Các vấn đề liên quan