Android: отображение настраиваемого диалогового окна / всплывающего окна с полупрозрачным фоном и возможностью закрытия при потере фокуса - PullRequest
0 голосов
/ 29 марта 2011

Я начну с небольшого вступления о том, как я хочу, чтобы мое приложение выглядело.

http://img806.imageshack.us/i/whatiwant.jpg/

Мне удалось создать панель кнопок и ImageView в одном макете с помощью RelativeLayout.

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

Что я хочу с этим окном, которое появляется: 1. Он должен иметь полупрозрачный фон. 2. Он должен закрываться, когда от него теряется фокус 3. Должны иметь кнопки и прослушиватели действий, которые могут вызывать события в основном приложении.

Я просматривал Android. PopupWindow, но я столкнулся с множеством проблем при получении помощи по этому поводу, т. Е. Это слушатели действий, увольнение и т. Д. Поэтому я отбросил идею.

Пока я работаю с диалогами. До сих пор я был только в состоянии отобразить диалог. Проблемы 1. Пользовательские свойства высоты и ширины по какой-то причине не работают (реализовано с использованием параметров макета) 2. Как получить полупрозрачный фон? 3. Как отключить / скрыть диалог при потере фокуса?

У меня вопрос: есть ли более эффективные способы сделать это, кроме диалогов? Если так, пожалуйста, скажите мне, что они. Если использование диалогов - это путь, как я должен решить вышеупомянутые проблемы?

Любая помощь будет оценена.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 29 марта 2011

PopupWindow - лучший вариант. Проверьте AutoCompleteTextView для примера PopupWindow. Для создания PopupWindow используйте

PopupWindow myWindow = new PopupWindow( content_view, width, height, true )

Используйте DismissListener, если вы хотите что-то сделать, когда popupWindow закрыто.

Также слушатели действий не зависят от PopupWindow, т. Е. Если у вас есть кнопка в content_view, вы можете установить прослушиватель onClick так же, как в обычном случае.

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

HTH!

0 голосов
/ 29 марта 2011

Моя идея будет:

  1. Сделать «диалог» элементом макета, но изначально с android: visibility = «ушел». Обязательно укажите его как последний элемент в RelativeLayout, чтобы он был выше всех других элементов макета (z-упорядочение).

  2. В методе onClick для кнопки 1 переключите видимость на «видимый».

  3. В OnFocusChangeListener для представления переключите его обратно на "ушел" в методе onFocusChange (View v, boolean hasFocus) всякий раз, когда hasFocus равен false.

РЕДАКТИРОВАТЬ: Чтобы сделать диалог элементом макета, вы должны сделать что-то вроде:

<RelativeLayout>
  <!-- Your other layout items here -->
  <LinearLayout
    android:id="@+dialoglayout"
    android:layout_alignBelow="@id/yourbuttonbarlayout
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp">
    <!-- Your dialog elements here -->
  </LinearLayout>
</RelativeLayout>

Удостоверьтесь, что присвоили макету панели кнопок идентификатор (я предполагал, что для идентификатора вашего идентификатора есть кнопка. Если вы хотите три таких диалога, вы можете задать им одинаковые параметры макета и переключать отдельные видимости. Все они могут отображаться в том же месте.

Вы всегда можете использовать фон для макета для имитации границ.

...