2016-02-09 6 views
0

Недавно я добавил панель инструментов в свой проект, вручную установив ее на 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> 
+0

Посмотрите, работает ли решение [здесь] (http://stackoverflow.com/q/28224301/450534). –

+0

Нет его не работает yar –

ответ

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

Вам получить указатель на «вид» непосредственно:

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.

+2

Прямо сейчас я получаю исключение null-указателя на getActionView(), вызванное нулевым объектом. Я отлаживал его, проблема заключается в том, что в появившемся меню панели инструментов не было никаких элементов. –

+0

Можете ли вы опубликовать код, который вы используете для установки меню на панели инструментов? –

+0

@alex: Я раздуваю меню в своем обратном вызове onCreateOptionMenu() –

0
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.