如何在几个Android应用程序和ICS中创build一个帮助覆盖图?
我想创build像ICS第一次加载时看到的帮助覆盖图,或者像ES File Explorer或Apex Launcher这样的应用程序(还有更多,但现在我想不起来)。 这仅仅是一个视图相对于另一视图的相对布局? 我一直没有find任何代码来做这样的事情。 任何人都知道这是如何做或有任何想法?
假设您通常会调用setContentView(R.layout.main)
,但在第一次运行时,您想要使用此覆盖。
步骤1:在Java代码中创build一个FrameLayout
,并将其传递给setContentView()
。
步骤#2:使用LayoutInflater
将R.layout.main
膨胀到FrameLayout
。
第3步:使用LayoutInflater
将覆盖图LayoutInflater
到FrameLayout
。
第四步:当用户点击button(或其他)来解除覆盖,调用removeView()
从removeView()
层上移除覆盖。
由于覆盖图是FrameLayout
的更新版本,所以它将浮动在R.layout.main
的内容之上。
UX教程中的“Coach mark”是“Help overlay”:-)
coach_mark.xml是你的教练标志布局
coach_mark_master_view是coach_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。