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