Sobes.tech
Junior

როგორ შევინახოთ და გამოვიყენოთ თემა პარამეტრები Android აპლიკაციაში?

sobes.tech AI

პასუხი AI-სგან

ეფექტური მიდგომა მოიცავს SharedPreferences-ის გამოყენებას არჩეული თემის შენახვისთვის და AppCompatDelegate.setDefaultNightMode()-ის გამოყენებას მის განსახორციელებლად:

  1. თემის შენახვა: გამოიყენეთ SharedPreferences არჩეული თემის იდენტიფიკატორის შენახვისთვის (მაგალითად, "light", "dark", "system").

    // მიიღეთ SharedPreferences
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    // მიიღეთ რედაქტორი
    val editor = sharedPrefs.edit()
    // გამოიყენეთ თემის ID
    editor.putString("current_theme", themeId)
    // შეინახეთ ცვლილებები
    editor.apply()
    
  2. თემის გამოყენება აპლიკაციის დაწყებაზე: მთავარი Activity ან Application კლასში წაიკითხეთ შენახული მნიშვნელობა SharedPreferences-დან და გამოიყენეთ თემას:

    // წაიკითხეთ შენახული თემის მნიშვნელობა
    val themeId = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
        .getString("current_theme", "system") // დეფოლტი 'system'
    
    // გამოიყენეთ თემა
    when (themeId) {
        "light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
        "dark" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
        "system" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
        else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
    }
    
  3. მომხმარებლის მიერ თემის შეცვლა: შექმენით მომხმარებლის ინტერფეისი (მაგალითად, RadioButton პარამეტრებში), სადაც მომხმარებელი შეუძლია აირჩიოს თემა. არჩევის შემდეგ შეინახეთ ახალი იდენტიფიკატორი SharedPreferences-ში და დაუყოვნებლივ გამოიყენეთ თემა, ზარის მეშვეობით AppCompatDelegate.setDefaultNightMode() და საჭიროების შემთხვევაში, განაახლეთ Activity სწორი გამოსაყენებლად:

    // فرض کنیم کاربر موضوع تاریک را انتخاب کرده است
    val sharedPrefs = getSharedPreferences("AppTheme", Context.MODE_PRIVATE)
    val editor = sharedPrefs.edit()
    editor.putString("current_theme", "dark")
    editor.apply()
    
    // استفاده فوری از موضوع
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    
    // ან `recreate()` სრული გამოყენებისთვის
    // recreate()
    

    განაახლეთ Activity-ის განახლება recreate()-ით, რათა ყველა ხედვა სწორად განახლდეს ახალი თემით:

  4. styles.xml-ში თემების განსაზღვრა: განსაზღვრეთ ნათელი და მუქი თემებისთვის სტილები res/values/styles.xml და res/values-night/styles.xml-ში, რომლებიც მემკვიდრეობით იღებენ Theme.AppCompat-ს:

    <!-- res/values/styles.xml -->
    <style name="AppTheme.Light" parent="Theme.AppCompat.Light">
        <!-- ნათელი თემის სტილების განსაზღვრება -->
    </style>
    
    <!-- res/values-night/styles.xml -->
    <style name="AppTheme.Dark" parent="Theme.AppCompat">
        <!-- მუქი თემის სტილების განსაზღვრა -->
    </style>
    

    AndroidManifest.xml-ში მიუთითეთ ძირითადი თემაა აპლიკაციის:

    <!-- AndroidManifest.xml -->
    <application
        android:theme="@style/AppTheme.Light"
        ...>
        <!-- ... Activities -->
    </application>
    
  5. თემის ცვლილებების მონიტორინგი: თუ სისტემის თემას (მაგალითად, გრაფიკით ან ხელით მომხმარებლის მიერ) იცვლით, შეგიძლიათ გამოიყენოთ Configuration.uiMode onConfigurationChanged()-ში რეაგირებისათვის, მაგრამ AppCompatDelegate ჩვეულებრივ თვითონ მართავს ამას MODE_NIGHT_FOLLOW_SYSTEM-ის გამოყენებისას.

    @Override
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // შეიძლება შეამოწმოთ ახალი თემა, თუ საჭიროა
        // val currentNightMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK
        // ...
    }
    

AppCompatDelegate-ის გამოყენება რეკომენდირებულია თემების მხარდაჭერისთვის Android-ზე, რადგან ის უზრუნველყოფს უკუგაშენებადობას და სწორად მუშაობს მხარდაჭერის ბიბლიოთეკის სხვადასხვა კომპონენტებთან.