2

我的 MainActivity.java 中有这个:

public class MainActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setupHomeScreen();
    }
    public void setupHomeScreen() {
        File latestPic = getMostRecentSnappiePicture();
        if(latestPic != null){
            //display pic
            LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                layout.setBackground(Drawable.createFromPath(latestPic.getAbsolutePath()));
            }
            else{
                layout.setBackgroundDrawable(Drawable.createFromPath(latestPic.getAbsolutePath()));
            }
            //hide tutorial
            findViewById(R.id.howitworks).setVisibility(View.INVISIBLE);

        }
        else{
            //show tutorial
            findViewById(R.id.howitworks).setVisibility(View.VISIBLE);
            new ShowcaseView.Builder(this)
                .setTarget(new ActionViewTarget(this, ActionViewTarget.Type.HOME))
                .setContentTitle("ShowcaseView")
                .setContentText("This is highlighting the Home button")
                .hideOnTouchOutside()
                .build();
        }
    }
}

如您所见,在 onCreate 中,它调用 setupHomeScreen 并检查文件是否存在。如果它不存在,它会显示一个教程“howitworks”布局图像以及构建一个展示视图。

所以这一切都很好。唯一的问题是在 showcaseView 仍然存在时尝试离开活动,或者有时即使在您退出展示视图并尝试启动新活动后,也会出现此错误:ShowcaseView - width and height must be > 0

正如您在答案中看到的那样,解决方案是在创建原始视图后仅在回调中创建展示视图,如下所示:

someView.post(new Runnable() {
    @Override
    public void run() {
        // my ShowcaseView builder here
    }
});

唯一的事情是,我不知道把它放在哪里,因为我的展示视图应该只在来自 getMostRecentSnappiePicture() 的文件为空时才会显示。那么如何将视图创建回调放在我的逻辑中以首先检查该文件是否为空?

4

1 回答 1

1

看起来您正在突出显示 HOME 按钮而不是“howitworks”视图。换线试试

 .setTarget(new ActionViewTarget(this, ActionViewTarget.Type.HOME))

 .setTarget(new ViewTarget(R.id.howitworks,this));

此外,以下视频可能会有所帮助。这是关于如何在具有 3 个按钮的活动中使用 ShowCaseView 的 20 分钟教程。他正在声明一个 onClickListener,他在其中以编程方式更改 showCaseView 突出显示的 TargetView

https://www.youtube.com/watch?v=3zdeFSBplps

该视频是西班牙语的,但至少您可以按照这些步骤进行操作,因为他是从头开始编写代码的。

于 2015-04-02T09:59:19.503 回答