我正在尝试为Android创建教练标记。
我希望它绝对是全屏,我的应用有ActionBar
。因此,Commons建议的解决方案基本上在setContentView(view);
之后膨胀FrameLayout不起作用,因为FrameLayout
将低于ActionBar
。我希望全屏。
所以,我拍了一下我的屏幕截图,并用photoshop绘制了一些教练标记并创建了一个.png文件。然后我使用以下代码加载此png文件:
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.activity_main_coach_mark);
dialog.setCanceledOnTouchOutside(true);
//for dismissing anywhere you touch
View masterView = dialog.findViewById(R.id.parent);
masterView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
preferences.edit().putBoolean("COACH_MARK_MAIN_SHOWN", true).commit();
}
});
dialog.show();
}
这完全适用于我的手机,但众所周知,我们拥有数千款Android机型。对于另一个模型,这就是它的样子:
我尝试过使用ShowcaseView项目,但显然,它不能与ActionBar按钮一起使用。我需要那个。
任何人都可以帮我吗?
答案 0 :(得分:2)
只需将其添加到您的onCoachMark
方法:
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
答案 1 :(得分:0)
只需简单考虑
第1步:打开您的main_activity布局文件
步骤2:在main_activity布局中,检查“根布局”,如果“根布局”不是以FrameLayout开头,则将其更改为FrameLayout。
第3步:从其他布局转换为FrameLayout可能会导致布局问题,您必须对其进行修复。第4步:创建另一个FrameLayout,它将覆盖现有视图的顶部。
Example:
<FrameLayout ...>
.....
....
<FrameLayout
android:id="@+id/c_mark"
.../>
</FrameLayout>
第5步:根据版图重力放置新的FrameLayout。示例:android:layout_gravity =“ top | right”
第6步:默认情况下隐藏该视图
第7步:现在在您的主要活动中使用此ID并与财产一起玩。只需自定义设计您的c_mark FrameLayout集ID并使用它。让我给你举个例子。
让我给你举个例子。
示例:MainActivity.class
FrameLayout coachMarkLayout = findViewById( R.id.c_mark);
coachMarkLayout.setVisibility( View.VISIBLE );
FrameLayout messageBoxLayout = (FrameLayout) rootFrameLayout.getChildAt( 0 );
LinearLayout linearLayout = (LinearLayout) messageBoxLayout.getChildAt( 1 );
Button skipButton = (Button) linearLayout.getChildAt( 0 );
skipButton.setOnClickListener( v -> {
rootFrameLayout.setVisibility( View.GONE );
} );
Button nextButton = (Button) linearLayout.getChildAt( 1 );
nextButton.setOnClickListener( v -> {
rootFrameLayout.setVisibility( View.GONE );
// you can add second coarch mark here
} );
main_activity.xml
<FrameLayout
android:id="@+id/c_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:visibility="gone">
<FrameLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginBottom="70dp">
<include layout="@layout/layout_message_box"/>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal">
<include layout="@layout/layout_arrow"/>
</FrameLayout>
</FrameLayout>