0

我正在尝试为 Android 创建一个教练标记。

我希望它绝对是全屏的,并且我的应用程序有一个ActionBar. 因此,Commons 建议的解决方案(基本上是在 FrameLayout 之后膨胀)setContentView(view);不起作用,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 按钮。我需要那个。

谁能帮我这个?

4

2 回答 2

2

Simply add this to your onCoachMark method:

dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
于 2014-02-28T16:06:13.680 回答
0

只是简单的想

第 1 步:打开您的 main_activity 布局文件

第二步:在main_activity布局中勾选Root Layout,如果Root Layout不是以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>
于 2019-12-13T08:25:00.523 回答