我有以下代码用于名为设置的首选项。我想编码如果我点击一个项目让我们说一个列表对话框并选择一个文本大小会发生什么。我希望更改所有活动的文本大小。
的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>
答案 0 :(得分:1)
好的,因此创建设置页面起初可能会有点混乱,尤其是刚开始使用Android开发时。
虽然这不能回答您的确切问题,但它可以让您更好地了解设置如何在Android中运行,因此您可以将其应用于您自己的用例。当然,如果您仍然不确定某些内容,请在评论中告诉我,我会更新我的答案。
看起来您已经完成了这项工作,但无论如何我都会简要解释一下。
此文件确定向用户显示的设置类型。它位于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}})。每种类型的偏好都有不同的属性,但它们都有Preference
和key
。
title
是您的偏好存储的值,因此这是必需的。它们存储在用户的设备上。
接下来,您需要为设置页面创建活动布局(位于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.
}
});
获取值。您可以使用SharedPreferences
,getInt
,getBoolean
等方法
getString
我通常喜欢把这种东西放在像 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
int preferenceValue = prefs.getInt(key, 14);
这样的方法中。
在您的情况下,您需要根据首选项设置字体。您可以将字体存储在getABC
中(即在设置页面中使用它)。然后,在您的布局中,您可以以编程方式设置sp
的字体大小。
我认为老实说,这可能不值得 - 如果您不得不以编程方式设置大量TextView
的字体大小,代码也会变得非常混乱。 Android操作系统已经有一个设置选项,用户可以使用它来增加或减少所有应用程序的字体大小,所以我建议不要这样做。
但是,尝试实施它会帮助您了解有关Android的更多信息,如果您有充分理由拥有该设置选项,那么这也很好。 ;)
编辑:设置选项
正如我所提到的,Android OS可以选择更改字体大小。它们可用于:
设置&gt;显示&gt;字体大小
如果我没记错的话,Android的新版本也可以选择更改显示尺寸,缩放屏幕上的项目大小,而不仅仅是字体。