我需要Android Toast视图的帮助作为错误的图标

时间:2017-01-08 18:10:16

标签: java android drawable show toast

我的活动是一个视频播放器活动,它的工作正常,在某些视频上,如果视频不受支持或高质量,它必须抛出一条消息(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)

新更新......

enter image description here

这没有应用消息(onHardwareError),我想在视频播放(信息栏)而不是Toast消息时弹出这个底部小框内的图标。

3 个答案:

答案 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);
        }