当我的活动通过onNewIntent
收到新意图时,会更新三个View
,ImageView
,TextView
和{{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()
之间需要稍有延迟。
答案 0 :(得分:0)
布局是个问题。
您的VideoView被声明为match_parent, match_parent
,允许它占用屏幕的整个宽度和高度。由于您在xml文件上声明了它(您使用了RelativeLayout。订购事项),因此VideoView将覆盖TextView和ImageView。
如果你感到困惑,
match_parent
与fill_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);
}
它有效,但它让我觉得很脏。