1

抱歉,如果我的主题令人困惑,我不确定应该使用哪些词来描述我需要的布局。

目前,我正在做一个需要在地图视图上覆盖空心布局的项目,空心布局将用于显示远距离位置点,我发布了一张图片来说明我的意思。

带有描边覆盖的地图视图

基本上整个屏幕都由 Mapview 填充,并且覆盖布局应该覆盖它而不覆盖中心,就像我在图像中显示的那样。

这是 xml 显示我为制作上述布局所做的工作

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.google.android.maps.MapView
android:id="@+id/MapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="..."
/>

   <View
   android:layout_width="320dip"
   android:layout_height="50dip"
   android:layout_gravity="center_horizontal|top"
   android:background="#800ff4ff"
   android:textColor="#ffffffff" />


 <View
    android:layout_width="320dip"
    android:layout_height="50dip"
    android:layout_gravity="center_horizontal|bottom"
    android:background="#800ff4ff"
    android:textColor="#ffffffff"
  />

<View
    android:layout_width="50dip"
    android:layout_height="520dip"
    android:layout_gravity="center_vertical|right"
    android:background="#800ff4ff"
    android:textColor="#ffffffff" />

 <View
    android:layout_width="50dip"
    android:layout_height="520dip"
    android:layout_gravity="center_vertical|left"
    android:padding="20dip"
    android:background="#800ff4ff"
    android:textColor="#ffffffff" />

</FrameLayout>

我使用框架布局来允许布局可以覆盖其他布局,并在每个边缘创建 4 个单独的以模拟我真正想要的(中心为空)。我只是不确定谁让布局只显示 4 面并保持中心不可见,如果有人可以帮助,请给我一些指导。谢谢。

4

3 回答 3

6

您可以使用另一个简单的选项来满足您的要求。

  • 创建具有定义形状的新可绘制资源。调用此资源(XML 文件):margin_border.xml并将其放在 drawable 文件夹下。此 XML 的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
    
        <stroke
            android:width="50dp"
            android:color="#800ff4ff" />
    
        <solid android:color="#00000000" />
    
    </shape> 
    

    说明: 此形状将充当您内部布局的边框/框架。作为边框的“stroke”属性可以是您想要的任何颜色,而“solid”属性具有透明颜色。

  • 然后在你的主布局中使用这个形状:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <com.google.android.maps.MapView
            android:id="@+id/MapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:apiKey="..."
            android:clickable="true"
            android:enabled="true" />
    
        <!-- Set hollow layout -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="@drawable/margin_border"
            android:padding="50dp" >
        </LinearLayout>
    
    </RelativeLayout>
    

    说明: 主要布局是RelativeLayout。MapView 没有改变,除了所有方向的 alignParent 标志设置为 true,就像这里显示的一样。

    最后使用您想要的任何布局作为中心。我在背景引用可绘制形状时使用了 LinearLayout。

    注意:此布局的内边距必须与形状中的笔划宽度相同。在这种情况下,它是 50dp

这是它在我的手机上的样子(截图):

在此处输入图像描述

于 2012-08-21T21:35:28.863 回答
1

您可以使用 FrameLayout 来实现这一点,但 framelayout 不像线性布局和相对布局那样给您太多的自由。因此,我建议您使用其中一种布局作为容器,并使用可绘制的形状作为背景。可绘制的形状将产生所需的效果。
这是形状可绘制的示例代码:

    <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid
        android:color="#00000000" />
    <stroke 
        android:width="50dp"
        android:color="#ae00ffff"/>
</shape>

在这里,笔画充当屏幕上的半透明区域。您可以更改宽度以符合您的要求。

于 2012-08-21T21:22:28.187 回答
0

我的建议是您使用这样的 RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<MapView android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</MapView>

<FrameLayout
    android:id="@+id/top"
    android:layout_width="fill_parent"
    android:layout_height="50dip" >
</FrameLayout>

<FrameLayout
    android:id="@+id/bottom"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:layout_alignParentBottom="true" >
</FrameLayout>

<FrameLayout
    android:id="@+id/left"
    android:layout_width="50dip"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottom"
    android:layout_below="@id/top" >
</FrameLayout>

<FrameLayout
    android:id="@+id/right"
    android:layout_width="50dip"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottom"
    android:layout_alignParentRight="true"
    android:layout_below="@id/top" >
</FrameLayout>

</RelativeLayout>

至少这是我能想到的最简单的方法!

于 2012-08-21T18:43:29.913 回答