我的活动是一个视频播放器活动,它的工作正常,在某些视频上,如果视频不受支持或高质量,它必须抛出一条消息(handleHardwareAccelerationError)。 它显示为Toast,信息很好。 现在我想更改此Toast消息以显示图片或小图标,这可能吗?这是我的handleHardwareAccelerationError的代码,提前谢谢。
*
我试过的是这个,但没有显示任何内容。
private void handleHardwareAccelerationError() {
mHardwareAccelerationError = true;
if (mSwitchingView)
return;
Toast.makeText(this, R.string.hardware_acceleration_error, Toast.LENGTH_LONG).show();
}
这是myinforbar.xml
private void handleHardwareAccelerationError() {
mHardwareAccelerationError = true;
if (mSwitchingView)
return;
final View popupView = getLayoutInflater().inflate(R.layout.myinforbar, null);
mError = (ImageView) popupView.findViewById(R.id.errornew);
mError.setVisibility(View.VISIBLE);
}
编辑:
原始活动很长,可以在此处找到,而不是粘贴整个活动,您可以在此处查看VideoPlayerActivity (private void handleHardwareAccelerationError)
新更新......
这没有应用消息(onHardwareError),我想在视频播放(信息栏)而不是Toast消息时弹出这个底部小框内的图标。
答案 0 :(得分:0)
Toast很受限制,你无法显示图标。 编辑:Gunjav Dave说这是可能的,所以它的方法值得一试。
无论如何这个免费的图书馆:SuperToast
可以满足您的需求。
如果您更愿意遵守Google的标准,您可以使用Snackbars,据我所知,不允许放置图标,但无论如何与动作/按钮相关联,它们是标准。
我无法理解你尝试使用popupView做什么,如果你想使用PopupWindow,你必须使用完全不同的语法。我的This Balloon Popup library可以帮助你制作一个附加到View的弹出窗口,使用PopupWindow,你也可以向它添加一个布局,或者用它作为如何制作PopupWindow的例子。
编辑: 您正在为视图内的布局充气,但这并不显示视图。相反,您应该使用PopupWindow,并在其中为布局充气。 这是从我的BalloonPopup库中获取的一个示例:
// ....
hostedView = ((LayoutInflater) ctx.getSystemService(LAYOUT_INFLATER_SERVICE)).inflate(layoutRes, null);
textView = (TextView) hostedView.findViewById(R.id.text_view);
textView.setText(text);
// ....
popupWindow = new PopupWindow(hostedView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
换句话说,你应该可以做类似
的事情PopupWindow popupWindow = new popupWindow(mError, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
在您的代码中显示弹出窗口。
这些是代码的基本要点,然后您可以重新定位弹出窗口,并最终跟踪它以进行编辑和重新显示,而不是始终从头开始创建。无论如何,请考虑使用BalloonPopup library,这可以满足您的需求,而不会对动画,显示时间,窗口的持久性和定位感到疯狂。您可以向其中扩展您的布局,例如使用图标和文本,并使其显示在另一个视图的中心,可以是您(已经存在的)媒体播放器。
更多编辑: 另一种非常简单的解决 为简单起见,创建一个RelativeLayout,托管所有视频播放器,然后在其中心创建一个简单的ImageView。隐藏时将其可见性设置为GONE,必须显示错误时将其可见性设置为VISIBLE。随后,您可以使用计时器或touchListener将其关闭,再次使其成为GONE。
答案 1 :(得分:0)
XML名称或布局名称将是
<LinearLayout xmlns:androidclass="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button5_background">
<ImageView
android:id="@+id/errornew"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
</LinearLayout>
LayoutInflater inflater = LayoutInflater.from(this);
View layout= inflater.inflate(R.layout.myinforbar, null);
Toast toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(layout);
toast.show();
答案 2 :(得分:0)
试试这个
private void handleHardwareAccelerationError() {
mHardwareAccelerationError = true;
if (mSwitchingView)
return;
final View popupView = getLayoutInflater().inflate(R.layout.myinforbar, null);
PopupWindow pw = new PopupWindow(popupView , 300, 400, true);
pw.showAtLocation(popupView , Gravity.CENTER, 0, 0);
mError = (ImageView) popupView.findViewById(R.id.errornew);
mError.setVisibility(View.VISIBLE);
}