如何使用偏好片段

时间:2017-04-14 13:25:28

标签: android

我有以下代码用于名为设置的首选项。我想编码如果我点击一个项目让我们说一个列表对话框并选择一个文本大小会发生什么。我希望更改所有活动的文本大小。

的settings.xml

    <PreferenceScreen
    android:title="SETTINGS"
    android:summary="Setrings for Text        
     Size and background colour">

    <intent
    android:targetPackage="com.ecb" 


         android:targetClass=
        "com.ecb.hymbook.Hym1"/>


    </PreferenceScreen>


    <CheckBoxPreference
    android:key="checkbox_preference"
    android:title="@string/       
    title_checkbox_preference"
    android:summary="@string/   
    summary_checkbox_preference" />

   </PreferenceCategory>

   <PreferenceCategory
    android:title="@string/     
    dialog_based_preferences">


     <ListPreference
    android:key="list_preference"
    android:title="@string/    
    title_list_preference"
    android:summary="@string/  

   summary_list_preference"
    android:entries="@array/  

     entries_list_preference"
    android:entryValues="@array/ 
    entryvalues_list_preference"
    android:dialogTitle="@string/
   dialog_title_list_preference" />

    <ListPreference
    android:key="list_preference2"
    android:title="@string/ 
    title_list_preference2"
    android:summary="@string/ 
    summary_list_preference2"
    android:entries="@array/
    entries_list_preference2"
    android:entryValues="@array/
    entryvalues_list_preference2"
    android:dialogTitle="@string/
    dialog_title_list_preference2" />

     </PreferenceCategory>

     <PreferenceCategory
      android:title="@string/   
      launch_preferences">

    <!-- This PreferenceScreen tag    
    serves as a screen break (similar to 
    page break
    in word processing). Like for other  
    preference types, we assign a key
    here so it is able to save and restore    
    its instance state. -->


    <PreferenceScreen
    android:title="@string/   
     title_intent_preference"
    android:summary="@string/
    summary_intent_preference">

    <intent 

              android:action=
    "android.intent.action.
   VIEW"
        android:data="https:// 
     chat.whatsapp.com/
    0gWQdb5idAs0fmJ0eeRaLS"/>
    </PreferenceScreen>

    </PreferenceCategory>



     </PreferenceScreen>



      Settings Java


        public class Settings
        extends Activity {

        @Override
         protected void onCreate(Bundle     
         savedInstanceState) {
         super.onCreate
          (savedInstanceState);

       // Display the fragment as the main    
          content.
           getFragmentManager().
           beginTransaction(  )
          .replace(android.R.id.content, new     
           PrefsFragment()).commit();




        }

        public class PrefsFragment      
         extends     
         PreferenceFragment {

        @Override
         public void onCreate(Bundle    
          savedInstanceState) {
          super.onCreate
         (savedInstanceState);

        // Load the preferences from an      
        XML resource
        addPreferencesFromResource
       (R.xml.settings);
       }










    }
    }



          array.xml





       <resources>
      <string-array    
      name="entries_list_preference">
      <item>DEFAULT</item>
      <item>SMALL 1</item>
       <item>SMALL 2</item>
       <item>MEDIUM 1</item>
        <item>MEDIUM 2</item>  
       <item>LARGE 1</item>
       <item>LARGE 2</item>
       <item>EXTRA LARGE 1</item>
      <item>EXTRA LARGE 2</item>
       <item>EXTREMELY LARGE</item>

       </string-array>

     <string-array name="entryvalues
      _list_preference">
    <item>DEFAULT</item>
    <item>SMALL1</item>
    <item>SMALL2</item>
    <item>MEDIUM1</item>
    <item>MEDIUM2</item>  
    <item>LARGE1</item>
    <item>LARGE2</item>
    <item>EXTRALARGE1</item>
    <item>EXTRALARGE2</item>
    <item>EXTREMELYLARGE</item> 
     </string-array>

     <string-array       
     name="entries_list_preference2">
    <item>blue</item>
    <item>brown</item>
    <item>gray</item>
    <item>violet</item>


    </string-array>

     <string-array name="entryvalues_
    list_preference2">
    <item>#ff000099</item>
    <item># 5F1E02 </item>
    <item># 333333 </item>
    <item># 421C52 </item>
    </string-array>

    </resources>

1 个答案:

答案 0 :(得分:1)

好的,因此创建设置页面起初可能会有点混乱,尤其是刚开始使用Android开发时。

虽然这不能回答您的确切问题,但它可以让您更好地了解设置如何在Android中运行,因此您可以将其应用于您自己的用例。当然,如果您仍然不确定某些内容,请在评论中告诉我,我会更新我的答案。

创建首选项或设置xml文件

看起来您已经完成了这项工作,但无论如何我都会简要解释一下。

此文件确定向用户显示的设置类型。它位于res/xml目录中。我看起来有点像这样:

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

     <PreferenceCategory
         android:title="@string/prefCategory_general">

         <CheckBoxPreference
             android:key="pref_example_checkbox"
             android:title="@string/pref_exampleCheckbox_title"
             android:summaryOn="@string/pref_exampleCheckbox_summaryOn"
             android:summaryOff="@string/pref_exampleCheckbox_summaryOff"
             android:defaultValue="false" />
     </PreferenceCategory>

     <PreferenceCategory
         android:title="@string/prefCategory_notifications">

         <SwitchPreference
             android:key="pref_enable_notifications"
             android:title="@string/pref_notificationToggle"
             android:defaultValue="true" />

         <EditTextPreference
             android:key="pref_notification_time"
             android:title="@string/pref_notificationTime"
             android:summary="@string/pref_notificationTime_summary"
             android:inputType="number"
             android:dialogMessage="@string/pref_notificationTime_dialog"
             android:defaultValue="5" />
    </PreferenceCategory>

    <PreferenceCategory
        android:title="@string/prefCategory_about">

        <Preference
            android:key="pref_about_licenses"
            android:title="@string/pref_licenses" />

        <Preference
            android:key="pref_about_app_version"
            android:title="@string/pref_appVersion" />
    </PreferenceCategory>

</PreferenceScreen>

有许多不同类型的首选项 - 您可以看到我有复选框(CheckBoxPreference),开关(SwitchPreference),以及普通/标准首选项(基本上是正常的列表项 - { {1}})。每种类型的偏好都有不同的属性,但它们都有Preferencekey

title是您的偏好存储的值,因此这是必需的。它们存储在用户的设备上。

创建设置 layout xml

接下来,您需要为设置页面创建活动布局(位于key

它可以像您一样简单或复杂,但它需要res/layout。 Android会将您在先前XML文件中定义的设置列表插入此FrameLayout。这是一个例子:

FrameLayout

您的<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" style="@style/Widget.MyApp.Toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 应该有一个ID,以便我们以后可以参考。

添加活动代码

FrameLayout

检测偏好设置更改

您可以使用public class SettingsActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); // your layout XML here // Insert the settings fragment in the FrameLayout we added earlier getSupportFragmentManager().beginTransaction() .replace(R.id.content, new SettingsFragment()) .commit(); } public class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); // the settings XML here (not the layout) } } }

检测用户何时更改了偏好设置
OnPreferenceChangeListener

这允许您执行其他操作 - 但请注意,Android会负责更改您的首选项(因此首选项键的值会自动更改)。

阅读偏好

要阅读偏好设置,您需要从Preference preference = findPreference(key); preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // Do something extra when the preference has changed. } }); 获取值。您可以使用SharedPreferencesgetIntgetBoolean等方法

getString

我通常喜欢把这种东西放在像 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); int preferenceValue = prefs.getInt(key, 14); 这样的方法中。

您的用例

在您的情况下,您需要根据首选项设置字体。您可以将字体存储在getABC中(即在设置页面中使用它)。然后,在您的布局中,您可以以编程方式设置sp的字体大小。

我认为老实说,这可能不值得 - 如果您不得不以编程方式设置大量TextView的字体大小,代码也会变得非常混乱。 Android操作系统已经有一个设置选项,用户可以使用它来增加或减少所有应用程序的字体大小,所以我建议不要这样做。

但是,尝试实施它会帮助您了解有关Android的更多信息,如果您有充分理由拥有该设置选项,那么这也很好。 ;)

编辑:设置选项

正如我所提到的,Android OS可以选择更改字体大小。它们可用于:

  

设置&gt;显示&gt;字体大小

如果我没记错的话,Android的新版本也可以选择更改显示尺寸,缩放屏幕上的项目大小,而不仅仅是字体。