对不起,如果我的话题令人讨厌,我不确定用哪个词来描述我需要的布局。
目前我正在开发一个需要在mapview上覆盖空心布局的项目,空心布局将用于显示远距离定位点,我发布图片以证明我的意思。
基本上整个屏幕由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>
我使用framelayout来允许布局覆盖其他布局,并在每个边缘创建4个sepreate来模拟我真正想要的东西(空心)。我只是不确定是谁让布局只显示4边并保持中心隐形,如果任何人可以帮助请给我一些指导。感谢。
答案 0 :(得分:6)
您可以使用另一个符合要求的简单选项。
创建具有已定义形状的新drawable资源。调用此资源(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,而背景引用了drawable形状。
注意:此布局的填充必须与形状中的笔触宽度相同。在这种情况下,它是50dp
这就是它在我的手机上的样子(截图):
答案 1 :(得分: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>
此处笔划充当屏幕上的半透明区域。您可以更改宽度以符合您的要求。
答案 2 :(得分: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>
至少这是我能想到的最简单的方法!