如何在 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://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。