我正在使用Xamarin Forms,并试图添加一个设置图标齿轮到我的应用程序信息,这是我try 过的:

在应用程序 node 内将此添加到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>

我收到错误"The name 'AddPreferencesFromResource'doesnexist in current context",所以更改了如下:

public class SettingsActivity : Activity到这个public class SettingsActivity : PreferenceActivity,这得到骑的错误,但仍然没有设置齿轮在应用程序信息.我做错了什么吗?

我的目标是在应用程序信息中设置设置,以便用户能够更改.

推荐答案

在"What to use instead of "addPreferencesFromResource" in a PreferenceActivity?"之后,您可能需要PreferenceFragmentCompat from the AndroidX library而不是deprecated 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();
    }
}

扩展PreferenceFragmentCompat并从资源文件加载首选项的实现SettingsFragment:

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>

Android相关问答推荐

长流与长流的比较<>

图像在Android Studio中显示,但不在设备中显示

如何在Jetpack导航中不显示目的地?

Jetapck Compose:将Compose BOM更新为最新版本&2024.01.00&Quot;CircularProgressIndicator后出现错误

如何制作安卓';s FileProvider在Android 11上使用外部存储+

Android Studio SQLite 错误:列不正确(没有这样的列:_id)

activity在 Runnable 中如何工作?我的 Android 表格未显示

我需要在房间数据库中保留旧的自动迁移行吗?

同样的参数值下,为什么requiredSizeIn不等于requiredWidthIn + requiredHeightIn?

运行设备选项卡在 Android Studio 中自动打开

如何知道我的应用程序的新版本是否显示广告?

如何在一个活动中预加载图像然后在另一个活动中加载它们?

Android Studio电鳗:javaHome好像无效

我的观点在jetpack compose中相互重叠

无法 HEAD 'https://jcenter.bintray.com/com/facebook/react/react-native/maven-metadata.xml'

并行运行两个挂起函数并在第一个返回时返回

Android WebView 没有在第一次页面完成时从本地存储读取数据?

Jetpack Compose Tapjacking:过滤对模糊 UI 的touch

Android TTS 在屏幕关闭一段时间后停止朗读

未使用的内容填充参数