如何将弹出菜单创建为另一个弹出菜单菜单项的子菜单

时间:2016-01-11 09:17:18

标签: android submenu popupmenu

我想创建另一个弹出菜单菜单项的弹出菜单子菜单。如下所示:

enter image description here

提前谢谢

4 个答案:

答案 0 :(得分:3)

It is better to use navigation drawer rather then menu list. In your case you have sub menus & you are working on it. So you can refer below link:
http://www.karthikk.co.vu/2015/03/android-navigation-drawer-with-submenu.html

And If you want exact above then you can refer below link for sub menus:
https://www.packtpub.com/books/content/android-30-application-development-managing-menus

答案 1 :(得分:2)

第1步:Main.xml

您可以使用列表视图或任何其他复合列表视图:

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:orientation="vertical"
    >
  <ListView
      android:id="@+id/listView1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
  </ListView>

  </LinearLayout>

第2步:listviewchild.xml

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="15dp"        
    android:layout_toRightOf="@+id/textview_name"
    android:src="@drawable/ic_launcher" />   

第3步:

String popUpContents[];
PopupWindow popupWindowDogs;   
ListView listView1;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView1=(ListView)findViewById(R.id.listView1);
    listView1.setAdapter(new MyAddapter(MainActivity.this)); // binding the list view.
    /*
     * initialize pop up window items list
     */

    // add items on the array dynamically
    // format is Company Name:: ID
    List<String> dogsList = new ArrayList<String>();
    dogsList.add("Samsung");
    dogsList.add("Google");
    dogsList.add("Yahoo");
    dogsList.add("Microsoft");

    // convert to simple array
    popUpContents = new String[dogsList.size()];
    dogsList.toArray(popUpContents);

    /*
     * initialize pop up window
     */
    popupWindowDogs = popupWindowDogs();


}

/*
 * 
 */
public PopupWindow popupWindowDogs() {

    // initialize a pop up window type
    PopupWindow popupWindow = new PopupWindow(this);

    // the drop down list is a list view
    ListView listViewDogs = new ListView(this);

    // set our adapter and pass our pop up window contents
    listViewDogs.setAdapter(dogsAdapter(popUpContents));

    // set the item click listener
    listViewDogs.setOnItemClickListener(new DogsDropdownOnItemClickListener());

    // some other visual settings
    popupWindow.setFocusable(true);
    popupWindow.setWidth(250);
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

    // set the list view as pop up window content
    popupWindow.setContentView(listViewDogs);

    return popupWindow;
}

/*
 * adapter where the list values will be set
 */
private ArrayAdapter<String> dogsAdapter(String dogsArray[]) {

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dogsArray) {

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

            // setting the ID and text for every items in the list

            String text = getItem(position);               

            // visual settings for the list item
            TextView listItem = new TextView(MainActivity.this);

            listItem.setText(text);
            listItem.setTag(position);
            listItem.setTextSize(22);
            listItem.setPadding(10, 10, 10, 10);
            listItem.setTextColor(Color.WHITE);

            return listItem;
        }
    };

    return adapter;
}

}

第4步:

    Context rContext;
    private LayoutInflater rInflater;
    private Activity activity;

    public MyAddapter(Context c) {

        rInflater = LayoutInflater.from(c);

        rContext = c;

    }      

    public MyAddapter(Activity imagebinding) {
        // TODO Auto-generated constructor stub

        activity = imagebinding;        

        rContext = imagebinding;
        rInflater = LayoutInflater.from(imagebinding);
        rContext = imagebinding;
        rInflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub    


        return 10;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        // TODO Auto-generated method stub
        convertView = rInflater.inflate(R.layout.child, null);
        final MyDat mydat = new MyDat();    

        mydat.imageView1=(ImageView)convertView.findViewById(R.id.imageView1);
        mydat.imageView1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                popupWindowDogs.showAsDropDown(v, -5, 0);

            }
        });

        return convertView;
    }

    class MyDat {        


        ImageView imageView1;           

    }

第5步:

@Override
public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {

    // get the context and main activity to access variables
    Context mContext = v.getContext();
    MainActivity mainActivity = ((MainActivity) mContext);

    // add some animation when a list item was clicked
    Animation fadeInAnimation = AnimationUtils.loadAnimation(v.getContext(), android.R.anim.fade_in);
    fadeInAnimation.setDuration(10);
    v.startAnimation(fadeInAnimation);

    // dismiss the pop up
    mainActivity.popupWindowDogs.dismiss();

    // get the text and set it as the button text

    Toast.makeText(mContext, "Selected Positon is: " + arg2, 100).show();


}

答案 2 :(得分:0)

您可以使用子菜单。为此,您只需制作自定义菜单 link

答案 3 :(得分:-1)

您可以使用Dialog或DialogFragment。