如何在Android中点击按钮后打开自定义布局对话框?

3

我想在按钮点击下方制作下拉自定义对话框。

enter image description here

单击计数器按钮,布局将显示在按钮下面。

我看到很多链接但它们只打开列表:

操作栏下拉打开和关闭项目样式

新的快速操作包

上面的链接对我没用。

但是当我使用对话框时,它会出现在按钮的前面。

所以如果您知道,请帮助我。

4个回答

6

我认为你可以通过使用getLocationOnScreen() API和PopUpWindow组件来实现你想要的功能。

以下是示例代码。

int[] location = new int[2];
counterView.getLocationOnScreen(location);
final View mView = inflater.inflate(R.layout.xxxx, null, false);
final PopupWindow popUp = new PopupWindow(mView, Width, Height, false);
popUp.setTouchable(true);
popUp.setFocusable(true);
popUp.setOutsideTouchable(true);
popUp.showAtLocation(view, Gravity.NO_GRAVITY, location[0], location[1]);

但是我面临的一个问题是,如果在弹出窗口打开时再次点击计数器按钮,它就无法工作了,你能告诉我吗!!! - duggu
@Mani,我有一个可编辑文本的drawable。我想要在该drawable图像下方显示弹出窗口。我应该如何定位它?请帮忙。 - Prabs

2

PopupWindow还有一个方法showAsDropDown,可以将弹出窗口显示在视图下方的下拉菜单中。


2
public class MainActivity extends AppCompatActivity {

    private Button button;
    private WindowManager.LayoutParams layoutParams;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            ((Button) findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final View mView = LayoutInflater.from(MainActivity.this).inflate(R.layout.drop_down_layout, null, false);
                final PopupWindow popUp = new PopupWindow(mView, LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT, false);
                popUp.setTouchable(true);
                popUp.setFocusable(true);
                popUp.setOutsideTouchable(true);

            //Solution
                popUp.showAsDropDown(findViewById(R.id.button));
            }
        });
    }
}

1
最佳答案! :) - Athira

0

我尝试在 PopupWindow 中使用 wrap_content,结果惊讶地发现它仍然有效。

PopupWindow popupWindow = new PopupWindow(testView, LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接