我想创建帮助叠加层,就像你第一次加载ICS时看到的那样,或者在ES File Explorer或Apex Launcher等应用程序中加载(有更多,但我现在想不到它们)。这只是一个相对布局,一个视图位于另一个视图的顶部吗?我无法找到任何用于执行此类操作的示例代码。任何人都知道这是如何完成或有任何想法?
答案 0 :(得分:83)
我们假设您通常会拨打setContentView(R.layout.main)
,但在首次运行时,您希望使用此叠加层。
步骤1:在Java代码中创建FrameLayout
并将其传递给setContentView()
。
步骤2:使用LayoutInflater
将R.layout.main
充气到FrameLayout
。
步骤3:使用LayoutInflater
将叠加层扩展为FrameLayout
。
步骤4:当用户点按按钮(或其他)以关闭叠加层时,请致电removeView()
以从FrameLayout
移除叠加层。
由于叠加层是FrameLayout
的后续子层,因此它会浮动在R.layout.main
的内容之上。
答案 1 :(得分:80)
coach_mark.xml 是您的教练标记布局
coach_mark_master_view 是 coach_mark.xml
中最顶层视图(根)的IDpublic 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提供的这个优秀的解决方案),因此很容易复制和复制ppl。粘贴以快速查看工作示例。
这里的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>
并可选择使用此主题删除填充:
<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>
答案 2 :(得分:4)
你可以很快地做到这一点。例如,您添加了一个LinearLayout,您可以在其中放置与您的帮助信息相对应的alpha图片以及您想要像叠加层一样绘制的内容。在您的xml活动中,在具有Gone可见性的活动布局之后,将此布局放在RelativeLayout中。当您想要绘制帮助信息时,您只需要将此可见性设置为可见。
我希望,我很清楚,如果您有任何疑问,我很乐意回答。
答案 3 :(得分:1)
请参阅我的另一个答案,如何以编程方式在当前活动之上显示叠加层布局。 Activity的layout.xml不需要了解覆盖皮肤的任何信息。您可以将叠加半透明,仅覆盖屏幕的一部分,一个或多个textview和按钮... How to overlay a button programmically?
我的目标是主要活动不知道任何覆盖皮肤,覆盖来来去去,许多不同的叠加,仍然能够使用overlay1.xml文本文件作为模板,内容应该以编程方式更新。我几乎完成了CommonsWare告诉我们的内容,我的帖子显示了实际开始的程序代码。
免责声明:OP“感谢您的意见。这就是我想象的完成情况。我必须对下面的答案给予肯定”评论并不代表我的答案,而是CommonsWare的回答。 Stackoverflow改变了后期订单。