2016-02-16 21 views
8

Jestem nowy na Androida i tworzę menu podręczne widoku listy. Ale mam problem z width i height. Menu podręczne może mieć większą wysokość i szerokość. W SO jest wiele pytań, ale żadna z nich mi nie pomogła.Problem z menu podręcznym w Androidzie ListView

Do Utwórz menu podręczne Próbowałem następujące metody.

1] Korzystanie z menu Popup z poniższym kodzie:

private void showPopupMenu(View view){ 
     Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenu); 
     PopupMenu popupMenu = new PopupMenu(wrapper,view); 

     popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu()); 
     popupMenu.show(); 

     popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ 
      @Override 
     public boolean onMenuItemClick(MenuItem item){ 
       switch (item.getItemId()){ 
        case R.id.install: 
         Intent intent = new Intent(ViewAllRelationActivity.this,EditRelativeActivity.class); 
         startActivity(intent); 
         break; 
        case R.id.addtowishlist: 
         break; 

       } 
       return false; 
      } 
     }); 
    } 

Daje to wyjście:

enter image description here

2] Korzystanie ContextMenu go wyświetla następujące wyjściu:

Możemy utrzymać szerokość i wysokość w ContextMenu Ale zawsze pokazać w centrumnot each row of our Listview Data.

enter image description here

Ale chcę below Image type Popup menu. Szerokość i wysokość są małe.

enter image description here

Proszę podać rozwiązanie tego problemu.

+0

http://stackoverflow.com/a/22311108/5093666 może być ta odpowiedź będzie pomocna dla ciebie – curiousMind

Odpowiedz

2

Możesz dodać te opcje programowo bez używania pliku xml, jak poniżej, może to być pomocne.

Tutaj JEDEN i DWÓR pokazuje indeks dla opcji, które podajesz w menu kontekstowym. Jak na 1 miejsce Edytuj post na 2. pozycji Usuń wpis itp

1) na zdjęciu kliknij menu kontekstowego otwartej:

private final static int ONE = 1; 
private final static int TWO = 2; 

PopupMenu popupMenu = new PopupMenu(this, findViewById(R.id.img_detail_information_options)); 
popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, getResources().getString(R.string.detail_information_edit_post)); 
popupMenu.getMenu().add(Menu.NONE, TWO, Menu.NONE, getResources().getString(R.string.detail_information_remove_post)); 
popupMenu.setOnMenuItemClickListener(this); 
popupMenu.show(); 
+0

Ten kod nie działa. – Harshad

+0

Czy otrzymujesz błąd? – Bhavnik

+0

ONE i TWO nie znaleziono oraz popupMenu.setOnMenuItemClickListener (this); dając mi błąd. – Harshad

2

Jeśli używasz adaptera, można umieścić w getView (. .. metoda) w adapterze

imvMore.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showPopupMenu(act,v); 
     } 
    }); 

i umieścić metoda

private void showPopupMenu(Activity act, View view){ 
    PopupMenu popupMenu = new PopupMenu(act,view); 
    popupMenu.getMenuInflater().inflate(R.menu.menu_popup, popupMenu.getMenu()); 
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) { 

      } 
      return true; 
     } 
    }); 
    popupMenu.show(); 
} 

w klasie adaptera.

Uwaga: akt jest aktywny trzeba wiązać podczas tworzenia adapter konstruktora, na przykład:

public YourAdapter(Activity act, ArrayList<ItemOfYourModel> data){ 
    this.data = data; 
    this.act = act; 
} 

W działalności można kod:

ArrayList<ItemOfYourModel> listData = new ArrayList<ItemOfYourModel>(); 
listData.add(new YourItemOfYourModel(...)); 
YourAdapter adapter = new YourAdapter(this,listData); 
+0

Jak powiązać akt w adapterze należy opisać szeroko? – Harshad

+0

@Harshad, jakiego adaptera i działania użyłeś? Użyłeś listview lub recyclerview? – dolphin

+0

Listview i BaseAdapter – Harshad

1

Najlepszym rozwiązaniem tego myślę, że jest Używaj PopupWindow, możesz kontrolować każdą rzecz i bardzo łatwo jest stworzyć menu, które chcesz.

2

Możesz użyć ListPopupWindow, aby uzyskać to, co chcesz osiągnąć. Możesz ustawić ikonę więcej opcji lub ikonę menu jako kotwicę dla wyskakującego okienka.

ListPopupWindow mListPopupWindow; 
mListPopupWindow = new ListPopupWindow(this, null); 
mListPopupWindow.setWidth(300); 
mListPopupWindow.setAnchorView(menuIcon); 
mListPopupWindow.setHeight(200); 
mListPopupWindow.setAdapter(yourAdapter); 
mListPopupWindow.show(); 

Dostaniesz to, co chcesz.

+0

To rozwiązanie nie działa dla mnie. – Harshad

+0

Z jakimi problemami się mierzysz? – Vishal

+0

To centrum wyświetlania Chcę, żeby było dynamiczne? – Harshad

1

Google Play używa motywu Holo dla PopupMenu. Można zrobić to samo poprzez tworzenie niestandardowych style w styles.xml:

<style name="PopupMenuStyle" parent="android:Theme.Holo.Light"> 
     <!-- Your custom attributes must be put here. This is optional, but the parent must not be changed --> 
</style> 

a następnie zmienić styl PopupMenu w kodzie:

Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenuStyle); 
PopupMenu popupMenu = new PopupMenu(wrapper,view); 
+0

I Używam tego, ale wyświetlam menu w środku jak menu kontekstowe Chcę, aby był to wiersz Rządu ListView. – Harshad

+0

Musisz ustawić to na całym widoku. Zamiast tego dodaj przycisk, taki jak Google Play, do elementu listy. Wtedy nie pojawi się w środku. – Piyush

+0

W jaki sposób ustawić szerokość i wysokość to moja pierwsza odpowiedź na pytanie. – Harshad

Powiązane problemy