2015-11-03 2 views
0

Я использую https://github.com/amlcurran/ShowcaseView для отображения ShowcaseView для MenuItems, как показано ниже:Использование ShowcaseView целевой MenuItems Failed

MainActivity.java:

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 



     // Set our view from the "main" layout resource 
     setContentView(R.layout.activity_main); 
    //getWindow().setBackgroundDrawable(null); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     //Toolbar will now take on default actionbar characteristics 
     setContentView(R.layout.activity_main); 

    setTitle("DDIT Results"); 

    try { 

     new ShowcaseView.Builder(MainActivity.this) 
       .withMaterialShowcase() 
       .setStyle(R.style.MyTheme) 
       .setTarget(new ActionItemTarget(MainActivity.this, R.id.action_notify)) 
       .setContentTitle("Enable Notification") 
       .setContentText("Click On the Button and get notified whenever the Result-table Changes") 

       .build() 
     .show(); 
    } 
    catch(Exception e) 
    { 
     Toast.makeText(MainActivity.this,""+e,Toast.LENGTH_LONG).show(); 
    } 

} 

Что вызывает приложение будет разбился.

menu_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 

<item android:id="@+id/action_rateus" android:title="@string/rate_us" android:orderInCategory="100" app:showAsAction="never"/> 
<item android:id="@+id/action_notify" android:title="@string/notify" android:icon="@drawable/ic_notifications_none_white_24dp" 
    android:orderInCategory="100" app:showAsAction="ifRoom" /> 

<item android:id="@+id/action_privacy_policy" android:title="Privacy Policy" android:orderInCategory="100" app:showAsAction="never"/> 
<item android:id="@+id/action_email_us" android:title="@string/action_email_us" android:orderInCategory="100" app:showAsAction="never"/> 
<item android:id="@+id/action_settings" android:title="@string/action_settings" 
    android:orderInCategory="100" app:showAsAction="never" /> 

Вход:

java.lang.RuntimeException: insertShowcaseViewWithType cannot be used when the theme has no ActionBar 
     at com.github.amlcurran.showcaseview.targets.ActionBarReflector.getHomeButton(ActionBarReflector.java:43) 
     at com.github.amlcurran.showcaseview.targets.ActionBarReflector.getActionBarView(ActionBarReflector.java:36) 
     at com.github.amlcurran.showcaseview.targets.ActionItemTarget.setUp(ActionItemTarget.java:49) 
     at com.github.amlcurran.showcaseview.targets.ActionItemTarget.getPoint(ActionItemTarget.java:43) 
     at com.github.amlcurran.showcaseview.ShowcaseView$1.run(ShowcaseView.java:176) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Можно ли иметь showcaseview ориентированы на конкретные элементы в панели действий? Я искал эту проблему и не придумывал никаких решений. Надеюсь, кто-то узнает эту ошибку и быстро отвечает за нее - в противном случае я могу предоставить дополнительную информацию, если она запрошена. Любая помощь будет назначена.

+0

Я предлагаю вам создать настраиваемую панель действий и получить представление, по которому вам нужно сфокусироваться, используя витрину. –

+0

@VibhorChopra Можете ли вы предоставить пример кода? – Prabhakar

+0

@ Prabhakar- что вам нужно, пример кода пользовательской панели действий или получения обзора и фокусировки на нем с помощью витрины? –

ответ

0

Шаг 1: Создайте класс Activity и реализуйте его с помощью OnClickListener.

public class MainActivity extends Activity implements View.OnClickListener { 

private ImageView menuDisplayIcon; 
private ShowcaseView showCaseView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // For no title 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // For ull screen view 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    // Setting layout 
    setContentView(R.layout.activity_main); 
    // Initializing UI 
    initUI(); 
    // Showcase 
    showcaseUtils(); 

} 

/** 
* Initializing UI components wrt MainActivity 
*/ 
private void initUI() { 
    menuDisplayIcon = (ImageView) findViewById(R.id.menuDisplayIcon); 
} 

/** 
* Showcase view 
*/ 
private void showcaseUtils() { 
    showCaseView = new ShowcaseView.Builder(this).setTarget(new ViewTarget(menuDisplayIcon)) 
      .setContentTitle("Title").setContentText("Description").setOnClickListener(this).build(); 
    showCaseView.setButtonText("Finish"); 
} 


@Override 
public void onClick(View v) { 
    if (showCaseView != null) { 
     showCaseView.hide(); 
    } 
} 

Шаг 2: Компоновка activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context=".MainActivity"> 

<include layout="@layout/actionbar_layout" /> 


</LinearLayout> 

Шаг 3: Компоновка: actionbar_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="#000000" 
android:gravity="right"> 

<ImageView 
    android:id="@+id/menuDisplayIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settingsicon" /> 

</LinearLayout> 

Примечание: Включить Showcase SDk доступны на GitHub.

За любой запрос не стесняйтесь спрашивать.

+0

Работает за исключением двух вещей: 1) Кнопка Finish отображается за пределами диапазона отображения телефона. 2) Она не адаптирует пользовательскую тему. – Prabhakar

+0

Вы пытаетесь создать эмулятор? –

+0

№. Пробовал это на реальных устройствах. – Prabhakar

0

На данный момент ShowcaseView не поддерживает последнюю версию AppCompat с помощью панели действий. Вы можете увидеть более подробную информацию в этом выпуске here.

Моей рекомендацией на данный момент является использование активности AppCompat с помощью панели инструментов вместо ActionBar по умолчанию. Это должно работать нормально. Там есть демо-версия этого as an Activity и с использованием Target