【问题标题】:How to use showcase view on a media router icon in tool bar如何在工具栏中的媒体路由器图标上使用展示视图
【发布时间】:2016-02-09 13:17:19
【问题描述】:

我最近通过setSupportActionbar(toolbar) 手动设置在我的项目中添加了工具栏。现在我面临一个问题,比如我无法在工具栏中获取对媒体路由器按钮的视图引用,因此展示视图不起作用。在媒体路由按钮中显示展示视图是否有任何解决方法?

我的菜单设置如下:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/search"
        android:orderInCategory="200"
        android:title="@string/text_search"
        android:menuCategory="system"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

    <item
        android:id="@+id/media_route_menu_item"
        android:orderInCategory="100"
        android:title="@string/media_route_menu_title"
        app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
        app:showAsAction="always" />
    <item
        android:id="@+id/downloads"
        android:orderInCategory="90"
        android:icon="@drawable/ic_actionbar_download"
        android:visible="false"
        app:showAsAction="ifRoom"
        android:title="Downloads"/>
    <item
        android:id="@+id/cancel"
        android:title="Cancel"
        android:visible="false"
        app:showAsAction="never"/>


</menu>

【问题讨论】:

  • 看看here的解决方案是否有效。
  • 不,它不起作用

标签: android chromecast showcaseview


【解决方案1】:

你可以试试这个对我有用的代码

    Target viewTarget = new Target() {
    @Override
    public Point getPoint() {
        return new ViewTarget(toolbar.findViewById(R.id.media_route_menu_item)).getPoint();
    }
};

sv = new ShowcaseView.Builder(this)
        .setTarget(viewTarget)
        .singleShot(2)
        .setShowcaseEventListener(this)
        .build();

【讨论】:

    【解决方案2】:

    您可以直接获得指向“视图”的指针:

        Menu menu = mToolbar.getMenu();
        View view = menu.findItem(R.id.media_route_menu_item).getActionView();
        if (view != null && view instanceof MediaRouteButton) {
            new ShowcaseView.Builder(this)
                    .setTarget(new ViewTarget(view))
                    .setContentTitle(R.string.touch_to_cast)
                    .build();
        }
    

    如果您使用的是 CCL,则无需引入 Showcase 库即可获得此功能。

    【讨论】:

    • 现在我在一个空对象上调用 getActionView() 时遇到空指针异常。我调试它的问题是工具栏返回的菜单不包含任何项目。
    • 能否贴出用于设置工具栏菜单的代码?
    • @alex : 我在 onCreateOptionMenu() 回调中膨胀菜单
    • 您是否使用setSupportActionBar() 方法将此工具栏设置为操作栏?这是使用带有工具栏的onCreateOptionsMenu() 所必需的。
    • @alex:有什么方法可以让我查看工具栏菜单项的引用吗?在上面的建议中,工具栏本身返回的菜单中没有任何项目
    【解决方案3】:
    custom ShowcaseView : 
    
    - First Initialize ShowcaseConfig Object :
      ShowcaseConfig config = new ShowcaseConfig();
    
    - If your Set Custome Text :
            config.setTypeface(tf); 
    
    - set delay between two view
            config.setDelay(500); // half second between each showcase view
    
    - set Content Text and Button Size :
            if (Util.isZhCN()) {
                config.setContentTextSize(24);
                config.setButtonTextSize(22);
            } else {
                config.setContentTextSize(36);
                config.setButtonTextSize(30);
            }
    
    
            MaterialShowcaseSequence sequence = new 
      MaterialShowcaseSequence(context, "sequence example");
    
            sequence.setConfig(config);
    
            MaterialShowcaseView oneShowcaseView = new MaterialShowcaseView.Builder(context)
                    .setTarget(" PUT YOUR TARGEXT VIEW").setContentText(" PUT YOUR CONTENT").build();
    
            sequence.addSequenceItem(oneShowcaseView);
            sequence.start();
    
    
    - try this work for me.
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2020-08-10
      • 1970-01-01
      • 2018-08-09
      • 2019-03-03
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多