return(applyMenuChoice(item) ||

   super.onOptionsItemSelected(item));

 }

 @Override

 public boolean onContextItemSelected(MenuItem item) {

  return(applyMenuChoice(item) ||

   super.onContextItemSelected(item));

 }

 private void populateMenu(Menu menu) {

  menu.add(Menu.NONE, ONE_ID, Menu.NONE, '1 Pixel');

  menu.add(Menu.NONE, TWO_ID, Menu.NONE, '2 Pixels');

  menu.add(Menu.NONE, EIGHT_ID, Menu.NONE, '8 Pixels');

  menu.add(Menu.NONE, SIXTEEN_ID, Menu.NONE, '16 Pixels');

  menu.add(Menu.NONE, TWENTY_FOUR_ID, Menu.NONE, '24 Pixels');

  menu.add(Menu.NONE, THIRTY_TWO_ID, Menu.NONE, '32 Pixels');

  menu.add(Menu.NONE, FORTY_ID, Menu.NONE, '40 Pixels');

 }

 private boolean applyMenuChoice(MenuItem item) {

  switch (item.getItemId()) {

   case ONE_ID:

    getListView().setDividerHeight(1);

    return(true);

   case EIGHT_ID:

    getListView().setDividerHeight(8);

    return(true);

   case SIXTEEN_ID:

    getListView().setDividerHeight(16);

    return(true);

   case TWENTY_FOUR_ID:

    getListView().setDividerHeight(24);

    return(true);

   case TWO_ID:

    getListView().setDividerHeight(2);

    return(true);

   case THIRTY_TWO_ID:

    getListView().setDividerHeight(32);

    return(true);

   case FORTY_ID:

    getListView().setDividerHeight(40);

    return(true);

  }

  return(false);

 }

}

In onCreate(), we register our list widget as having a context menu, which we fill in via our populateMenu() private method, by way of onCreateContextMenu(). We also implement the onCreateOptionsMenu() callback, indicating that our activity also has an options menu. Once again, we delegate to populateMenu() to fill in the menu.

Our implementations of onOptionsItemSelected() (for options-menu selections) and onContextItemSelected() (for context-menu selections) both delegate to a private applyMenuChoice() method, plus chaining upwards to the superclass if none of our menu choices was the one selected by the user.

In populateMenu() we add seven menu choices, each with a unique identifier. Being lazy, we eschew the icons.

In applyMenuChoice() we see if any of our menu choices were chosen; if so, we set the list’s divider size to be the user-selected width.

Initially the activity looks the same in the emulator as it did for ListDemo (see Figure 11- 1).

Figure 11-1. The MenuDemo sample application, as initially launched

But if you press the Menu button, you will get our options menu (Figure 11-2).

Figure 11-2. The same application, showing the options menu

Clicking the More button shows the remaining two menu choices (Figure 11-3).

Figure 11-3. The same application, the remaining menu choices

Choosing a height (say, 16 pixels) then changes the divider height of the list to something garish (Figure 11 -4).

Figure 11-4. The same application, made ugly

You can trigger the context menu by doing a tap-and-hold on any item in the list (Figure 11-5).

Figure 11-5. The same application, showing a context menu

Once again, choosing an option sets the divider height.

Yet More Inflation

You saw in Chapter 9 that you can describe Views via XML files and inflate them into actual View objects at runtime. Android also allows you to describe menus via XML files and inflate them when a menu is called for. This helps you keep your menu structure separate from the implementation of menu-handling logic, and it provides easier ways to develop menu-authoring tools.

Вы читаете Beginning Android
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату