6

几个月前,我给自己买了一台 HTC ONE X。我很欣赏他们通过交互式小部件和帮助功能引导用户迈出手机第一步的方式。

我想将这种功能添加到我们正在构建的应用程序 Rogerthat 中,但我想知道是否有工具/库可以帮助我实现这一点?

4

6 回答 6

9

Roman Nurik 组建了一个名为“Wizard Pager”的库来做这类事情。它可能被用来做你所要求的。

https://plus.google.com/113735310430199015092/posts/6cVymZvn3f4

http://code.google.com/p/romannurik-code/source/browse/misc/wizardpager

更新:

我想这也可能对你有帮助。这类似于首次在 ICS+ 中运行库存 Android rom 时显示的导览。

该库可以在任何版本的 Android 中使用:

https://github.com/Espiandev/ShowcaseView

如果您想要连续展示,可以查看此扩展:

https://github.com/blundell/ShowcaseViewExample

例子

于 2012-11-20T17:51:52.250 回答
5

我为我的应用程序进行了导览,允许用户浏览 4 个笔记页面并查看说明。这是代码:

public static void tour(final Context context, final String title, final int pageNumber, 
                        final Drawable icon, final String[] pageMessage, final int[] layouts, final ViewGroup root) {
    Builder tourDialog = new AlertDialog.Builder(context);
    int nPage = 0;


    if (pageMessage!=null){
        tourDialog.setMessage(pageMessage[pageNumber]);
        nPage = pageMessage.length;
    }

    if (layouts!=null){         
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View layout1 = inflater.inflate(layouts[pageNumber], root);
        tourDialog.setView(layout1);
        //tourDialog.setView(views[pageNumber]);
        nPage = layouts.length;
    }


    tourDialog.setTitle(title+" (page "+(pageNumber+1)+"/"+nPage+")");

    tourDialog.setPositiveButton("Prev",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    tour(context, title,  pageNumber-1, icon, pageMessage,layouts, root);
                    return;
                }
            });


    tourDialog.setNeutralButton("Next",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    tour(context, title,  pageNumber+1, icon, pageMessage,layouts, root);
                    return;
                }
            });
    tourDialog.setNegativeButton("Ok",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    return;
                }
            });
    if (icon!=null)
        tourDialog.setIcon(icon);
    AlertDialog dialog = tourDialog.create();

    dialog.show();

    if (pageNumber==0)
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
    else if (pageNumber==nPage-1){
        dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setEnabled(false); 
    }
}

使用示例:

int[] layout = {R.layout.note1, R.layout.note2, R.layout.note3, R.layout.note4}; //resource id of each page's layout
tour(context, "Notes ", 0,getResources().getDrawable(R.drawable.gmpte_logo_25px),null, layout, (ViewGroup) findViewById(R.id.root));

以及笔记页面布局的示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@+id/root"
  android:padding="10dip">

<TextView android:id="@+id/text_before"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textColor="#FFF"
          android:textSize="16dp"
          android:text="@string/note1_before_text"
          android:layout_marginTop="10dp"/>
<ImageView android:id="@+id/image"
          android:contentDescription="@string/desc"
          android:src="@drawable/mylocation_blue"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_toRightOf="@+id/text_before"
          />
<TextView
    android:id="@+id/text_after"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/text_before"
    android:layout_below="@+id/image"
    android:text="@string/note1_after_text"
    android:textColor="#FFF"
    android:textSize="16dp" />
</RelativeLayout>

您需要为每个笔记页面编写自己的布局,但android:id="@+id/root"在每个页面的根布局中使用相同的 id ( )。

于 2012-11-20T16:42:33.417 回答
3

Showcase View Library绝对是您想要的:

展示案例视图库

于 2013-04-22T19:10:29.503 回答
0

使用 ViewPager 和片段来显示帮助屏幕。你会发现很多关于它的信息。

于 2012-11-20T17:57:11.627 回答
0

我写了一个小库,其中包含一个用于制作应用程序的简单组件。这仅限于我的情况,但也许可能是你的情况。Single LessonCardView 首次显示 onstartactivity 或按钮单击 任何批评、帮助或建议将不胜感激。谢谢 https://github.com/dnocode/DnoLib

于 2015-04-15T12:52:11.763 回答
0

你可以试试 TourGuide http://worker8.github.io/TourGuide

它是最新的(使用 Kotlin 1.2)并且运行良好。

我最近(2021 年)检查过的大多数替代方案要么不起作用,要么有问题。

TourGuide 并不完美(距离上次提交已经 3 年了),维护者似乎没有回应 PR 或问题。

于 2021-08-18T15:33:16.737 回答