增加程序引导页面
小组成员: 第十五组 最终完成日期:15年12月1日
一、简介
本模块介绍如何为天气预报添加引导界面,并将其设置为只有第一次启动时可见。
二、基础知识
知识点1:
创建ViewPager布局
知识点2:
为ViewPager增加页面改变的监听事件
知识点3:
为ViewPager增加控件和监听事件
知识点4:
使用SharedPreference记录启动次数
三、主要思路及步骤
3.1 主要思路
创建一个activity guide并为其设置4个布局文件guide.xml和page1.xml, page2.xml, page3.xml.在gudied.xml中将三个page依次展示。在page3.xml中添加button,用intent跳转到mainActivity;为了实现下方小圆点动态变化,需要监听页面改变事件修改imageView;最后,设置sharedPreference以记录是否是首次使用。
3.2 实践步骤
(1)添加布局文件: 创建新的活动和布局文件guide,在guide.java中将guide.xml设为可见: setContentView(R.layout.guide); 创建三个page文件page1.xml,page2.xml,page3.xml;在这三个文件中可以任意添加组件。
在guide.java中增加显示三个page文件的方法initView():
private void initViews(){
LayoutInflater inflater = LayoutInflater.from(this);
views =new ArrayList<View>();
views.add(inflater.inflate(R.layout.page1,null));
views.add(inflater.inflate(R.layout.page2,null));
views.add(inflater.inflate(R.layout.page3,null));
vpAdapter = new ViewPagerAdapter(views,this);
vp = (ViewPager)findViewById(R.id.viewpager_guide);
vp.setAdapter(vpAdapter);
vp.setOnPageChangeListener(this);
}
然后在onCreate()方法中调用initView(),这样就可以实现在guide.xml中显示三个page。 最后,在AndroidManifest中将guide.java设置为主activity:
<activity android:name=".Guide">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此时,就可以在打开应用时显示pageView:
(2)为布局文件添加组件 A、添加切换到主界面的Button 在page3.xml中添加一个button按钮:
android:id="@+id/guide_btn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="开始体验"/>
为该按钮设置监听事件:
guide_btn = (Button)views.get(2).findViewById(R.id.guide_btn);
其中,由于该button设置在第三个视图中,所以实例化该button时需要先指定到对应的视图。
guide_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Guide.this, MainActivity.class);
startActivity(intent);
finish();
}
});
B、添加图片和textView等组件以增加美观性: 该部分与在普通activity的布局文件中添加组件的方式相同,只是需要注意指定该组件所在的视图。 (3)动态变化小圆点 首先,实现initDots()方法:
void initDots(){
dots = new ImageView[views.size()];
for(int i=0;i<views.size();i++){
dots[i]=(ImageView)findViewById(ids[i]);
}
}
在onCreate()方法中调用该方法; 重写onPageSelected()方法以实现当选中某个页面时该页面对应的小圆点变为实心:
public void onPageSelected(int position) {
for(int a=0;a<ids.length;a++){
if(a ==position){
dots[a].setImageResource(R.drawable.page_indicator_focused);
}else{
dots[a].setImageResource(R.drawable.page_indicator_unfocused);
}
}
}
完成后就可以实现小圆点滑动效果:
(4)记录首次启动 想要实现只在第一次打开app时才启动guide,需要对应用的启动进行记录,在这里我们选用sharedPreference来进行记录。关于sharedPreference的介绍和使用在前面的章节已经介绍过,在这里不再重复。 在Guide活动的onCreate方法中,实例化一个sharedPreference判断其isFirst是否为true,若为true,则继续执行下面的代码,若为false,则直接用intent跳转到mainActivity:
super.onCreate(savedInstanceState);
SharedPreferences first = (SharedPreferences)getSharedPreferences("first",MODE_PRIVATE);
Boolean isFirst = first.getBoolean("isFirst", true);
if(isFirst){
setContentView(R.layout.guide);
initViews();
initDots();
guide_btn = (Button)views.get(2).findViewById(R.id.guide_btn);
guide_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = first.edit();
editor.putBolean("isFirst",false);
editor.commit();
Intent intent = new Intent(Guide.this, MainActivity.class);
startActivity(intent);
finish();
}
});
}
else{
Intent intent = new Intent(Guide.this, MainActivity.class);
startActivity(intent);
finish();
}
四、常见问题及注意事项
A、 完成guide活动后,要在androidManifest中将默认活动改为guide,否则无法显示。 B、 在向pageview中添加组建组件时,要注意指定组建所在的view,否则会报空指针异常
guide_btn = (Button)views.get(2)findViewById(R.id.guide_btn);
假设去掉这句中的views.get(2),再次运行的时候会无法运行: 还要注意的是,视图的计数从0开始,因而在调用第三个page中添加的button时,指定的位置为2。 C、 在模拟器中运行时,由于设置了第一次运行才显示guide界面,如果修改guide之后想要查看显示效果,需要先在模拟器中将该应用程序卸载,这样才能够看到引导界面。也可以使用Android Device Monitor找到使用的SharedPreferences位置(文件位于“/data/data/你的应用程序包/shared_prefs”目录下),将该文件删除即可。 *