在 android 中的图像上方设置 videoview

setting a videoview above an image in android

我想为 android 应用程序创建以下视图。 视图应该是相对的,当它在不同的屏幕尺寸上打开时,videoview 应该在图像的框架内

这是目前的 xml 文件 :(

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/updatemsg"
    android:gravity="center"
    android:keepScreenOn="true"
    android:orientation="vertical"
    android:padding="10dp" >

    <VideoView
        android:id="@+id/upgradevideo"
        android:layout_width="757dp"
        android:layout_height="426dp"
        android:layout_marginBottom="0dp"
        android:layout_marginTop="55dp" />

    <Button
        android:id="@+id/upgrade_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OK" />

</LinearLayout>

您可以使用 FrameLayout 来实现。

<FrameLayout
    android:id="@+id/upgradevideo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

 //make childrens here,they will appear one above the other

</FrameLayout

我不会使用 FrameLayout,它的子项没有关系属性(这里我们希望进入另一个视图)。

你的方法(LinearLayout 有背景)对我来说似乎是正确的。您所要做的就是为您的布局找到合适的填充。我会去掉 layout_margin 属性,只在父布局上使用 android:paddingTopandroid:paddingStartandroid:paddingEndandroid:paddingBottom

关于不同设备的一致性,可以设置不同的维度,比如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/updatemsg"
    android:paddingTop="@dimen/padding_top" >

那么你只需在不同的文件夹中定义一个 dimen 资源,这样相同的属性将根据屏幕呈现不同的值 size/orientation。看看here.

示例: values/dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="padding_top">20dp</dimen>
</resources>

示例: values-xlarge/dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="padding_top">40dp</dimen>
    <!-- this value will be used for very large devices -->
</resources>

我还建议您不要对 VideoViewlayout_widthlayout_heigth 属性进行硬编码。尝试使用动态值。

如果您想在 xml 文件中的另一个视图上查看,则必须使用 FrameLayout。 使用重力属性使布局支持android中的所有类型的屏幕。 不要使用像素代替宽度和高度。始终使用 fill_parent 或 wrap_content.

请参阅下面的代码以了解 FrameLayout。

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

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:background="#00000c"
    android:padding="10dp"
    android:text="Frame Layout Sample"
    android:textColor="#fafafa"
    android:textSize="22sp" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|bottom"
    android:layout_marginLeft="5dp"
    android:background="#AA000000"
    android:padding="10dp"
    android:text="28/May/2015"
    android:textColor="#FFFFFF"
    android:textSize="18sp" />