eBook 功能模块二之设置模块

简介:

模块界面如下:

字体类型选项:

由于此模块只为演示在Android 的应用开发中设置的功能,故此模块只是简单演示了阅读器的字体改变等操作,并未加入如更换壁纸、设置主题等操作,读者在看完本篇相信自己动手也可以把模块加入进去。并使用Android 提供的设置功能为您的应用程序加入方便易用的设置。

本功能涉及知识如下:

  • onActivityResult 回传值的使用
  • 设置界面的xml布局的使用

首先,让我们先来看看我们是怎么进入设置界面的

由上图,我们通过点击菜单的设置按钮,并跳转到设置界面,这里面我们要特别注意的是。由于我们做设置功能时,是希望用户在进入一番设置后回来的时候能够根据设置的内容做出相应的状态变化,这一步骤就要有一个顺序如:main->set->main 的关系,Android Activity 里面有一个相应的类就是做这种回调加载的工作的,具体我们可以右键--》source--》ovveride/Implement Methods 找到onActivityResult方法,点击生成方法体,如下:

不过一般我没有这样做,,比较浪费时间直接在code 空间输入on开头即可,如下:

通过上面的操作,生成完方法体之后,我们先放着,在code 空间上方声明一个请求代码,以供到时候回调做认证,这里我们声明一个常量做为标识其为请求设置的标记

 

private  final  int  REQUEST_CODE_SET  =   0x112 ; //  用于设置请求代码

 

 

点击菜单后的处理:

 

@Override
    
public  boolean onOptionsItemSelected(MenuItem item) {
        
//  TODO Auto-generated method stub
         int  itemId  =  item.getItemId();
        
switch  (itemId) {
        
case  SET:
            Intent intent 
=   new  Intent(context, Set. class );
            startActivityForResult(intent, REQUEST_CODE_SET);
            
return   true ;

 

 

Tip:这里必须使用 startActivityForResult 方法,否则回调时 onActivityResult 回调函数将无法获得请求。

设置界面的布局:

在res 目录下新建一个目录为xml 的文件下,在xml文件下新建一个名为:preference.xml 的xml文件,配置如下代码:

 

<? xml version="1.0" encoding="UTF-8" ?>
< PreferenceScreen  xmlns:android ="http://schemas.android.com/apk/res/android" >

    
< PreferenceCategory  android:title ="@string/str_font" >
        
< ListPreference  android:key ="font_style"  android:title ="@string/str_fontstyle"
            android:dialogTitle
="@string/str_fontstyle"  android:entryValues ="@array/fontstylevalue"
            android:dialogIcon
="@drawable/chapter"  android:entries ="@array/fontstyle" ></ ListPreference >
        
< com.terry.util.ColorPickerPreference
            
android:key ="colorpiker"  android:persistent ="true"  android:summary ="@string/app_name"
            android:dialogTitle
="@string/str_fontscolor"  android:title ="@string/str_fontscolor"   />
        
< PreferenceScreen  android:title ="@string/str_fonttype" >
            
< Preference  android:title ="@string/app_name"  android:key ="app_name" ></ Preference >
            
< CheckBoxPreference  android:key ="fonti"
                android:title
="@string/str_fonti" ></ CheckBoxPreference >
            
< CheckBoxPreference  android:key ="fontb"
                android:title
="@string/str_fontb" ></ CheckBoxPreference >
            
< CheckBoxPreference  android:key ="fontu"
                android:title
="@string/str_fontu" ></ CheckBoxPreference >
        
</ PreferenceScreen >
        
< PreferenceScreen  android:title ="@string/blog" >

            
< intent  android:action ="android.intent.action.VIEW"
                android:data
="http://www.cnblogs.com/terryblog"   />
        
</ PreferenceScreen >

    
</ PreferenceCategory >

</ PreferenceScreen >

 

其中,com.terry.util.ColorPickerPreference 元素为自定义preference 元素,具体可以参考上一篇颜色选择器的代码。preference 界面和属性网上都有相关的解答,这里不做过多的解释,下面是设置后的结构图:

 

Tip:设置界面可以通过结构图可视化配置,如上图。

设置界面的完整代码如下:

 

package com.terry.eBook;

import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.text.Html;
import android.view.KeyEvent;
import cn.itcreator.android.reader.paramter.CR;

public   class  Set extends PreferenceActivity {

    Preference fonti;
    Preference fontb;
    Preference fontu;
    Preference app_name;
    boolean get1;
    boolean get2;
    boolean get3;

    @Override
    
protected   void  onCreate(Bundle savedInstanceState) {
        
//  TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        fonti 
=  findPreference( " fonti " );
        fontb 
=  findPreference( " fontb " );
        fontu 
=  findPreference( " fontu " );
        app_name 
=  findPreference( " app_name " );

        get1 
=  fonti.getSharedPreferences().getBoolean( " fonti " false );
        get2 
=  fontb.getSharedPreferences().getBoolean( " fontb " false );
        get3 
=  fontu.getSharedPreferences().getBoolean( " fontu " false );
        final Preference colorpicker 
=  findPreference( " colorpiker " );
        final Preference fontstyle 
=  findPreference( " font_style " );

        setTextType(app_name);
        OnPreferenceChangeListener onpre 
=   new  OnPreferenceChangeListener() {

            @Override
            
public  boolean onPreferenceChange(Preference preference,
                    Object newValue) {
                
//  TODO Auto-generated method stub

                
if  (preference  ==  colorpicker) {
                    CR.textColor 
=  String.valueOf(newValue);
                }
                
if  (preference  ==  fontstyle) {
                    CR.textSize 
=  Integer.parseInt(newValue.toString());
                }
                
return   true ;
            }
        };
        fontstyle.setOnPreferenceChangeListener(onpre);
        colorpicker.setOnPreferenceChangeListener(onpre);
    }

    @Override
    
public  boolean onKeyDown( int  keyCode, KeyEvent  event ) {
        
//  TODO Auto-generated method stub
         if  (keyCode  ==  KeyEvent.KEYCODE_BACK) {
            CR.BOOKI 
=  fonti.getSharedPreferences().getBoolean( " fonti " false );
            CR.BOOKB 
=  fontb.getSharedPreferences().getBoolean( " fontb " false );
            CR.BOOKU 
=  fontu.getSharedPreferences().getBoolean( " fontu " false );
            Intent intent 
=   new  Intent(Set. this , eBookActivity. class );
            setResult(RESULT_OK, intent);
            finish();
            
return   false ;
        }

        
return  super.onKeyDown(keyCode,  event );
    }

    @Override
    
public  boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
            Preference preference) {
        
//  TODO Auto-generated method stub
        String key  =  preference.getKey();
        
if  ( " fonti " .equals(key)  ||   " fontb " .equals(key)  ||   " fontu " .equals(key)) {
            setTextType(app_name);
        }
        
return  super.onPreferenceTreeClick(preferenceScreen, preference);
    }

    
public   void  setTextType(Preference pre) {

        get1 
=  fonti.getSharedPreferences().getBoolean( " fonti " false );
        get2 
=  fontb.getSharedPreferences().getBoolean( " fontb " false );
        get3 
=  fontu.getSharedPreferences().getBoolean( " fontu " false );
        
if  (get1  ==   true   &&  get2  ==   false   &&  get3  ==   false ) {
            pre.setTitle(Html.fromHtml(
" <i> "
                    
+  getResources().getString(R. string .app_name)  +   " </i> " ));
        }
        
if  (get1  ==   false   &&  get2  ==   false   &&  get3  ==   false ) {
            pre.setTitle(Html.fromHtml(getResources().getString(
                    R.
string .app_name)));
        }
        
if  (get1  ==   true   &&  get2  ==   true   &&  get3  ==   false ) {
            pre
                    .setTitle(Html.fromHtml(
" <i><b> "
                            
+  getResources().getString(R. string .app_name)
                            
+   " </b></i> " ));
        }
        
if  (get1  ==   true   &&  get2  ==   true   &&  get3  ==   true ) {
            pre.setTitle(Html.fromHtml(
" <i><b><u> "
                    
+  getResources().getString(R. string .app_name)
                    
+   " </u></b></i> " ));
        }
        
if  (get1  ==   true   &&  get2  ==   false   &&  get3  ==   true ) {
            pre
                    .setTitle(Html.fromHtml(
" <i><u> "
                            
+  getResources().getString(R. string .app_name)
                            
+   " </u></i> " ));
        }
        
if  (get1  ==   false   &&  get2  ==   true   &&  get3  ==   false ) {
            pre.setTitle(Html.fromHtml(
" <b> "
                    
+  getResources().getString(R. string .app_name)  +   " </b> " ));
        }
        
if  (get1  ==   false   &&  get2  ==   true   &&  get3  ==   true ) {
            pre
                    .setTitle(Html.fromHtml(
" <b><u> "
                            
+  getResources().getString(R. string .app_name)
                            
+   " </u></b> " ));
        }
        
if  (get1  ==   false   &&  get2  ==   false   &&  get3  ==   true ) {
            pre.setTitle(Html.fromHtml(
" <u> "
                    
+  getResources().getString(R. string .app_name)  +   " <u> " ));
        }

    }
}

 

 

Tip:如上代码,用户在点击按键返回时通过外部声明的一个静态类,然后调用setResult(RESULT_OK, intent)方法,将结果返回出去。CR文件如下:

 

package paramter;

public   class  CR {
    
/* * 中文的字体宽度  */
    
public   static   int  ChineseFontWidth  =   16 ;
    
/* * 小写英文的字体宽度  */
    
public   static   int  upperAsciiWidth  =   8 ;
    
/* * 大写英文的字体宽度  */
    
public   static   int  lowerAsciiWidth  =   8 ;
    
/* * 行高  */
    
public   static   int  fontHeight  =   16 ;
    
/* * 行距  */
    
public   static   int  lineSpace  =   0 ;

    
/* * 将要设置的文字颜色  */
    
public   static  String textColor  =   "" ;

    
/* * 将要设置的文字大小  */
    
public   static   int  textSize  =   18 ;
    
/* * 书签位置 * */
    
public   static  String BOOKMARKOFFSET;
    
/* * 书签百分比  */
    
public   static  String BOOKMARKPERCENT;

    
//  下划线
     public   static  boolean BOOKU;

    
//  粗体
     public   static  boolean BOOKB;

    
//  斜体
     public   static  boolean BOOKI;

}

 

回到阅读界面,触发onActivityResult函数:

 

if  (requestCode  ==  REQUEST_CODE_SET  &&  resultCode  ==  RESULT_OK) 
{
    
// 改变字体的操作调用CR的常量改变当前的字体
}

 

 

到此设置功能结束。





 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/394791,如需转载请自行联系原作者




相关文章
|
1月前
|
Python
理解模块功能
理解模块功能
24 8
|
12月前
|
JSON JavaScript 数据格式
|
Java 数据库
项目的模块以及每一个模块的作用
项目的模块以及每一个模块的作用
项目的模块以及每一个模块的作用
|
数据采集 JavaScript 容灾
配置模块设计
配置模块设计
166 0
配置模块设计
|
开发者 Python
自定义模块的使用|学习笔记
快速学习自定义模块的使用
105 0
|
缓存 C语言 Python
|
Java 数据库 开发者
用户模块之注册功能流程分析|学习笔记
快速学习 用户模块之注册功能流程分析
122 0
|
SQL Java 数据库
用户模块之注册功能完成|学习笔记
快速学习 用户模块之注册功能完成
|
数据安全/隐私保护
如何设计一个完美的权限管理模块?
我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。
如何设计一个完美的权限管理模块?