【问题标题】:I need help on android Toast view as icon on error我需要有关 android Toast 视图作为错误图标的帮助
【发布时间】:2017-01-08 18:10:16
【问题描述】:

我的活动是一个视频播放器活动,它工作正常,在某些视频上,如果视频不受支持或质量很高,它必须抛出一条消息 (handleHardwareAccelerationError)。 它显示为带有消息的 Toast。 现在我想更改此 Toast 消息以显示图片或小图标,这可能吗?这是我的handleHardwareAccelerationError代码,提前致谢。

private void handleHardwareAccelerationError() {
    mHardwareAccelerationError = true;
    if (mSwitchingView)
        return;

    Toast.makeText(this, R.string.hardware_acceleration_error, Toast.LENGTH_LONG).show();

}

我尝试过的是这个,但没有显示任何内容。

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);



}

这里是 myinforbar.xml

<LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="21dp" android:layout_marginLeft="0.0dip" android:layout_marginTop="5.0dip"
            android:background="@drawable/button5_background">

            <ImageView
            android:id="@+id/errornew"
                android:src="@drawable/everyone_icon_nearby_cur"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
                android:visibility="invisible"/>
        </LinearLayout>

编辑:

原始活动很长,可以在这里找到而不是粘贴整个活动你可以在这里看到它VideoPlayerActivity (私有无效句柄HardwareAccelerationError)

新更新...

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

【问题讨论】:

  • 试试tastytoast,它看起来很棒很酷的动画。

标签: java android drawable show toast


【解决方案1】:

Toast 非常有限,不能显示图标。 编辑:Gunjav Dave 说这是可能的,所以值得一试。

无论如何这个免费图书馆:SuperToast

可以做你需要的。

如果您更愿意遵守 Google 的标准,您可以改用 Snackbars,据我所知,它不允许放置图标,但无论如何都可以与操作/按钮相关联,它们是标准的

我不明白你想用 popupView 做什么,如果你想使用 PopupWindow,你必须使用完全不同的语法。我的This Balloon Popup library 可以帮助您制作附加到视图的弹出窗口,使用 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,它可以满足您的需求,而不会对动画、显示时间、窗口的持久性和定位感到疯狂。您可以将布局添加到其中,例如使用图标和文本,并使其恰好出现在另一个 View 的中心,该 View 可以是您的(已经存在的)媒体播放器。

更多编辑: 另一个非常简单的解决方案。 为了简单起见,创建一个RelativeLayout,它承载你所有的视频播放器,然后在它的中心创建一个简单的ImageView。隐藏时将其可见性设置为 GONE,当必须显示错误时将其可见性设置为 VISIBLE。随后,您可以使用计时器或 touchListener 将其关闭,使其再次 GONE。

【讨论】:

  • 感谢您的回复和帮助,我使用 Popupview 的原因是它是一个 Infor-Bar,显示有关播放媒体的信息,如名称、持续时间、类别等。我想在里面显示 toast 消息布局 ID R.id.errornew 中的这个 Infor-Bar 作为图标而不是 Toast。
  • 我对我的评论做了一些更新来回答你。如果您认为它有用,请考虑给它一个加号,谢谢。
  • 感谢 Beppis 的回答,但由于我是 android 新手,我很难理解将您的示例放在我的代码中的什么位置。完整的代码是一个 vlc android ( VideoPlayerActivity ),信息栏确实显示并且所有工作,它只是显示我想成为图标而不是文本的 toast,vlc 视频播放器活动有一个 toast 可以在 HD 或 4K 视频上显示所以我需要编辑的是(handleHardwareAccelerationError)即使已经让它们工作,我是否需要创建新布局?,您可以发布一个与我的布局 xml 匹配的完整示例或查看原始 Vlc android
  • org.videolan.vlc.gui.video.VideoPlayerActivity。在它说 private void handleHardwareAccelerationError 的部分
  • 我真的不知道,我不知道你在说什么源代码,也不知道你想实现4个解决方案中的哪一个。
【解决方案2】:

试试这个

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

【讨论】:

  • 我试过这个亲爱的,但它看起来和我的几乎一样,所以什么都没有显示。我已添加 xml 文件以供参考。谢谢
  • pw.showAtLocation(popupView, Gravity.CENTER, 0, 0);在您的代码中,您没有显示弹出窗口
  • 是的,你说得对 pw.showAtLocation(popupView , Gravity.CENTER, 0, 0);不在我的原始代码中,但仍然不适合我,有什么建议吗?
  • 在我的情况下它工作正常不要直接在 onCreate() 方法内部调用使用 setContentView(some layout) 然后使用这部分代码它会正常工作。
  • 通过粘贴此代码,我没有收到任何错误,但它没有按我的意愿显示错误图标,而且此代码必须在私有 void handleHardwareAccelerationError 上的 Vlc VideoPlayerActivity 中使用,而不是根据原始 Vlc android 所以我无法更改使用位置,只是想从 showToast 编辑原始活动以显示 Ican,请在 vlc android github 中查看完整活动
【解决方案3】:

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();  

【讨论】:

  • 嗨,我应该在哪里添加此代码,我的意思是我在这里看不到任何布局 ID?对不起,这里的总菜鸟请详细解释。谢谢。
  • R.layout.mytoast?这是哪里?
  • 创建一个名为“mytoast”的xml并使用答案中提到的xml代码
  • 是的,但我已经有一个名为我的信息栏的布局,我想在布局 id 上显示名为 android:id="@+id/errornew" 的图标,对不起,这里没有,所以我得到了很多错误,也无法解决,非常感谢您的帮助,但您能看看我编辑的 xml 并告诉我该放在这里的确切内容。谢谢
  • 我已经编辑了我的答案。请检查。正确的话点个赞
猜你喜欢
  • 2010-09-23
  • 2015-12-20
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多