如何在 xamarin android 应用程序中创建显示在该应用程序 Android Settings/Apps/App 设置中的应用程序设置?

How to create an app setting in an xamarin android app that shows in the Android Settings/Apps/App Setting for that app?

我已经查看了这里的文档: https://developer.android.com/guide/topics/ui/settings

以上页面讨论了在您的应用程序中创建设置 UI,并显示了使用 XML 文件(顺便说一句,它没有告诉您放在哪里)。

我不想在我的应用程序中添加设置 UI。当您从该列表中选择我的应用程序时,我只想在应用程序下的 android 设置应用程序中显示一个设置,它已经有一个名为 "App settings" 的部分。我想在这里为我的应用程序添加一个设置,并能够从我的应用程序中读取它。 (也能从我的应用程序写入它是一个奖励。)

是否可以这样做,如果可以,谁能给我举个例子。

感谢您的宝贵时间。

如果你想实现它,你应该首先添加以下 nuget 包。

Xamarin.Android.Support.v7.Preference

然后创建xml文件夹,添加preferences.xml.

这里是代码添加 preferences.xml 用于测试。

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

  <SwitchPreferenceCompat
      app:key="notifications"
      app:title="Enable message notifications"/>

  <Preference
      app:key="feedback"
      app:title="Send feedback"
      app:summary="Report technical issues or suggest new features"/>

</PreferenceScreen> 

然后创建一个名为MySettingsFragment.cs的class,PreferenceFragmentCompat来自Android.Support.V7.Preferences,通过SetPreferencesFromResource方法填充preferences.xml

using Android.OS;
using Android.Runtime;
using Android.Support.V7.Preferences;
using Android.Views;
using Android.Widget;

namespace App32
{
    public class MySettingsFragment : PreferenceFragmentCompat
    {
        public override void OnCreatePreferences(Bundle savedInstanceState, string rootKey)
        {
            SetPreferencesFromResource(Resource.Xml.preferences, rootKey);

        }
    }
}

最后,我们可以在你的layout.xml中加一个FrameLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:id="@+id/settings_container"/>
</RelativeLayout>

在activity中使用MySettingsFragment喜欢Fragment的交易。

    public class MainActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);
            SupportFragmentManager.BeginTransaction().Replace(Resource.Id.settings_container,new MySettingsFragment()).Commit();

        }
}
}

这里是运行截图。

我最终选择了 Xamarin.Essentials:首选项,因为这是我能找到的最接近我想要的东西,而且我不必在应用程序中进行设置 UI。

https://docs.microsoft.com/en-us/xamarin/essentials/preferences?context=xamarin%2Fandroid&tabs=android