如何将一个视图显示为另一个视图的叠加?

时间:2011-02-04 18:10:08

标签: android android-layout android-webview

我有两个视图占据整个屏幕,我想同时显示两个视图,一个在另一个上面。我的布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <WebView 
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

    <org.example.myCustomView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

</LinearLayout>

请注意myCustomView使用onDraw(此方法最后一个语句为invalidate())来绘制自定义图形。我得到的问题是它只显示myCustomView,隐藏了WebView。我试图将mycustomView的背景颜色更改为透明,但这没有任何区别。

我还希望能够将myCustomView作为WebView上的叠加层,反之亦然。

3 个答案:

答案 0 :(得分:23)

为初学者使用RelativeLayout

您可以使用ViewGroup.addView(View child, int index, ViewGroup.LayoutParams params)或变体以及ViewGroup.removeView(View view)ViewGroup.removeViewAt(int index)

这显然需要您使用LayoutInflater手动充气视图,但您可以在充气后保持对每个视图的全局参考,并在两者之间翻转。

答案 1 :(得分:15)

我不确定你是否可以在同一个xml文件中执行此操作,但我知道如果你移动:

<org.example.myCustomView
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent" />

到另一个xml文件,并创建另一个活动。将内容视图设置为包含org.example.myCustomView的xml文件并调用该活动。在清单中,当您添加该活动时,添加一个主题语句:

android:theme="@android:style/Theme.Dialog"

完整陈述应如下所示:

<activity android:name=".name_of_activity"  
    android:label="TextToBeOnTop"  
    android:theme="@android:style/Theme.Dialog">  
</activity>

结果将如下所示(仅适用于您的组件):

enter image description here

虽然当它们仍然在同一个xml文件中时可能会这样做。如果可能,可以通过单独保留清单并将costomeView编辑为以下内容来完成:

<org.example.myCustomView 
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:theme="@android:style/Theme.Dialog" />

(我将主题陈述添加到CustomView中)

如果这不是你想要的东西,那么我会把一些与Nick Campion所说的相似的东西重新贴上来,这就是将fillParent改为wrapContent。 你可以做到这一点,或者你可以选择你想要的尺寸。您可以使用以下两个选项:

<org.example.myCustomView  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="50dip"  
    android:layout_height="50dip" /> 

(你可以将“50dip”更改为你想要的任何数字,只要它以dip结束)

或:

<org.example.myCustomView  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content" />

答案 2 :(得分:-1)

术语fill_parent表示消耗父级中的所有允许空间。尝试将其设置为wrap_content。然后,您可以尝试向两者添加weight = 1,以尝试均匀分配剩余空间。