VideoView 在横向模式下全屏显示
Posted
技术标签:
【中文标题】VideoView 在横向模式下全屏显示【英文标题】:VideoView in full screen in landscape mode 【发布时间】:2015-01-05 14:36:25 【问题描述】:我有以下带有各种元素的 XML,我希望在设备处于横向模式时以全屏(如 YouTube)扩展唯一的 VideoView 元素:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="#FFFFFF"
tools:context=".VideoMapPanel" >
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_
android:layout_
android:gravity="bottom"
sothree:panelHeight="68dp"
sothree:shadowHeight="4dp"
sothree:paralaxOffset="100dp"
sothree:dragView="@+id/dragView"
>
<!-- MAIN CONTENT -->
<FrameLayout
android:layout_
android:layout_
android:orientation="vertical">
<android.support.v7.widget.Toolbar
xmlns:sothree="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_toolbar"
android:layout_
android:background="?attr/colorPrimary"
sothree:theme="@style/ActionBar"
android:layout_/>
<TextView
android:id="@+id/main"
android:layout_
android:layout_
android:layout_marginTop="?attr/actionBarSize"
android:gravity="center"
android:text="Main Content"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="true"
android:textSize="16sp" />
<fragment
android:id="@+id/map"
android:layout_
android:layout_
class="com.google.android.gms.maps.MapFragment" />
</FrameLayout>
<!-- SLIDING LAYOUT -->
<LinearLayout
android:layout_
android:layout_
android:background="#eeeeee"
android:orientation="vertical"
android:clickable="true"
android:focusable="false"
android:id="@+id/dragView">
<LinearLayout
android:layout_
android:layout_
android:id="@+id/main_title_bar"
android:orientation="horizontal">
<TextView
android:id="@+id/tvName"
android:layout_
android:layout_
android:layout_weight="1"
android:textSize="20sp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:background="#FF8800"
android:gravity="center_vertical"
android:paddingLeft="10dp"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_
android:layout_
android:gravity="center_vertical"
android:background="#FF8800"
android:visibility="gone" >
</ProgressBar>
<ImageView
android:id="@+id/tvLogo"
android:layout_
android:background="#FF8800"
android:layout_
android:paddingRight="10dp"
android:gravity="center_vertical" />
</LinearLayout>
<VideoView
android:id="@+id/liveView"
android:clickable="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_
android:layout_
android:layout_gravity="center"/>
<ImageButton
android:id="@+id/videoPlayButton"
android:layout_
android:layout_
android:background="@null"
android:layout_gravity="center"
android:layout_margin="10dp"
android:src="@drawable/videoplaybutton" >
</ImageButton>
<LinearLayout
android:id="@+id/menuLayout"
android:background="#FFFFFF"
android:layout_
android:layout_
android:orientation="horizontal">
<ImageButton
android:id="@+id/fbLogo"
android:background="#FFFFFF"
android:layout_
android:layout_
android:layout_weight="0.8"
android:src="@drawable/facebook_logo"
/>
<ImageButton
android:id="@+id/twitterLogo"
android:background="#FFFFFF"
android:layout_
android:layout_
android:layout_weight="0.8"
android:src="@drawable/twitter_logo"
/>
<ImageButton
android:id="@+id/webLogo"
android:background="#FFFFFF"
android:layout_
android:layout_
android:layout_weight="0.8"
android:src="@drawable/web_logo"/>
</LinearLayout>
<ScrollView
android:layout_
android:layout_ >
<com.myapp.tv.ExpandableTextView
android:id="@+id/tvDescription"
android:layout_
android:layout_
android:textSize="14sp"
android:textColor="@android:color/black"
android:gravity="center_vertical"
android:paddingTop="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"/>
</ScrollView>
</LinearLayout>
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
</RelativeLayout>
我应该以编程方式解决这个问题吗?
【问题讨论】:
【参考方案1】:我会通过使用另一个布局文件来解决这个问题。
我会先看看http://developer.android.com/training/basics/supporting-devices/screens.html#create-layouts
目前我想你发布的布局保存在 res/layout/my_layout.xml
您可以做的是创建另一个文件 res/layout-land/my_layout.xml,而不是相同的布局定义布局将全屏显示 VideoView 元素。 如果您正在使用其他组件,请确保将它们包含在布局中或在代码中优雅地处理空视图。您可以通过将它们包含在布局中但将可见性设置为消失来将它们包含在布局中。
【讨论】:
我已经尝试过这个解决方案,但正如您在 xml 中注意到的那样,我有一个地图片段。因此,加载一个新的相同布局(即使该元素具有可见性:已消失)会使应用程序崩溃:原因:java.lang.IllegalArgumentException:二进制 XML 文件第 51 行:重复 id 0x7f0e0099、标签 null 或父 id 0xffffffff 与另一个com.google.android.gms.maps.MapFragment 的片段 您是否在片段中加载此布局?如果你是那么,我的错,是的,你应该以编程方式解决这个问题。这种情况下的问题是片段中有一个片段。 developer.android.com/about/versions/… 注意:当布局包含以上是关于VideoView 在横向模式下全屏显示的主要内容,如果未能解决你的问题,请参考以下文章