当前位置:  编程技术>移动开发
本页文章导读:
    ▪利用PreferenceActivity简单化首选项的设计        利用PreferenceActivity简化首选项的设计 目前Android手机上的应用,大部分都带有设置功能,即在里面选择一些本应用的自定义设置,便于用户的定制化。 但如果自己写一个Activity来实现,未免过.........
    ▪ NSClassFromString跟NSStringFromClass        NSClassFromString和NSStringFromClass NSStringFormClass 这个不用说,看命名都应该知道吧。   NSClassFromString 将NSString转换成一个Class,如果不存在,返回一个nil。   正常来说, id myObj = [[NSClassFromString(@"MyS.........
    ▪ java抽象类与接口的差异       java抽象类与接口的区别 1、抽象类中可以定义域(成员变量),普通方法,抽象方法 public abstract class TestA { int num = 0;//域(成员变量) public void add(){//普通方法 System.out.println("加法"); } abstra.........

[1]利用PreferenceActivity简单化首选项的设计
    来源: 互联网  发布时间: 2014-02-18
利用PreferenceActivity简化首选项的设计

目前Android手机上的应用,大部分都带有设置功能,即在里面选择一些本应用的自定义设置,便于用户的定制化。
但如果自己写一个Activity来实现,未免过于复杂,而且浪费时间。
Android框架已经为我们提供了一个简单的方式来实现设置页面,即使用PreferenceActivity。
首先,在res/xml下新建一个preference.xml文件,用于定义首选项页面的布局。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="PreferenceCategory 1">
        <CheckBoxPreference
            android:key="CheckBox1"
            android:title="CheckBox"
            android:summaryOn="某功能: 开启"
            android:summaryOff="某功能: 关闭"
            android:defaultValue="true"
        />
    </PreferenceCategory>
    <PreferenceCategory android:title="PreferenceCategory 3">
    <ListPreference
        android:key="ListPreference"
        android:title="ListPreference"
        android:summary="ListPreference测试"
        android:dialogTitle="ListPreference"
        android:entries="@array/entries_list_preference"
        android:entryValues="@array/entriesvalue_list_preference"
    />
    <EditTextPreference
        android:key="EditTextPreference"
        android:title="EditTextPreference"
        android:summary="点击输入"
        android:dialogTitle="输入设置"
    />
    <RingtonePreference
        android:key="RingtonePreference"
        android:title="RingtonePreference"
        android:summary="选择铃声"
    />
    </PreferenceCategory>
</PreferenceScreen>

 
通用属性:
 title:第一张图中的”删除旧信息”、”短信设置”
 key:用于检索该首选项,可以在代码中利用PreferenceManager.getDefaultSharedPreferences(context).getXXX(key,valueNotExist)方法获得该首选项的值。也可以利用PreferenceActivity的getPreference(key)获取该Preference对象,进而设置相应的值。
 defaultValue:默认值,当继承了PreferenceActivity的页面打开时,通常会在onCreate中调用addPreferencesFromResource方法加载首选项。此时,若设置了defaultValue,且之前未设置过该项的值,系统会自动将其设为defaultValue,并写入该应用的首选项文件中。这样,若要实现一键恢复默认值,只要调用addPreferencesFromResource即可。
 summary:第一张图中”达到数量上限时删除旧信息”
 dependency:其余Preference的key(通常为某个CheckBoxPreference的),若设置了该项,当依赖项选中时才可以设置本项。
 persistent:为true时,系统会帮助我们去保存该设置。默认为true。
标签:
PreferenceScreen:设置页面,可嵌套形成二级设置页面,用Title参数设置标题。目前没怎么用过,以后用到再补充。
PreferenceCategory是一个首选项组,通常把一类的设置项用一个PreferenceCategory包起来。如下图中的存储设置所示。


 
CheckBoxPreference就是选择框,只有两种值,true或false,可用Title参数设置标题,用summaryOn和summaryOff参数来设置控件选中和未选中时的提示。
ListPreference:下拉框选择控件,用Title参数设置标题,用Summary参数设置说明,点击后出现下拉框,效果如下图所示。用dialogTitle设置下拉框的标题,下拉框内显示的内容和具体的值需要在res/values/array.xml(可以是自定义的文件,建议单独建一个来存储字符串数组)中设置两个array来表示,在preference.xml中用android:entries指定显示内容的id,android:entryValues指定相应内容的值的id。如下图所示。

 

<string-array name="entries_list_preference">
    <item>始终</item>
    <item>仅在静音时</item>
    <item>一律不</item>
</string-array>
<string-array name="entriesvalue_list_preference">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

 
注:当你的应用要支持多语言时,建议将entryValues对应的数组中的值用数字表示,这样就可以很好的避免翻译时不小心把值也给改了,造成不同语言切换时,丢失之前的设置(比如说在中文对应的文件里,用值_始终表示,而在英文文件中却是value_always。这样当从中文切换到英文时,因为之前在preference文件中存的是值_始终,在英文情况下,系统无法找到值_始终对应的显示内容,就会造成打开该ListPreference时没有选项被选中)。


 
RingtonePreference:铃声选择框,点击后可选择系统铃声。Title参数设置标题,Summary参数设置说明,dialogTitle参数设置铃声选择框的标题。
EditTextPreference:输入框控件,点击后可输入字符串设置。用Title参数设置标题,Summary参数设置说明,dialogTitle参数设置输入框的标题。
以上这几种Preference,当你对其中的值修改后,系统都会自动将其存入data\data\你的包名\shared_prefs\ 下的preferences文件中(具体起名规则目前还没搞懂,不过一看就知道是哪个文件)。然后每次PreferenceActivity启动时,都会通过addPreferencesFromResource来加载。如果没有对应的值,则设为默认值。如果没有默认值,则不设置。
当然,很多情况下,以上提供的几种往往不能满足我们的需求,这就需要对首选项进行自定义。可以自己实现一个继承自Preference的类,也可以使用默认的Preference,然后对它的点击进行一些处理,如弹出自定义对话框,转到自定义的Activity等等。

建好了preference.xml,就可以新建一个类,继承PreferenceActivity。
在onCreate中可以加一些自定义Preference的初始化代码,调用addPreferencesFromResource来加载preference.xml文件。
在onPreferenceTreeClick中判断点击的是哪个Preference。并进行一些自定义的操作,如弹出自定义的窗口。最后记得调用super. onPreferenceTreeClick。

public class MyPreferenceActivity extends PreferenceActivity{
    /** Called when the activity is first created. */
	CheckBoxPreference checkbox;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference);
        checkbox=(CheckBoxPreference) findPreference("CheckBox1");
    }

	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
		if(preference==checkbox)
			//做一些自定义的事
			;
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}
}

 

 

 


    
[2] NSClassFromString跟NSStringFromClass
    来源: 互联网  发布时间: 2014-02-18
NSClassFromString和NSStringFromClass

NSStringFormClass 这个不用说,看命名都应该知道吧。

 

NSClassFromString 将NSString转换成一个Class,如果不存在,返回一个nil。

 

正常来说,

id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];

id myObj = [[MySpecialClass alloc] init];

是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。

因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。

比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:

[[NSClassFromString(@"NSTask") .....]]

而不要直接使用[NSTask ...]这种写法。

NSClassFromString的好处是:

1 弱化连接,因此并不会把没有的Framework也link到程序中。

2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。

 

同样的,还可以通过一个方法名字来得到一个Selector,然后就可以动态的调用这个Selector了,在Obj-c里面,一切都是动态的。


类似的函数如下:
NSClassFromString
NSGetSizeAndAlignment
NSLog
NSLogv
NSSelectorFromString
NSStringFromClass
NSStringFromSelector

 

 


    
[3] java抽象类与接口的差异
    来源: 互联网  发布时间: 2014-02-18
java抽象类与接口的区别
1、抽象类中可以定义域(成员变量),普通方法,抽象方法
public abstract class TestA {
	int num = 0;//域(成员变量)
	public void add(){//普通方法
		System.out.println("加法");
	}
	abstract int get();//抽象方法
}

2、非抽象子类继承抽象父类时,必须要重写抽象父类中的所有抽象方法(普通方法不用)
class TestB extends TestA{
	@Override
	public int get() {//子类重写的方法,可以修改父类的权限(父默认权限->子public)
		return 0;
	}
}

3、抽象子类可以空继承抽象父类,不一定要重写抽象父类的方法
abstract class TestC extends TestA{
	//抽象子类不用重写抽象父类的方法
}

4、抽象类可以实现(implements)多个接口;接口可以继承多个接口
interface infA{
	
}
interface infB{
	
}
interface infC extends infA,infB{//接口继承多个接口
	
}
abstract class TestD implements infA,infB{//抽象类实现多个接口
	
}

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3