Android:是否可以创建空心(空心)布局?

时间:2012-08-21 16:17:33

标签: android layout

对不起,如果我的话题令人讨厌,我不确定用哪个词来描述我需要的布局。

目前我正在开发一个需要在mapview上覆盖空心布局的项目,空心布局将用于显示远距离定位点,我发布图片以证明我的意思。

Mapview with storke overlay

基本上整个屏幕由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边并保持中心隐形,如果任何人可以帮助请给我一些指导。感谢。

3 个答案:

答案 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

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

enter image description here

答案 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>

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