在 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:paddingTop
、android:paddingStart
、android:paddingEnd
、android: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>
我还建议您不要对 VideoView
的 layout_width
和 layout_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" />
我想为 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:paddingTop
、android:paddingStart
、android:paddingEnd
、android: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>
我还建议您不要对 VideoView
的 layout_width
和 layout_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" />