Intereting Posts

Android – всплывающее меню, когда нажата кнопка списка?

Я хотел бы реализовать всплывающее меню, подобное игровому магазину Google, как показано ниже.

Введите описание изображения здесь

Так что в основном из того, что я понимаю, мне понадобится активность и макет для этого действия с определенным в нем списком. Мне нужно создать свой пользовательский адаптер. Также, мне нужно создать макет списка, будет содержать информацию и представление (с 3 точками), которое будет служить кнопкой запуска всплывающего меню? Проблема, которую я вижу здесь, заключается в том, как мне создать слушателя только для этого представления и как мне ссылаться на значение для этого конкретного элемента списка в представлении списка.

У меня еще нет кода, поскольку я не начал ничего связанного с этим. В настоящее время я получаю информацию в теории, но при необходимости я создам образец кода.

Благодарю.

Solutions Collecting From Web of "Android – всплывающее меню, когда нажата кнопка списка?"

Список ActionBarCompat. Реализация PopupMenu находится здесь (с доступным портом, потому что он использует ABC)!

Введите описание изображения здесь

Вы также можете получить этот образец из Github или из SDK (см. Г-нМорганг ниже)

/ SDK / образцы / андроид-19 / щ / ActionBarCompat-ListPopupMenu. Не забудьте установить образцы для SDK под Android 4.4.2 (API 19)

Вы можете использовать вот так:

 public class MainActivity extends Activity { ListView listView_Actions; ArrayList<String> actionsArrayList; Button btn_ViewPopUp; ArrayAdapter<String> actionsAdapter; static final int CUSTOM_DIALOG_ID1 = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_ViewPopUp=(Button) findViewById(R.id.btn_ViewPopUp); actionsArrayList=new ArrayList<String>(); actionsArrayList.add("Action 1"); actionsArrayList.add("Action 2"); } @Override protected void onStart() { super.onStart(); btn_ViewPopUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(CUSTOM_DIALOG_ID1); actionsAdapter = new MyCustomBaseAdapter(getApplicationContext(), R.layout.list_actions, actionsArrayList); listView_Actions.setAdapter(actionsAdapter); } }); } @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch (id) { case CUSTOM_DIALOG_ID1: dialog = new Dialog(MainActivity.this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.setContentView(R.layout.list_actions); listView_Actions = (ListView) dialog.findViewById(R.id.listView_Actions); break; } return dialog; } class MyCustomBaseAdapter extends ArrayAdapter<String> { public MyCustomBaseAdapter(Context context, int textViewResourceId, ArrayList<String> actionsArrayList) { super(context, textViewResourceId,actionsArrayList); } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.action_list_cell, null); final TextView lblContactAction; lblContactAction = (TextView) v.findViewById(R.id.txtContactAction); lblContactAction.append(actionsArrayList.get(position)); return v; } } } 

Теперь файлы XML:

action_list_cell.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@android:color/background_light" > <TextView android:id="@+id/txtContactAction" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:textSize="18dp" android:textColor="@android:color/black" /> </LinearLayout> 

list_actions.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/rounded_corner_top"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#DB6A16" android:orientation="vertical" android:paddingBottom="2dp" android:paddingLeft="2dp" android:paddingRight="2dp" > <ListView android:id="@+id/listView_Actions" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" > </ListView> </LinearLayout> </LinearLayout> </LinearLayout> 

С помощью всплывающего меню довольно просто создать меню с этими тремя шагами:

1 – добавьте кнопку прослушивания кликов к кнопке меню с помощью OnClickListener или, как я предпочитаю, из макета xml:

 <ImageButton android:id="@+id/menu_button" android:onClick="showMenu" ... /> 

2 – Создайте макет меню menu_layout.xml :

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/item_settings" android:showAsAction="ifRoom|withText" android:title="Settings" android:visible="true"/> <item android:id="@+id/item_about" android:showAsAction="ifRoom|withText" android:title="About" android:visible="true"/> </menu> 

3 – Создайте всплывающее меню, раздуйте макет xml и покажите его:

 public void showMenu (View view) { PopupMenu menu = new PopupMenu (this, view); menu.setOnMenuItemClickListener (new PopupMenu.OnMenuItemClickListener () { @Override public boolean onMenuItemClick (MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.item_settings: Log.i (Tag, "settings"); break; case R.id.item_about: Log.i (Tag, "about"); break; } return true; } }); menu.inflate (R.menu.menu_layout); menu.show(); } 

В первую очередь вам нужно сделать свой пользовательский адаптер с представлением, имеющим 3 точки.

Затем в методе getView () или newView () вы устанавливаете слушателя на 3-точечное изображение.

Я думаю, что PopupMenu – это то, что вы ищете, оно поддерживается с API 11.

Если вы хотите поддержать также более раннюю версию API, вы можете использовать класс PopupMenu, предоставляемый библиотекой поддержки v7 .

Использование довольно прямолинейно. Вы определяете его с идентификатором представления, которое вы хотите, чтобы меню показывалось рядом, а затем вы можете напрямую раздувать ресурс меню, как если бы это было общее меню.

Теперь showDialog устарел, вместо этого используйте PopupMenu и AppCompat PopupMenu f вы хотите поддерживать версию до V11

 public class MainActivity extends Activity { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Creating the instance of PopupMenu PopupMenu popup = new PopupMenu(MainActivity.this, button1); //Inflating the Popup using xml file popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); //registering popup with OnMenuItemClickListener popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show(); return true; } }); popup.show();//showing popup menu } });//closing the setOnClickListener method } } 

Вы должны установить прослушиватель кнопки в getView () – метод вашего списка-адаптера. В этом методе getView () вы назначаете макет одному элементу списка. Если вы это сделали, вам просто нужно установить прослушиватель на этом представлении (Button) и обработать событие onClick ().

Не уверен, правильно ли я вас понимаю, но вы можете вызвать этот метод, чтобы открыть всплывающее диалоговое окно со списком.

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("Title if Any"); builder.setItems(R.array.listoptions, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int itemClicked) { String[] option_array = getResources().getStringArray(R.array.listoptions); String optionSelected = option_array[itemClicked]; } }); return builder.create(); } 

См. Добавление списка

  <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="listoption"> <item>Install</item> <item>Add to listview</item> </string-array> </resources> 

Надеюсь это поможет.