设置preference控件一栏中应用图标以及应用名称版本号都在最左边,右边一个打开的开关完整实现代码
时间: 2024-02-06 10:10:58 浏览: 81
好的,以下是一个完整的实现代码,供参考:
首先,在你的xml布局文件中添加Preference控件,例如:
```xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="应用设置">
<Preference
android:key="app_info"
android:title="应用信息"
android:icon="@drawable/ic_launcher"
android:summary="版本号: 1.0.0" />
<SwitchPreference
android:key="notification"
android:title="开启通知"
android:summary="接收最新动态通知"
android:defaultValue="true" />
</PreferenceCategory>
</PreferenceScreen>
```
其中,我们在Preference标签中添加了`android:icon`属性来设置应用图标,`android:title`属性来设置应用名称和版本号。
接下来,在你的Activity或Fragment中,需要对Preference控件进行初始化和事件监听。例如:
```java
public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
private Preference appInfoPreference;
private SwitchPreference notificationPreference;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
appInfoPreference = findPreference("app_info");
notificationPreference = findPreference("notification");
updateAppInfoSummary();
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("notification")) {
boolean enabled = sharedPreferences.getBoolean(key, true);
if (enabled) {
// TODO: enable notification
} else {
// TODO: disable notification
}
}
}
private void updateAppInfoSummary() {
try {
PackageInfo packageInfo = requireActivity().getPackageManager().getPackageInfo(requireActivity().getPackageName(), 0);
appInfoPreference.setSummary("版本号: " + packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
```
在onCreatePreferences()方法中,我们通过findPreference()方法获取了app_info和notification的Preference控件,并调用了updateAppInfoSummary()方法来更新app_info的summary。
在onResume()方法中,我们向SharedPreferences注册了一个OnSharedPreferenceChangeListener,以便在用户更改设置时能够相应地更新UI。在onPause()方法中,我们注销了这个监听器。
最后,在onSharedPreferenceChanged()方法中,我们可以根据用户的选择来执行相应的操作,例如启用或禁用通知等。
这样,我们就完成了一个设置preference控件一栏中应用图标以及应用名称版本号都在最左边,右边一个打开的开关的实现。
阅读全文