Uygulamanıza dinamik renk ekleme

1. Başlamadan önce

Bu codelab'de, bahşiş hesaplayıcı uygulaması olan başlangıç uygulamasını güncelleyerek Materyal Tasarım 3'teki yeni özellikleri kullanarak uygulama kullanıcı arayüzünün, kullanıcının duvar kağıdına göre dinamik bir şekilde temasını belirleyeceksiniz. Aşağıda, dinamik renk uygulanmış uygulamanın ekran görüntülerini bulabilirsiniz. Renklerin nasıl uygulandığını kontrol etmenize olanak tanıyan bazı ek senaryoları da inceleyeceksiniz.

Ön koşullar

Geliştiriciler ise

  • Android'deki temel tema oluşturma kavramlarına aşinayım.
  • Uygulamanın temasında değişiklik yapma konusunda rahat

Neler öğreneceksiniz?

  • Mevcut Materyal Bileşenler ile Materyal 3 temaları nasıl ayırt edilir?
  • Tema Materyal 3'e nasıl güncellenir?
  • Araçlarımızı kullanarak tema oluşturma ve uygulama
  • Tema özelliklerinin birbiriyle ilişkisi

Gerekenler

2. Başlangıç Uygulaması'na Genel Bakış

İpucu Süresi uygulaması, bahşişi özelleştirme seçenekleri bulunan bir bahşiş hesaplayıcı uygulamasıdır. Bu, Kotlin'de Android ile İlgili Temel Bilgiler eğitim kursumuzdaki örnek uygulamalardan biridir.

59906a9f19d6b804.png

3. Gradle Bağımlılıklarını Güncelleme

Asıl temayı güncellemeden ve dinamik renk uygulamadan önce uygulamanızın derleme.gradle dosyasında yapılması gereken birkaç değişiklik var.

Bağımlılıklar bölümünde, malzeme kitaplığının 1.5.0-alpha04 veya sonraki bir sürüm olduğundan emin olun:

dependencies {
    // ...
    implementation 'com.google.android.material:material:<version>'
}

Android bölümünde, BuildSdkVersion ve targetSdkVersion değerlerini değiştirin.

31 yaş ve üzeri için:

android {
    compileSdkVersion 31
    // ...

    defaultConfig {
        // ...
        targetSdkVersion 31
    }
}

Bu talimatlarda, nispeten yeni bağımlılıkları olan bir uygulama varsayılmaktadır. Halihazırda Materyal veya daha eski bir sürümü kullanmayan bir uygulama için lütfen Android için Materyal Tasarım Bileşenleri'nin Başlangıç dokümanlarındaki talimatlara bakın.

Temalarınızı oluşturduğunuz her yerde Theme.MaterialComponents.* referanslarını Theme.Material3.* olarak değiştirin. Bazı stillerin Material3 ad alanında henüz yeni bir stili yok ancak üst tema Theme.Material3.* olarak güncellendikten sonra çoğu bileşen yeni stili devralmaya devam edecek. Düğmelerin artık yeni yuvarlak temayı kullandığını aşağıda görebilirsiniz.

Aşağıdaki temalar dosyasında değişen tek şey üst temadır. Birazdan bu temayı tamamen değiştireceğiz. Renk özelliklerinden bazıları eski ve oluşturduğumuz özel stillerden bazıları artık Material3'te standart.

themes.xml

<style name="Theme.TipTime" parent="Theme.Material3.Light">
   <!-- Primary brand color. -->
   <item name="colorPrimary">@color/green</item>
   <item name="colorPrimaryVariant">@color/green_dark</item>
   <item name="colorOnPrimary">@color/white</item>
   <!-- Secondary brand color. -->
   <item name="colorSecondary">@color/blue</item>
   <item name="colorSecondaryVariant">@color/blue_dark</item>
   <item name="colorOnSecondary">@color/black</item>
   <!-- Status bar color. -->
   <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
   <!-- For text input fields -->
   <item name="textInputStyle">@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox</item>
   <!-- For radio buttons -->
   <item name="radioButtonStyle">@style/Widget.TipTime.CompoundButton.RadioButton</item>
   <!-- For switches -->
   <item name="switchStyle">@style/Widget.TipTime.CompoundButton.Switch</item>
</style>

f91e2acbac7cd469.png

4. Renk Temasını ve Renk Rollerini Anlama

Material 3 renk sistemi, kullanıcı arayüzünüze renk uygulamak için düzenli bir yaklaşım kullanır. Theme.AppCompat özelliklerinden birkaçı hâlâ kullanılıyor. Bununla birlikte, Theme.MaterialComponents.* ve Theme.Material3.* sürümüne daha fazla özellik eklendi. Bu yüzden, uygulanmamış özelliklerin temel temadan taşmadığından emin olmak için uygulamanızın tüm ekranlarını incelemeniz önemlidir.

Renk rollerini anlama

Materyal 3 temasında renkle ilgili yirmiden fazla özellik vardır. Bu, başta göz korkutucu görünebilir, ancak türev renkler oluşturmak için aynı 4-5 renk rolüyle bir araya gelen birkaç temel renk var.

Bu renk grupları şunlardır:

  • Birincil, uygulamanızın birincil rengi
  • İkincil, uygulamanızın ikincil rengi
  • Üçüncül, ya Birincil ve İkincil'i tamamlayan üçüncü bir renk
  • Hata, hata metni ve iletişim kutuları için kullanılır
  • Arka plan
  • Yüzey, Yüzey Varyantı, Yüzey Ters

Birincil, İkincil, Üçüncül ve Hata rolleri şunlardır:

<ana renk>

Temel renk

<ana renk> üzerinde

temel renk üzerinde görünen simgelerin ve metnin rengi

<base color>Kapsayıcı

temel, renk, düğmeler, iletişim kutuları vb. için kullanılır

<base color>Kapsayıcıda

kapsayıcıdaki simgelerin ve metnin rengi

Örneğin, Malzeme 3'te varsayılan stile sahip bir Kayan İşlem Düğmesi, temel rengi olarak Primary kullanıyor. Bu nedenle, düğmenin arka plan rengi için primaryContainer ve içeriği için onPrimaryContainer kullanıyor.

Bir temayı elle özelleştirirken en azından değiştirdiğiniz her temel rengin on<base color> özelliğinin okunabilir olduğunu doğrulamalısınız.

En iyi uygulamalar, temelden uygulamanıza kadar herhangi bir yapı olmaması için renk grubundaki tüm rolleri aynı anda ayarlamaktır.

Arka plan ve yüzey renklerinin genellikle iki rolü vardır: temel rengin kendisi için ve üzerinde görünen simgeler veya metinler için on<base color>.

5. Materyal Tema Oluşturucu ile Materyal 3 teması oluşturma

Materyal Tema Oluşturucu, özel renk şeması oluşturmayı, M3 renk sistemine geçiş yapmak için yerleşik kod dışa aktarma özelliğini kullanmayı ve dinamik renklerden yararlanmayı kolaylaştırır. material.io/material-theme-builder hakkında daha fazla bilgi

İpucu Süresi uygulama temasında, bileşenler için çeşitli stiller yer alsa da stillerin çoğu, Materyal 3 temalarında varsayılan olarak kullanılır. Yalnızca Birincil ve İkincil renklere dikkat etmemiz gerekir.

Bunlar, yeşil birincil renge (#1B5E20) ve mavi bir İkincil renge (#0288D1) karşılık gelir.

Bu renkleri Malzeme Tema Oluşturucu'ya girebilir ve tam temayı dışa aktarabilirsiniz (başka bir yerde tam bir genel bakış bağlantısı verildiği varsayılır).

Girdiğiniz renklerin tonlarının, renk oluşturma algoritmasına uyacak şekilde değişebileceğini ve hem tamamlayıcı hem de okunabilir renkler sağlayacağını unutmayın.

Özel renkler girdiğinizde oluşturulan değerlerin bir alt kümesi aşağıda verilmiştir.

7f6c5a33f5233811.png

6. Materyal Tema Oluşturucu Dışa Aktarma Dosyalarıyla Çalışma

Dışa aktarma arşivi, açık ve koyu temalara karşılık gelen kendi domains.xml dosyasına sahip değerler ve gece-gece/ dizin dizinlerini içerir. Tüm renkler, value/colors.xml dosyasında tanımlanmıştır.

f66a64db2989a260.png

Dosyalar olduğu gibi kopyalanabilir, ancak AndroidManifest.xml temanızı veya tema dosyalarını birbiriyle eşleşecek şekilde değiştirmeniz gerekir. Aracın varsayılan adı AppTheme'dir.

Uygulamayı yeniden başlattığınızda ekranla neredeyse aynı görünür. Kayda değer bir değişiklik ise Switch ve RadioButtons oldu. Bu değişikliklerden sonra, seçilen durumları birincil renk ve ikincil renklerdeki tonlarla tematik hale getirildi. Daha büyük uygulamalarda bazı tasarımları yeniden gözden geçirmeniz gerekebilir.

38a50ada47fd5ea4.png

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tiptime">

   <application ...>
       <activity android:name=".MainActivity"
           android:exported="true">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>

</manifest>

7. Dinamik renk ekleme

Uygun bir Material 3 teması kullanıldığında, kullanıcı arayüzünü birkaç küçük eklemeyle dinamik hale getirebiliriz.

Dinamik Renkler API'si, tüm Etkinliklere dinamik renk uygulamanıza olanak tanır

veya farklı Görünümlere ya da Parçalara gösterilebilir. Şunun için:

tüm dünyaya dinamik renk uygulayacağız.

Uygulama sınıfı dosyası oluşturma

class TipTimeApplication: Application() {
    override fun onCreate() {
        // Apply dynamic color
        DynamicColors.applyToActivitiesIfAvailable(this)
    }
}

Android manifest'inde yeni oluşturulan bu dosyaya referans vermemiz gerekiyor:

AndroidManifest.xml

< application android name=".TipTimeApplication
<!--- Other existing attributes –>

</application >

Android 12 ve sonraki sürümlerin yüklü olduğu sistemlerde, varsayılan düzende kullanıcının duvar kağıdı) incelenerek çeşitli ton paletleri oluşturulur. Bu paletlerdeki değerler, ThemeOverlay oluşturmak için kullanılır.

DynamicColors sınıfı, sistem tarafından oluşturulan veya sizin sağladığınız dinamik tema yer paylaşımını uygulamak için ActivityPreCreated üzerinde kesişen bir ActivityLifecycleCallbacks kaydeder.

eba71f96f4ba9cdf.png

8. Özel tema yer paylaşımı uygulama

Araçlarımız tema yer paylaşımlarını dışa aktarabilir, ancak az sayıda özelliği geçersiz kılıyorsanız bunları manuel olarak da oluşturabilirsiniz.

Tema yer paylaşımı, başka bir temayla birlikte kullanılmak üzere tasarlanmıştır ve yalnızca temel temanın üstünde değiştirilecek değerleri içerir.

Bir nedenden ötürü, marka bilinci oluşturma sürecinde, birincil renk tonlarının kırmızının tonları olması gerektiğini varsayalım. Bunu aşağıdaki dosyalar ve özellikler ile yapabiliriz.

colors.xml

<resources>
    <color name="overlay_light_primary">#9C4146</color>
    <color name="overlay_light_onPrimary">#FFFFFF</color> 
    <color name= "overlay_light_primaryContainer">#FFDADB</color>
    <color name="overlay_light_onPrimaryContainer">#400008</color>
</resources >

themes_overlays.xml

<style name="AppTheme.Overlay" parent="ThemeOverlay.Material3.DynamicColors.Light">
    <item name="colorPrimary">@color/overlay_light_primary</item>
    <item name="colorOnPrimary">@color/overlay_light_onPrimary</item> 
    <item name="colorPrimaryContainer">@color/overlay_light_primaryContainer</item> 
    <item name="colorOnPrimaryContainer">@color/overlay_light_onPrimaryContainer<item>
</style>

Android 12 yukarıdaki kod için dinamik bir açık tema uygular ve değişikliklerinizi bunun üzerine yerleştirir. Alternatif olarak, aşağıdakilerden herhangi biri dahil olmak üzere geçerli herhangi bir ThemeOverlay üst öğe olarak kullanılabilir:

ThemeOverlay.Material3.Light

ThemeOverlay.Material3.Dark

ThemeOverlay.Material3.DayNight ThemeOverlay.Material3.DynamicColors.Dark

ThemeOverlay.Material3.DynamicColors.DayNight

Materyal varsayılanı yerine bu Tema Yer Paylaşımını kullanmak için DynamicColors.applyToActivitiesIfAvailable çağrısını şu şekilde değiştirin:

DynamicColors.applyToActivitiesIfAvailable(this, R.style.AppTheme_Overlay)

d87020776782036f.png

9. Özel özelliklere dinamik renk ekleme

Şu ana kadar, Material 3 temasında zaten mevcut olan özellikleri geçersiz kıldık. Dinamik renkte başka bir olası durumumuz daha var. Bu durumda, ayrılması gereken bir veya daha fazla özel özellik olabilir.

Bir uygulama dinamik rengi etkinleştirdiğinde 5 ton paletine erişebilir: üç vurgu paleti ve aşağıdaki yaklaşık rollere sahip iki nötr palet:

system_accent1

Birincil renk tonları

system_accent2

İkincil renk tonları

system_accent3

Üçüncül renk tonları

system_neutral1

Nötr arka planlar ve yüzeyler

system_neutral2

Nötr yüzeyler ve dış çizgiler

Her palette, beyazdan ve ten rengine kadar uzanan,

siyah için: 0, 10, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000.

Dinamik renk için bir kullanıcı arayüzü tasarlarken belirli renk hakkında daha az düşünmeli, tasarım sistemindeki bileşenin tonu ve parlaklığının diğerleriyle ilişkisi üzerine düşünmelisiniz.

Simgelerin ikincil vurgu paleti kullanılarak belirlenmesini istediğinizi ve attrs.xml dosyasında aşağıdaki girişle tonlama simgelerine bir özellik eklediğinizi varsayalım.

attrs.xml

<resources>
    <attr name="iconColor" format="color" />
</resources>

Tema yer paylaşımınız aşağıdaki gibi görünebilir:

<style name="AppTheme.Overlay" parent="ThemeOverlay.Material3.DynamicColors.DayNight"> 
<item name="iconColor">@android:color/system_accent2_600</item>
</style>

Uygulamayı yeniden yükleyip duvar kağıdınızı değiştirdiğinizde uygulama bu ikincil paleti seçer.

11ef0035702640d9.png

264b2c2e74c5f574.png

Bu paletler Android 12'ye (API 31) özeldir. Bu nedenle, uygulamanızın minimum SDK sürümü 31 veya sonraki bir sürüme ayarlanmamışsa ilgili dosyaları -v31 son ekiyle klasörlere yerleştirmeniz gerekir.

10. Özet

Bu codelab'de şunları yaptınız:

  • Temanızı Materyal 3'e yükseltmek için bağımlılık ekleyin.
  • Yeni renk gruplarını ve rollerini anlayın.
  • Statik temadan dinamik renge nasıl geçiş yapılacağını öğrenin.
  • Tema yer paylaşımlarının nasıl kullanılacağını ve özel tema özellikleri için dinamik renklerin nasıl kullanılacağını anlama.