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 在横向模式下全屏显示的主要内容,如果未能解决你的问题,请参考以下文章

以纵向模式在videoview中全屏制作视频[重复]

Videoview 在框架布局内没有全屏显示

使用旋转和按钮处理 VideoView 全屏和纵向

Vim在图形环境下全屏产生黑边

单击按钮时如何使 VideoView 全屏显示?

当视频视图处于全屏状态时,RecyclerView 被重新创建