【问题标题】:How can I draw a View on top of it´s parent-layout?如何在其父布局之上绘制视图?
【发布时间】:2017-03-26 15:03:14
【问题描述】:

所以我正在编写一个自定义组件,它基本上是一个 EditText,底部附有一个自定义下拉菜单。这将托管搜索建议列表。现在我通过扩展一个带有 EditText 和我的 SuggestionBox-View 的 LinearLayout 来实现这一点。即我使用this.addView(searchEditText);this.addView(suggestionBox);

这很好用,但是当我将组件放入 LinearLayout 时,组件下方的视图会移动以为下拉菜单腾出空间。

我希望下拉菜单覆盖包含布局中的任何其他视图。我该怎么做?

例如,如果该组件用于 LinearLayout 下有视图,我希望下拉列表覆盖其他视图。

现在,我知道这可以通过使用 FrameLayout 作为父布局来实现,但我希望无论使用什么父布局,组件都可以使用。

【问题讨论】:

  • 你应该使用相对布局,比如 view 或者 layer drawable
  • @Divyesh 你能给出更详细的解释吗?谢谢。
  • 你想使用显示在消息图标上的未读消息计数,rigt?
  • @Divyesh 不,这根本不是问题。我想要一个视图来覆盖视图组中的其他视图。
  • 我对此了解不多。

标签: java android layout view


【解决方案1】:

好的,所以我可能应该发布这个问题的答案,以防有人偶然发现这个问题。我设法通过一些丑陋的修复来解决它。我在下面的行中找到主要内容视图,然后将我的自定义视图直接添加到其中。

FrameLayout layout = (FrameLayout) ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content);

然后在OnLayoutChange()我将它发送到布局堆栈的顶部。

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    listParams.setMargins(getLeft(),getTop()+getHeight(),getRight(),getBottom());
    list.setLayoutParams(listParams);
    list.bringToFront();
}

但是,还有另一种方法(可能更好)可以做到这一点。那是通过使用类 PopupWindow 类。我还没有完全尝试过,但应该像这样使用它:

PopupWindow window = new PopupWindow();
    window.setContentView(customView);

然后将其添加到视图中。

希望这对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2016-10-08
    • 2012-06-05
    相关资源
    最近更新 更多