2013-10-12 2 views
1

Я пытаюсь создать PopupWindow, который работает как меню ActionBar, как и в Chrome для Android - пример: How to create custom sub menu like Google Chrome applicationПозиция, Тень и отвергающий от PopupWindow как меню ActionBar [Android]

Вот что я так далеко: enter image description here

в настоящее время - у меня есть 3 проблемы:

  1. Мне нужно расположить меню правой кнопки ActionBar, и под ним. как обычное меню ..

  2. мне нужно иметь тень на PopupWindow (по какой-то причине он удаляется, как я знаю, PopupWindow автоматически эта тень вокруг него)

  3. При нажатии вне PopupWindow, Мне нужно, чтобы закрыть как обычное меню в ActionBar ..

Вот мой код- по щелчку кнопки ActionBar это код, который работает:

LayoutInflater inflater = (LayoutInflater) MainActivity.this 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final PopupWindow pw = new PopupWindow(inflater.inflate(
      R.layout.options_menu, null, false), LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, true); 
    pw.showAtLocation(findViewById(R.id.main_cont), Gravity.NO_GRAVITY, 50, this.getSupportActionBar().getHeight() + 1); 


    ListView moreOptions = (ListView)pw.getContentView().findViewById(R.id.moreOptions); 
    String[] options = new String[] { "Settings", "Feedback", "Contribute", "DashClock Integration", "Tutorial", "ViewPager Demo", "Expandable List Demo", "Change Language", "Add 5 to list", "Add 20 to list" }; 

    final ArrayList<String> moreOptionsList = new ArrayList<String>(); 
    for (int i = 0; i < options.length; ++i) { 
     moreOptionsList.add(options[i]); 
    } 

    ArrayAdapter<String> moreOptionsAdapter=new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      moreOptionsList); 
    moreOptions.setAdapter(moreOptionsAdapter); 


    //pw.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.listview_bg_inverted)); 
    /* 
    pw.setTouchable(true); 
    pw.setFocusable(false); 
    */ 
    pw.setOutsideTouchable(true); 

Дизайн меню: http://pastebin.com/yi6S2HDt

Благодаря передовой, Дин.

ответ

0

PopupWindow имеет фон (вы можете легко его изменить), но без тени.

Фактически вы используете showAtLocation(), чтобы указать точное положение, в котором будет отображаться окно.

Чтобы убрать его автоматически, просто позвоните setOutsideTouchable(true); в конструктор.

Но, сказав все это, не лучше ли использовать PopupMenu вместо PopupWindow?

Смежные вопросы