/ / menu pop-up âncora sobre o botão overflow - android, android-actionbar, menu android, menu pop-up, menu overflow

menu pop-up de âncora sobre o botão de estouro - android, android-barra de ação, menu android, popupmenu, overflow-menu

Estou tentando criar um menu pop-up personalizado que gostaria de posicionar no botão de menu de estouro da barra de ação (estou usando um Toolbar com setSupportActionBar() para isso, se for importante). Eu descobri que isso pode ser feito com o setAnchorView() (da leitura Item de menu personalizado no menu Estouro).

No entanto, não consigo descobrir como recuperar o menu de estouro como uma exibição (que eu poderia usar para definir a âncora).

Também tentei ancorar isso no pailayout da atividade em si, mas apareceu na parte superior esquerda e a altura do menu era igual à altura da barra de ação (o que não é muito útil).

Alguém sabe como isso pode ser alcançado?

Respostas:

4 para resposta № 1

Em vez de ter um menu de estouro real, você pode "trapacear" um pouco. Na barra de ação, tenha um ícone parecido com o ícone de estouro. Você deve definir showAsAction sempre nisso MenuItem. Ao clicar no ícone de estouro, você mostra um ListPopupWindow que está ancorado no MenuItem Visão. Se o ListPopupWindow não aparecer onde você quer, você pode ligar ListPopupWindow.setHorizontalOffset() e ListPopupWindow.setVerticalOffset()


4 para resposta № 2

Concordo com Andrew Orobator no sentido de que provavelmente será "falsificado", mas recomendo adicionar uma visualização real à sua Barra de Ferramentas, em vez de tentar lidar com os itens do Menu:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="@dimen/elevation_med">

<ImageView
android:id="@+id/overflow"
android:layout_width="2dp"
android:layout_height="2dp"
android:background="@drawable/overflow_icon"
android:layout_gravity="right"/>

</android.support.v7.widget.Toolbar>

Dessa forma, você pode obter diretamente a visualização dea barra de ferramentas via toolbar.findViewById (R.id.overflow); ou algo semelhante, defina a exibição como sua âncora. Isso significa que você também teria que definir seus próprios ouvintes onClick, já que não receberia retornos de chamada onOptionsMenu (), mas acho que essa seria a melhor maneira de lidar com seu cenário.


1 para resposta № 3

Aprendi como obter uma visão de um menu aqui: Android: obter visualização Referência a um item de menu

  1. Ligar View v = findViewById(R.id.overflow) dentro do seu onOptionsItemSelected método.

  2. Use essa visualização como sua âncora no menu pop-up: PopupMenu popupMenu = new PopupMenu(this, v);