自定义 XML 以设置 Fragment Kotlin

Customize XML for setting Fragment Kotlin

我需要自定义布局 root_preferences。 例如:为 SwitchPreferenceCompat 或 EditTextPreference 设置引力。 第一次使用setting fragment,感觉settingFragmentroot_Perfenses都不像普通的fragment,不能给id,不能设置gravity。

我的settingFragment class:

import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import com.example.holyquran.R

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey)
    }
}

我的布局:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<PreferenceCategory app:title="@string/messages_header">

    <EditTextPreference
        app:key="signature"
        app:title="نام صندوق"
        app:useSimpleSummaryProvider="true" />

    <ListPreference
        app:defaultValue="reply"
        app:entries="@array/reply_entries"
        app:entryValues="@array/reply_values"
        app:key="reply"
        app:title="@string/reply_title"
        app:useSimpleSummaryProvider="true" />

</PreferenceCategory>

<PreferenceCategory app:title="عمومی">

    <SwitchPreferenceCompat
        app:key="sync"
        app:title="لرزش" />

    <SwitchPreferenceCompat
        app:dependency="sync"
        app:key="attachment"
        app:summaryOff="@string/attachment_summary_off"
        app:summaryOn="@string/attachment_summary_on"
        app:title="@string/attachment_title" />

</PreferenceCategory>
<PreferenceCategory
    app:icon="@drawable/setting"
    app:title="settings">
    <SeekBarPreference
        android:key="volume_notifications"
        app:defaultValue="50"
        app:showSeekBarValue="true"
        app:title="volume" />
    <SwitchPreferenceCompat
        android:key="notifications"
        app:title="Disable notifications"
        android:summaryOff="Yow will no longer receive notifications"
        android:summaryOn="Yow will receive all notifications"/>

现在我想将 <PreferenceCategory app:title="@string/messages_header"> 的重力设置到中心,我知道这样做并不常见。

还有一件事,我如何在设置片段中使用 sharePerference? 我想添加一个 SeekBarPreference 并且我的用户可以通过移动它来更改应用程序文本的大小 something like this.

最后但并非最不重要的一点: 我的应用程序有振动,设置中有一个切换开关,它是“لرòش”,当它打开振动时,它会被启用,否则它会被禁用,所以如何说开关是否打开,它是否被启用,否则它被禁用?

正如我之前所说,我没有任何设置片段的经验,因为我不应该这样做这是我的工作狂工作

Here is the link of Project 并且设置文件夹在 ui 文件夹中

now I want to set gravity of <PreferenceCategory app:title="@string/messages_header"> to center, I know it is not common to do this.

要做到这一点,您需要创建一个自定义布局,该布局具有 TextView 的标题,id 为 title,并且通常将重力设置为 android:gravity。您还可以使用在首选项 xml

中无法使用的其他 TextView 属性

例如:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@android:id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center" />

要将其应用于 PreferenceCategory 使用 android:layout 属性:

假设您为标题创建的布局是 preference_message_header_title.xml:

<PreferenceCategory
    android:layout="@layout/preference_message_header_title"
    android:title="@string/messages_header">

One more thing how can I use sharePerfenses in the Setting fragment? I want to add a SeekBarPreference and my users can change the size of the application's text by moving it.

and last but not the least: My app has vibration and there is a toggle in setting which is "لرزش", when it is on vibration is enabled otherwise it is diable so how to say if switch is on it is enabled else it is disabled?

这两个请求相当国外,但一般的想法是您使用 android:key 在首选项 XML 中附加一个首选项键,就像您已经对某些首选项所做的那样。

并且在设置片段 class 中调用 findPreference(myPreferenceKey) 以获取与该键关联的首选项,然后调用 setOnPreferenceChangeListener() 以便您可以收听该偏好的用户;然后在侦听器回调中通常通过更改用于跟踪文本大小或振动状态的相应 SharedPreference 值来应用它。