在Android上创建教练标记

时间:2013-07-05 11:39:16

标签: android

我正在尝试为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机型。对于另一个模型,这就是它的样子:

http://s21.postimg.org/7989378tz/Screenshot_2013_07_05_13_18_03.png

我尝试过使用ShowcaseView项目,但显然,它不能与ActionBar按钮一起使用。我需要那个。

任何人都可以帮我吗?

2 个答案:

答案 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>