Показывать только фрагмент диалога, удерживая кнопку
Я хочу показать фрагмент диалогового окна во фрагменте, но только при удерживании кнопки, чтобы он уменьшался при отпускании касания пользователем. Но когда я показываю фрагмент диалога, он удаляет фокус с кнопки и не сбрасывается при отпускании. Во всяком случае это то, что я пытался до сих пор:
c1b1= (Button) v.findViewById(R.id.card_b1);
c1b1.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
Rdialog_Fragment dialogFragment = new Rdialog_Fragment ();
FragmentManager fm = r2_fragment.getFragmentManager();
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Rdialog_Fragment dialogFragment = new Rdialog_Fragment ();
dialogFragment.show(fm, "Sample Fragment");
}
if(event.getAction() == MotionEvent.ACTION_UP){
dialogFragment.dismiss();
}
return false;
}
2 ответа
Стандартный способ отображения пользовательского интерфейса подобным образом может быть реализован с помощью PopupWindow. Однако я не уверен насчет фокуса, потому что это может также освободить фокус от текущего представления. Просто попробуйте.
Есть еще один хак, который вы можете сделать, добавив представление поверх макета фрагмента во время создания или добавив его внутри фрагмента xml, но изначально установите для свойства видимости значение INVISIBLE. После того, как вы обнаружите событие нажатия, установите его свойство видимости на VISIBLE, а когда вы обнаружите событие освобождения, снова установите это представление НЕвидимым. Таким образом, фокус может не очиститься автоматически из текущего представления.
Эта функция называется эффектом 3DTouch, и вы можете использовать следующую реализацию Shalskar, которая называется PeekAndPop.
Вы можете найти библиотеку и необходимые инструкции в ее репозитории на Github.