Intereting Posts
Защитить скрипт от ботов и нежелательных запросов Драйвер файловой системы пользовательского пространства Android на неуправляемом устройстве? Можно ли написать вертикально в текстовом виде в android? Разрешения для диспетчера местоположений Android, которые будут использоваться Android – Как проверить доступ в Интернет, а не только подключение к Wi-Fi? В пользовательском представлении отсутствует конструктор, используемый инструментами для адаптера Android, как получить список каталогов? Интеграция Crashlytics в проект библиотеки Android: Как обнаружить двойной кран? Почему не может быть сформирован пример выставления счетов на рынке Google в версии с подписанной версией? Как протестировать удаленный сервис поддержки Android Разработчики приложений: как оценить их ценность? Android findViewbyId с вариантной строкой Android: проблема с newView и bindView в пользовательском SimpleCursorAdapter Обнаруживать, разрешает ли клиент встроенное воспроизведение мультимедиа для видео HTML5

Custom Spinners / выпадающее меню

В приложении Astrid Tasks есть кнопка. Когда вы нажимаете кнопку, появляется раскрывающееся меню.

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

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

Это в основном прядильщик, но в раскрывающемся списке.

Кто-нибудь знает, как сделать что-то подобное? Это виджет, который я просто не вижу?

Solutions Collecting From Web of "Custom Spinners / выпадающее меню"

Как оригинальный автор этого (я один из основных разработчиков Android для Astrid), я был бы рад поделиться тем, как это делает Astrid. Здесь я расскажу об основах, но вы можете найти более подробную информацию в нашем реестре github ( https://github.com/todoroo/astrid ). Основная идея заключается в том, чтобы расширить QuickActionWidget от GreenDroid, как предлагает ханри. Подкласс выглядит примерно так:

public class MenuPopover extends QuickActionWidget { protected DisplayMetrics metrics; protected LinearLayout content; public MenuPopover(Context context) { super(context); setContentView(R.layout.my_layout); content = (LinearLayout) getContentView().findViewById(R.id.content); metrics = context.getResources().getDisplayMetrics(); setFocusable(true); setTouchable(true); } @Override protected void populateQuickActions(List<QuickAction> quickActions) { // Do nothing } @Override protected void onMeasureAndLayout(Rect anchorRect, View contentView) { contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY), ViewGroup.LayoutParams.WRAP_CONTENT); int rootHeight = contentView.getMeasuredHeight(); int offsetY = getArrowOffsetY(); int dyTop = anchorRect.top; int dyBottom = getScreenHeight() - anchorRect.bottom; boolean onTop = (dyTop > dyBottom); int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY; setWidgetSpecs(popupY, onTop); } } 

Файл макета my_layout.xml довольно прост:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dip"> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/gdi_arrow_up" android:orientation="vertical"/> <ImageView android:id="@+id/gdi_arrow_up" android:layout_width="27dip" android:layout_height="27dip" android:layout_marginLeft="-10dip" android:scaleType="fitCenter" android:layout_marginBottom="-8dip" android:src="?attr/asListArrowUp" /> <ImageView android:id="@+id/gdi_arrow_down" android:layout_width="27dip" android:layout_height="27dip" android:scaleType="fitCenter" android:layout_marginBottom="-8dip" android:layout_below="@android:id/list"/> </RelativeLayout> </FrameLayout> 

Затем вы можете просто добавить простой вспомогательный метод в класс popover для добавления представлений (то есть строк с дополнительными слушателями) в основную часть popover:

 public void addViewToContent(View v, OnClickListener listener) { content.addView(v); if (listener != null) { v.setOnClickListener(listener); } } 

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

 menuPopover.show(anchorView); 

Это несколько упрощенная версия – на практике мы добавляем к этим представлениям некоторую дополнительную информацию, слушателей и т. Д., Чтобы заставить их на самом деле делать что-то при нажатии. Если вы хотите, вы можете проверить полный код на https://github.com/todoroo/astrid – класс com.todoroo.astrid.ui.MainMenuPopover.

Спасибо за использование Astrid!