【问题标题】:How to create an app setting in an xamarin android app that shows in the Android Settings/Apps/App Setting for that app?如何在该应用程序的 Android 设置/应用程序/应用程序设置中显示的 xamarin android 应用程序中创建应用程序设置?
【发布时间】:2020-06-17 05:42:01
【问题描述】:

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

上面的页面讨论了在你的应用程序中创建一个设置 UI,并显示了使用 XML 文件(它不会顺便告诉你放在哪里)。

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

是否可以这样做,如果可以,有人可以举个例子吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: android xamarin settings appsettings


    【解决方案1】:

    如果你想做到这一点,你应该首先添加以下 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的类,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>
    

    在活动中使用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();
    
            }
    }
    }
    

    这是运行截图。

    【讨论】:

    • 感谢您在这里所做的努力。但它似乎仍然是应用程序中的设置 UI。我想让应用程序设置出现在 android 设置中,在应用程序和我的应用程序和我的应用程序的应用程序设置下。我最终选择了 Xamarin.Essentials: Preferences,因为这是我能找到的最接近的并且不需要任何 UI。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的分享,请在两天后接受您的回答,这将对有类似问题的其他人有所帮助。
    • 我不确定我是否理解这一点。您的意思是通过使用首选项,它会出现在该应用的系统设置中吗?
    猜你喜欢
    • 2012-06-16
    • 2013-12-17
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多