Android 原生系统设置修改Preference样式

2.修改DialogPreference的样式(宽高等).

一.SettingsPreferenceFragment是设置的DialogPreference所展示的Fragment

布局修改可以直接使用preference.setDialogLayoutResource 设置

二.修改onDisplayPreferenceDialog函数

1.定义DialogFragment fragment = null;
2.获取参数中传递的preference对象,判断Preference类型,给fragment赋值
 if(preference instanceof ListPreference){
  		 f = CustomListPreferenceDialogFragment.newInstance(preference.getKey());    
 }else if(preference instanceof EditPreference){
 	 f = CustomEditPreferenceDialogFragment.newInstance(preference.getKey());    
 }
3.定义相关类,其中
CustomListPreferenceDialogFragment 父类是ListPreferenceDialogFragmentCompat
CustomEditPreferenceDialogFragment 父类是EditTextPreferenceDialogFragmentCompat
4.在这些类中的内部方法中
 public Dialog onCreateDialog(Bundle savedInstanceState) {
 	 //获取父类的dialog对象
     final Dialog dialog =  super.onCreateDialog(savedInstanceState);
      dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface dg) {
                //获取window 调整宽高,可以做到统一样式
 				}
 	});    
 	return dialog
 }

1.常规修改Preference样式

一、主题中使用

   <item name="preferenceTheme">@style/PreferenceTheme</item>

二、自定义的PreferenceTheme样式

<style name="PreferenceTheme" parent="@style/PreferenceThemeOverlay.SettingsBase">
    <item name="preferenceStyle">@style/istDefaultPreference</item>
</style>
<style name="istDefaultPreference" parent="*@android:Preference.Material">
    <item name="allowDividerAbove">true</item>
    <item name="android:layout">@layout/ist_default_preference</item>
</style>

三、查找PreferenceThemeOverlay.SettingsBase的定义,继承自如下Androidx包中的主题

地址: https://github.com/androidx/androidx/blob/androidx-main/preference/preference/res/values/themes.xml
https://github.com/androidx/androidx/blob/androidx-main/preference/preference/res/values/styles.xml

  <style name="BasePreferenceThemeOverlay">
       <item name="android:scrollbars">vertical</item>
       <item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference.Material</item>
       <item name="dialogPreferenceStyle">@style/Preference.DialogPreference.Material</item>
       <item name="dropdownPreferenceStyle">@style/Preference.DropDown.Material</item>
       <item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference.Material</item>
       <item name="preferenceCategoryStyle">@style/Preference.Category.Material</item>
       <item name="preferenceFragmentCompatStyle">@style/PreferenceFragment.Material</item>
       <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList.Material</item>
       <item name="preferenceFragmentStyle">@style/PreferenceFragment.Material</item>
       <item name="preferenceScreenStyle">@style/Preference.PreferenceScreen.Material</item>
       <item name="preferenceStyle">@style/Preference.Material</item>
       <item name="seekBarPreferenceStyle">@style/Preference.SeekBarPreference.Material</item>
       <item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat.Material</item>
       <item name="switchPreferenceStyle">@style/Preference.SwitchPreference.Material</item>
       <item name="preferenceCategoryTitleTextAppearance">@style/TextAppearance.AppCompat.Body2</item>
</style>

四、再根据item选中的原生style的默认布局配置你想要的布局即可,最后参照步骤二进行设置

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值