【问题标题】:Popup/Overlay screen in android honeycombandroid蜂窝中的弹出/覆盖屏幕
【发布时间】:2013-01-29 10:47:19
【问题描述】:

我想在 android 地图应用程序(下图)中实现类似 Places 的弹出/覆盖屏幕(我更感兴趣的是如何将该屏幕放置在屏幕的右侧/左侧)。我可以创建一个活动并使用对话框主题,这主要解决了我的问题,但它位于屏幕的中心。有人有更好的想法,我如何创建一个弹出/覆盖屏幕,例如非地图应用程序中的位置并放置在屏幕的顶部/右侧?我猜他们是通过地图叠加来做到的。

【问题讨论】:

    标签: android google-maps popup overlay android-3.0-honeycomb


    【解决方案1】:

    好吧,这就是我所做的...我使用 FrameLayout 覆盖了一个 LinearLayout,我可以在其中填充一个 View。这是我的代码的摘录:

    XML:

    <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    
         <fragment class="com.some.location.to.fragment"
              android:id="@+id/fragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
    
         <LinearLayout
              android:id="@+id/overlay_pane"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:visibility="gone"
              android:background="@color/transparent">
    
          </LinearLayout>
    
    </FrameLayout>
    

    然后在我的某个按钮上的代码中,我只需将一个视图(在您的情况下它可以只是对话框的内容)添加到 overlay_pane 线性布局。

    Java 示例:

    ViewGroup container = findViewById(R.id.overlay_pane);
    container.setVisibility(View.VISIBLE);
    container.addView(some_view_you_inflated);
    

    但是这个膨胀的视图会有以下背景:@drawable/dialog_full_holo_light 用于像蜂窝样式这样的漂亮边框效果。

    您可以在您的 SDK 中的以下文件夹中找到背景可绘制对象

    your_SDK_dir/platforms/android-12/data/res/drawable-hdpi/dialog_full_holo_light.9.png

    所以只需将其复制到您的绘图中。

    注意:您也可以使用 dialog_full_holo_dark 或任何自定义背景来获得相同的效果。

    希望对您有所帮助 :) 如果我不清楚,请告诉我

    注意:您可以只使用带有 match_parent 的 LinearLayout,而不是使用片段,同时为 layout_width 和 layout_height。然后你会用“背景”UI(在问题的例子中......这将是地图)填充那个 LinearLayout

    【讨论】:

    • 还有一件事.. 您可以通过在您膨胀的视图上使用 android:layout_gravity 属性来控制叠加层的显示位置
    • 感谢您的想法(我尝试从另一个角度这样做),我会在有时间的时候尝试一下。我需要将覆盖放在标签主机上,但希望不会搞砸任何事情。
    • XML 中的片段有什么作用?我对片段有点陌生,我很困惑,因为你没有为 com.some.location.to.fragment 发布 Java
    • View 对象上没有 addView() 方法,所以第二个代码块中的第三行是不可能的
    • 片段内容无关紧要。您可以只使用填充 UI 的 LinearLayout 而不是使用片段。请参阅我的答案的更新。此外,我修复了 View 对象的错误。抱歉,它应该是一个 ViewGroup。
    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多