我正在使用 Xamarin Forms 并尝试将“设置”图标齿轮添加到我的应用程序信息中,这是我尝试过的:
将此添加到应用程序节点内的
AndroidManifest.xml
:
<activity
android:name=".ui.SettingsActivity"
android:label="Settings"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
</intent-filter>
</activity>
在我的根目录中创建了一个名为
SettingsActivity.cs
的文件并添加了此代码,我收到错误:
“当前上下文中不存在名称“AddPreferencesFromResource””):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Preferences;
namespace RegistrationApp.Droid
{
[Activity (Label = "SettingsActivity")]
[Obsolete]
public class SettingsActivity : Activity
{
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
// Create your application here
AddPreferencesFromResource(Resource.Xml.preferences);
}
}
}
我在资源中创建了一个 xml 文件夹,并在新的 xml 文件夹中创建了一个名为
preferences.xml
的文件,并添加了以下代码:
<?xml version="1.0" encoding="UTF-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="General">
<EditTextPreference
android:key="edit_text_preference"
android:title="EditText Preference"
android:summary="This is an EditText preference"
android:dialogTitle="Enter your text" />
<!-- Add more preferences as needed -->
</PreferenceCategory>
</PreferenceScreen>
我收到错误“当前上下文中不存在名称“AddPreferencesFromResource””,因此更改了此内容:
public class SettingsActivity : Activity
到此public class SettingsActivity : PreferenceActivity
并且解决了错误,但应用程序信息中仍然没有设置齿轮...我做错了什么吗?
我的目标是在应用程序信息中设置设置,以便用户能够更改。
按照“在 PreferenceActivity 中使用什么来代替“addPreferencesFromResource”?”,您可能需要 AndroidX 库中的
PreferenceFragmentCompat
,而不是已弃用的 PreferenceActivity#addPreferencesFromResource
方法。
<PackageReference Include="Xamarin.AndroidX.Preference" Version="1.2.1.4" />
您的 SettingsActivity
应扩展
AppCompatActivity
并主持 PreferenceFragmentCompat
。
[Activity(Label = "Settings")]
public class SettingsActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SupportFragmentManager
.BeginTransaction()
.Replace(Android.Resource.Id.Content, new SettingsFragment())
.Commit();
}
}
实现 SettingsFragment
扩展
PreferenceFragmentCompat
并从资源文件加载首选项:
public class SettingsFragment : PreferenceFragmentCompat
{
public override void OnCreatePreferences(Bundle savedInstanceState, string rootKey)
{
SetPreferencesFromResource(Resource.Xml.preferences, rootKey);
}
}
您的 preferences.xml
文件保持不变。确保您的
AndroidManifest.xml
反映了正确的活动名称。如果您的
SettingsActivity
位于特定命名空间内,请确保正确指定:
<activity
android:name=".SettingsActivity"
android:label="Settings"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
</intent-filter>
</activity>