如何在几个Android应用程序和ICS中创build一个帮助覆盖图?

我想创build像ICS第一次加载时看到的帮助覆盖图,或者像ES File Explorer或Apex Launcher这样的应用程序(还有更多,但现在我想不起来)。 这仅仅是一个视图相对于另一视图的相对布局? 我一直没有find任何代码来做这样的事情。 任何人都知道这是如何做或有任何想法?

ES文件浏览器ES文件浏览器

假设您通常会调用setContentView(R.layout.main) ,但在第一次运行时,您想要使用此覆盖。

步骤1:在Java代码中创build一个FrameLayout ,并将其传递给setContentView()

步骤#2:使用LayoutInflaterR.layout.main膨胀到FrameLayout

第3步:使用LayoutInflater将覆盖图LayoutInflaterFrameLayout

第四步:当用户点击button(或其他)来解除覆盖,调用removeView()removeView()层上移除覆盖。

由于覆盖图是FrameLayout的更新版本,所以它将浮动在R.layout.main的内容之上。

UX教程中的“Coach mark”是“Help overlay”:-)

coach_mark.xml是你的教练标志布局

coach_mark_master_viewcoach_mark.xml中最顶层视图(根)的ID

 public void onCoachMark(){ final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialog.setContentView(R.layout.coach_mark); dialog.setCanceledOnTouchOutside(true); //for dismissing anywhere you touch View masterView = dialog.findViewById(R.id.coach_mark_master_view); masterView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } 

添加coach_mark.xml的样本(到Oded Breiner给出的这个优秀的解决scheme),所以它很容易复制粘贴到快速查看工作示例。

这里的coach_mark.xml示例,将 – > drawable / coach_marks更改为图像:

coach_mark.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="match_parent" android:orientation="vertical" android:id="@+id/coach_mark_master_view"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/coach_marks_image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:src="@drawable/coach_marks" /> </RelativeLayout> </LinearLayout> 

并可以select使用这个主题来删除填充:

 <style name="WalkthroughTheme" parent="Theme.AppCompat"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">false</item> </style> 

你可以很快做到这一点。 例如,您可以添加一个LinearLayout,在其中放置一个与您的帮助信息相对应的alpha图片,以及您想要像覆盖图那样绘制的图片。 在您的xml活动中,您将该布局放置在RelativeLayout中,然后使用Gone可见性对活动进行布局。 当您想绘制帮助信息时,您只需将此可见性设置为可见即可。

我希望,我清楚,如果你有任何问题,我是请回答他们。

看到我的另一个答案如何以编程方式显示当前活动顶部的重叠布局。 Activity的layout.xml不需要知道任何关于覆盖皮肤的信息。 你可以把覆盖半透明,只覆盖屏幕的一部分,一个或多个textview和button… 如何编程覆盖button?

  • 创buildres / layout / paused.xml RelativeLayout模板或使用任何布局顶层
  • 创build一个显示覆盖皮肤的function
  • 关键是获取layout.xml的句柄,使用LayoutInflater类来parsingxml来查看对象,将叠加视图添加到当前的布局结构
  • 我的例子使用一个计时器通过完全从视图结构中删除重叠对象。 这可能是你想要的,以及摆脱它没有痕迹。

我的目标是,主要活动不知道任何覆盖皮肤,覆盖来来去去,许多不同的覆盖,仍然能够使用overlay1.xml文本文件作为模板,内容应编程更新。 我几乎做了什么CommonsWare告诉我们我的post显示实际的程序代码开始。

免责声明:OPs“感谢您的意见,这就是我的想法,我必须赞扬下面的答案”评论并不意味着我的答案,但CommonsWare的答案。 Stackoverflow已经改变了后期sorting。