android 引导页的制作

来源:互联网 发布:淘宝上正品金丝楠木店 编辑:程序博客网 时间:2024/04/30 11:38

android 引导页的制作

main.xml中的根元素上添加了id 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:id="@id/my_content_view"    ><TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    /><Button    android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:id="@+id/btn"    android:text="open sub"    /></LinearLayout>

id定义在res/values下的 ids.xml中 
<?xml version="1.0" encoding="utf-8"?><resources><item type="id" name="my_content_view"></item></resources>

BasicActivity代码: 

package com.my.decorview.test;import android.app.Activity;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.FrameLayout;import android.widget.ImageView;public class BasicActivity extends Activity {    private int guideResourceId=0;//引导页图片资源id    @Override    protected void onStart() {        super.onStart();        addGuideImage();//添加引导页    }    /**     * 添加引导图片     */    public void addGuideImage() {        View view = getWindow().getDecorView().findViewById(R.id.my_content_view);//查找通过setContentView上的根布局        if(view==null)return;        if(MyPreferences.activityIsGuided(this, this.getClass().getName())){            //引导过了            return;        }        ViewParent viewParent = view.getParent();        if(viewParent instanceof FrameLayout){            final FrameLayout frameLayout = (FrameLayout)viewParent;            if(guideResourceId!=0){//设置了引导图片                final ImageView guideImage = new ImageView(this);                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);                guideImage.setLayoutParams(params);          guideImage.setScaleType(ScaleType.FIT_XY);                guideImage.setImageResource(guideResourceId);                guideImage.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        frameLayout.removeView(guideImage);                        MyPreferences.setIsGuided(getApplicationContext(), BasicActivity.this.getClass().getName());//设为已引导                    }                });                frameLayout.addView(guideImage);//添加引导图片                            }        }    }        /**子类在onCreate中调用,设置引导图片的资源id     *并在布局xml的根元素上设置android:id="@id/my_content_view"     * @param resId     */    protected void setGuideResId(int resId){        this.guideResourceId=resId;    }}
偏好设置代码:

package com.my.decorview.test;import android.content.Context;public class MyPreferences {    //偏好文件名    public static final String SHAREDPREFERENCES_NAME = "my_pref";    //引导界面KEY    private static final String KEY_GUIDE_ACTIVITY = "guide_activity";        /**     * 判断activity是否引导过     *      * @param context     * @return  是否已经引导过 true引导过了 false未引导     */    public static boolean activityIsGuided(Context context,String className){        if(context==null || className==null||"".equalsIgnoreCase(className))return false;        String[] classNames = context.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_WORLD_READABLE)                 .getString(KEY_GUIDE_ACTIVITY, "").split("\\|");//取得所有类名 如 com.my.MainActivity         for (String string : classNames) {            if(className.equalsIgnoreCase(string)){                return true;            }        }          return false;    }        /**设置该activity被引导过了。 将类名已  |a|b|c这种形式保存为value,因为偏好中只能保存键值对     * @param context     * @param className     */    public static void setIsGuided(Context context,String className){        if(context==null || className==null||"".equalsIgnoreCase(className))return;        String classNames = context.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_WORLD_READABLE)                 .getString(KEY_GUIDE_ACTIVITY, "");        StringBuilder sb = new StringBuilder(classNames).append("|").append(className);//添加值        context.getSharedPreferences(SHAREDPREFERENCES_NAME, Context.MODE_WORLD_READABLE)//保存修改后的值        .edit()        .putString(KEY_GUIDE_ACTIVITY, sb.toString())        .commit();    }}
MainActivity中添加引导页 
package com.my.decorview.test;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends BasicActivity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                Button btn = (Button)findViewById(R.id.btn);        btn.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {                startActivity(new Intent(MainActivity.this, SubActivity.class));            }                    });                                setGuideResId(R.drawable.yindao01);//添加引导页    }}

1. 在BasicActivity的子类中的onCreate中调用 setGuideResId(int resId),设置引导图片资源id

2. 布局xml的根元素上添加android:id="@id/my_content_view" 


原创粉丝点击