在这种情况下,我应该将ShowCaseView构建器放在哪里?

时间:2015-03-30 17:26:36

标签: java android showcaseview

我在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()的文件是否为空。那么如何将视图创建回调放入我的逻辑中以检查该文件是否为空?

1 个答案:

答案 0 :(得分:0)

您好像是在突出显示“主页”按钮,而不是“如何使用”工具'视图。尝试切换线

 .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

视频采用西班牙语,但至少您可以按照步骤操作,因为他从头开始编写代码。