`VideoView.start()`导致其他视图中断

时间:2012-01-30 23:36:31

标签: android android-layout android-ui

当我的活动通过onNewIntent收到新意图时,会更新三个ViewImageViewTextView和{{1}的数据}。问题是,其他两个视图只是闪烁,然后在VideoView出现时消失。散布几个断点后,我发现它们在设置内容时会显示,但在我的VideoView方法中调用VideoView.onStart()时会消失。按下菜单按钮时,我也会显示MediaPlayer.onPrepared()。按下菜单按钮后,它会显示出来。我使用的是Android API 9,因为这是我正在处理的设备上的API。我真的需要帮助,所以我很感激任何建议。

这是布局。我不认为这是问题:

AlertDialog

注意<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:keepScreenOn="true" > <TextView android:id="@+id/marquee" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:ellipsize="marquee" android:focusable="false" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" android:textAppearance="@android:style/TextAppearance.Large" android:textColor="@android:color/white" > </TextView> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_above="@id/marquee" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_gravity="center_vertical" /> <VideoView android:id="@+id/video" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/marquee" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:layout_toLeftOf="@+id/image" /> </RelativeLayout> 是一个大帐篷;它应该继续向侧面滚动,直到它被处理掉。我发现当文本太短而无法启动选框时,TextView和ImageView会消失(如前所述,它们会瞬间显示,然后消失)。 但是,当文本导致选取框功能激活时,一切正常。

CURRENTLY:

我致电TextView后,在postInvalidateDelayed(500)ImageView上致电TextView,让我开始工作。我认为VideoView.start()方法导致了问题,并要求其他视图调用start()。此外,出于某种原因,调用invalidate()和调用start()之间需要稍有延迟。

2 个答案:

答案 0 :(得分:0)

布局是个问题。

您的VideoView被声明为match_parent, match_parent,允许它占用屏幕的整个宽度和高度。由于您在xml文件上声明了它(您使用了RelativeLayout。订购事项),因此VideoView将覆盖TextView和ImageView。

如果你感到困惑, match_parentfill_parent基本相同。它只是android 2.3 +

fill_parent的另一个名称

现在你能做些什么呢?

以最先声明最大值的方式对视图重新排序。在这种情况下,VideoView,然后是ImageView,然后是TextView。

另请注意,您的ImageView的高度设置为fill_parent - 您可能不希望这样。

答案 1 :(得分:0)

我创建了一个方法,但看起来非常糟糕:

private void startVideo() {
    this.videoView.start();
    if (this.imageView != null)
        this.imageView.postInvalidateDelay(500);
    if (this.textView != null)
        this.textView.postInvalidateDelay(500);
}

它有效,但它让我觉得很脏。