仅在按住按钮时显示 dialogfragment

Show dialogfragment only while holding the button

我想在片段中显示一个对话框片段,但只能在按住按钮时显示,这样它就会在用户释放触摸时消失。但是当我显示 dialogfragment 时,它会从按钮上移除焦点并且不会在发布时被关闭。无论如何,这是我到目前为止所尝试的:

        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;

            }

感谢任何帮助。

此功能称为 3DTouch 效果,您可以使用 Shalskar 的以下实现,称为 PeekAndPop。

您可以在 repository on Github.

中找到库和所需的说明

像这样显示 UI 的标准方式可以通过 PopupWindow. 实现,但是我不确定焦点,因为这也可能会从当前视图中释放焦点。试试吧。

您还可以通过在创建时将视图添加到片段布局顶部或将其添加到片段内来实现另一种技巧 xml 但最初将其可见性 属性 设置为 INVISIBLE。一旦检测到按下事件,将其可见性 属性 设置为 VISIBLE,一旦检测到释放事件,再次将此视图设置为 INVISIBLE。这样焦点可能不会从当前视图中自动清除。