Android实战技巧之六:PreferenceActivity使用详解

PreferenceActivity是Android中用来设置应用程序的类,在Android的应用程序中,设置界面通常以PreferenceActivity形式出现。PreferenceActivity的使用方式与普通Activity类似,但是在布局文件和代码中有一些特殊之处,接下来我们将详细介绍PreferenceActivity的使用方式,并给出一个简单的案例说明。

一、布局文件

PreferenceActivity的布局文件使用的是XML来定义。在布局文件中,主要包括Preference层级结构和Preference的属性设置两部分内容。

1、Preference层级结构

Preference的层级结构就好比一个树状结构。在PreferenceActivity的布局文件中,我们可以通过使用PreferenceScreen来定义Preference层级结构。例如,下面的布局文件中,我们定义了一个PreferenceScreen,它包含了两个Preference节点:PreferenceCategory和CheckBoxPreference,其中,PreferenceCategory节点是用来分类显示的。

```

android:key="checkbox_preference"

android:title="Checkbox Preference"

android:defaultValue="false"

android:summary="This preference allows to enable/disable something" />

android:key="checkbox_preference2"

android:title="Checkbox Preference 2"

android:defaultValue="false"

android:summary="This preference allows to enable/disable something" />

```

2、Preference属性设置

Preference节点包含了一些属性,通过这些属性我们可以设置Preference的显示样式、默认值、键值等。下面是常用的一些属性:

(1)android:key:Preference的ID,用于读取和保存Preference的值。

(2)android:title:Preference的标题。

(3)android:summary:Preference的摘要说明。

(4)android:defaultValue:Preference的默认值。

我们可以在Preference节点中根据需要设置他们,例如在上面的布局文件中,我们设置了两个CheckBoxPreference节点,它们的属性设置基本一致,其中,android:key和android:title是必须设置的属性。

二、代码实现

1、自定义PreferenceActivity

与普通的Activity类似,我们需要继承PreferenceActivity类。在onCreate方法中,我们需要使用addPreferencesFromResource方法将上面布局文件中定义的Preference层级结构加载进来。

而且,由于PreferenceActivity默认载入的布局文件为PreferenceScreen,如果我们需要使用自定义的布局文件,需要在onCreate方法中通过setContentView方法加载自定义布局文件。例如:

```

public class SettingsActivity extends PreferenceActivity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.preferences);

}

}

```

2、读取和保存Preference的值

我们可以通过Preference类的getSharedPreferences()方法获取SharedPreferences对象,从而方便地读取和保存Preference的值。其中,getSharedPreferences方法的第一个参数为Preference的名称,如果不设置则使用默认值,这里我们设置为"pref"。

```

SharedPreferences preferences = getSharedPreferences("pref", MODE_PRIVATE);

boolean isChecked = preferences.getBoolean("checkbox_preference", false);

```

而保存Preference的值只需调用SharedPreferences.Editor的putBoolean方法即可。

```

SharedPreferences.Editor editor = preferences.edit();

editor.putBoolean("checkbox_preference", true);

editor.commit();

```

三、案例说明

下面我们来举一个简单的例子:在设置界面中设置一个CheckBoxPreference,当用户打开这个选项时,应用程序会开启自动播放功能。

1、布局文件

我们在res/xml文件夹下新建一个preferences.xml文件,代码如下:

```

android:key="auto_play"

android:title="自动播放"

android:defaultValue="false"

android:summary="勾选后,程序完成启动后自动播放视频" />

```

2、代码实现

(1)新建一个SettingsActivity类,代码如下:

```

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

private CheckBoxPreference mCheckBoxPreference;

private boolean mAutoPlay;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.preferences);

mCheckBoxPreference = (CheckBoxPreference) findPreference("auto_play");

mAutoPlay = mCheckBoxPreference.isChecked();

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

}

@Override

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

if (key.equals("auto_play")) {

mAutoPlay = sharedPreferences.getBoolean(key, false);

}

}

@Override

protected void onDestroy() {

super.onDestroy();

getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

}

}

```

(2)在MainActivity类中,添加跳转到SettingsActivity的代码,并添加一个自动播放的方法,代码如下:

```

public class MainActivity extends AppCompatActivity {

private boolean mAutoPlay;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.btn_settings).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this, SettingsActivity.class);

startActivity(intent);

}

});

}

private void startAutoPlay() {

if (mAutoPlay) {

//开始自动播放

}

}

@Override

protected void onResume() {

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

mAutoPlay = preferences.getBoolean("auto_play", false);

startAutoPlay();

super.onResume();

}

}

```

最后,当我们勾选了自动播放选项后,程序启动后会立即开始自动播放。当我们取消勾选后,程序启动后不会自动播放,需要手动点击播放按钮。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(118) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部