13 Şubat 2018 Salı

Android Dersleri 19 - Styles, Themes, style xml


19 - Styles, Themes, style.xml

https://developer.android.com/guide/topics/resources/style-resource.html
https://www.tutorialspoint.com/android/android_styles_and_themes.htm
        Şimdiye kadar styles.xml dosyasını çok kullandık ancak ne işe yaradığı konusuna değinmemiştik. Şimdi bunu öğreneceğiz.
        A style resource defines the format and look for a UI. A style can be applied to
- an individual View (from within a layout file) or
- to an entire Activity(from within the manifest file) or
- application (from within the manifest file).
( style.xml'de bir UI'ın format'ını ve görünümünü tanımlarız. Bir style, şunlara uygulanabilir :
- Layout dosyasındaki bir View'e.
- Bir activity'nin tamamına
- Uygulamanın tamamına. )
        Keep in mind that not all view objects accept all the same style attributes, so you should normally refer to the specific subclass of View for a list of the supported style attributes. However, if you apply a style to a view that doesn't support all of the style attributes, the view applies only those attributes that are supported and ignores the others.

Defining Styles

        A style is defined in an XML resource that is separate from the XML that specifies the layout. This XML file resides under res/values/ directory of your project and will have <resources> as the root node which is mandatory for the style file. The name of the XML file is arbitrary, but it must use the .xml extension. ( Layout'u tanımlayan xml dosyasından farklı bir xml dosyasında style tanımlayabiliriz. res/values/ klasörü altında bir dosyada bir style tanımlayabiliriz. Style resource dosyasındakii root element'in <resource> element olması zorunludur. Style resource dosyasının ismi önemli değildir, ancak bu dosyanın uzantısı .xml olmak zorundadır. Ancak convention olarak genellikle styles.xml dosyasında tanımlarız style'ları. )
        You can define multiple styles per file using <style> tag but each style will have its name that uniquely identifies the style. Android style attributes are set using <item> tag as shown below. ( Bir style resource dosyasında, örneğin styles.xml dosyasında<style> element'i kullanarak birden fazla style tanımlayabiliriz. Ancak herbir style element'in name attribute'ü unique olmak zorundadır. Bir style element'in attribute'lerini <item> element'lerini kullanarak set ederiz. Örneğin bir style element'in içerisinde, bir item element'i kullanarak textsize'ı belirtebilir, başka bir item element'i kullanarak textcolor'ı belirtebilir, başka bir item element'i kullanarak background-color'ı belirtebiliriz. Sonra bu style'ı Manifest dosyasında bir activity veya app'a uygularsak, style'ın attribute'leri bu activity veya app'ın içerisindeki hangi view'lere uygulanabiliyorsa uygulanırlar, örneğin bir attribute textview'e uygulanabiliyorsa uygulanır, ancak imageview'e uygulanamayabilir çünkü attribute textsize'ı ayarlıyor olabilir. Aşağıda CustomFontStyle isimli bir style tanımladık, bu style'In attribute'lerini ise <item> element'lerini kullanarak set ederiz. Aşağıdaki style'ı bir activity'ye uyguladık diyelim, bu activity'deki tüm view'lere android:layout_width ve android:layout_height attribute'leri uygulanabilir, bu style'ın diğer attribute'leri bir text'in size'ını font'unu rengini ayarlamak için kullanılır, dolayısıyla bu style bir activity'ye uygulanırsa, activity'deki textview'e edittext'e bu style'ın tüm attribute'leri uygulanabilir ama activity'deki imageview'de yazı olmayacağı için style'daki bir yazının size'ını rengini font'unu ayarlama gibi ayarlar imageview'e uygulanmaz pas geçilir. )
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="CustomFontStyle">
      <item name="android:layout_width">fill_parent</item>
      <item name="android:layout_height">wrap_content</item>
      <item name="android:capitalize">characters</item>
      <item name="android:typeface">monospace</item>
      <item name="android:textSize">12pt</item>
      <item name="android:textColor">#00FF00</item>/>
   </style>
</resources>
        The value for the <item> can be : (Bir item element'in değeri şunlardan biri olabilir : )
- a keyword string, ( Örnek : fill_parent )
- a hex color, ( Örnek : #00FF00 )
- a reference to another resource type, or
- other value depending on the style property.

Using Styles

        Once your style is defined, you can use it in your XML Layout file using style attribute as follows: ( Style'ı yukarıda anlatıldığı şekilde tanımladık diyelim. Tanımladığımız bu style'ı bir layout xml dosyasında bir textview'e aşağıdaki gibi uygulayabiliriz. Bu textview'deki text size'I rengi font'u gibi özelliklerini layout xml dosyasında belirtmek de mümkündür ancak biz buu bir style' altında tanımlayıp layout xml dosyasında bu style'a refer ederek yaptık aşağıda, bu yöntem tavsiye edilir. )
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
   <TextView
      android:id="@+id/text_id"
      style="@style/CustomFontStyle"
      android:text="@string/hello_world" />
</LinearLayout>
       
Örnek: https://www.tutorialspoint.com/android/android_style_demo_example.htm
style.xml  CustomButtonStyle isimli bir style tanımlarız resources element'İnin altında style element'ini kullanarak. Bu style'ı bir butona uygulayacağız, butonun ve butonun içindeki text'in rengi size'ı vs. gibi ayarlayarı tanımlarız bu style'da.
<resources>
   <!-- Base application theme. -->
   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
      <!-- Customize your theme here. -->
              <item name="colorPrimary">@color/colorPrimary</item>
      <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
      <item name="colorAccent">@color/colorAccent</item>
   </style>
   
   <style name="CustomButtonStyle">
      <item name="android:layout_width">100dp</item>
      <item name="android:layout_height">38dp</item>
      <item name="android:capitalize">characters</item>
      <item name="android:typeface">monospace</item>
      <item name="android:shadowDx">1.2</item>
      <item name="android:shadowDy">1.2</item>
      <item name="android:shadowRadius">2</item>
      <item name="android:textColor">#000000</item>
      <item name="android:gravity" >center</item>
      <item name="android:layout_margin" >3dp</item>
      <item name="android:textSize" >5pt</item>
      <item name="android:background">#70ff106d</item>
      <item name="android:shadowColor" >#70ff106d</item>
   </style>
</resources>
activity_main.xml
        Yukarda tanımladığımız CustomButtonStyle isimli style'ı main layout'daki Button element'e uygularız Button element'inin style attribute'ünü set ederek, burada CustomButtonStyle isimli style'a refer ederiz. Bu style'ı hangi isimli xml dosyasında tanımladığımız önemli değildir, bir xml dosyasında resource root element altında style element kullanarak tanımlamaktır önemli olan.
style="@style/CustomButtonStyle"
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" >
 
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Custom Button Style "
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
 
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />
 
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
 
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      style="@style/CustomButtonStyle"
      android:text="New Button"
      android:id="@+id/button"
      android:layout_below="@+id/imageButton"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2" />
</RelativeLayout>
Output : Style uygulanan butonun nasıl göründüğünü inceleyelim aşağıda.

Style Inheritance

        Android supports style Inheritance in very much similar way as cascading style sheet in web design. You can use this to inherit properties from an existing style and then define only the properties that you want to change or add. ( Bir style, başka bir style'dan miras alabilir. Başka bir style'dan miras alan bir style'da, parent style'dan gelen istediğimiz attribute'leri override edebiliriz, yeni attribute'ler tanımlayabiliriz. )
        To implement a custom theme, create or edit MyAndroidApp/res/values/themes.xml and add the following : ( Bir custom theme implement etmek için res/values klasörü altında themes.xml  isimli bir dosya yaratırız. Bu dosyada aşağıdaki gibi custom bir style tanımlarız. Bu style'ın parent'ının android:style/Theme olmasını söyleriz. Yani theme'i de style tanımlar gibi tanımlarız, tek fark ise şudur theme'i tanımlarken style element'in parent element'ini android:style/Theme kullanırız. Bu theme'i bir activity'ye veya uygulamaya uyguladığımız, activity'deki veya uygulamadaki android:textColorPrimary attribute'ünün uygulanabildiği tüm view'lere bu attribute uygulanır. )
<resources>
   <style name="MyCustomTheme" parent="android:style/Theme">
           <item name="android:textColorPrimary">#ffff0000</item>
    </style>
</resources>

        In your AndroidManifest.xml apply the theme to the activities you want to style : (AndroidManifest.xml dosyasında uygulamaya veya activity'ye yukarıda tanımladığımız theme'i aşağıdaki gibi uygularız. )
<activity  android:name="com.myapp.MyActivity"
   android:theme="@style/MyCustomTheme"     ...      />
        Your new theme will be applied to your activity, and text is now bright red. ( Yeni theme'i actiivty'ye uyguladığımızda yazılar artık aşağıda görüldüğü gibi parlak kırmızı olacaktır. )
Theme
If you want to inherit from styles that you've defined yourself, you don't have to use the parent. Instead, you can use dot notation by prefixing the name of the style you want to inherit to the name of your new style, separated by a period. For example, to create a new style that inherits the CodeFont style defined above, but make the color red, you can create the new style like this: ( Örneğin daha önce tanımladığımız CodeFont style'ının item'larını miras alan ancak farklı olarak yeni bir item tanımlayıp rengi kırmızı yapan bir style tanımladık aşağıda. )
    <style name="CodeFont.Red">
       
<item name="android:textColor">#FF0000</item>
   
</style>
        Notice that there is no parent in the <style> tag, but because the name begins with the CodeFont style name, this new style inherits all style attributes from the CodeFont style. The new style then overrides the android:textColor attribute to make the text red. You can reference this new style as @style/CodeFont.Red.
        You can continue inheriting styles like this as many times as you'd like by chaining names with periods. For example, you can extend CodeFont.Red to be bigger, with:
    <style name="CodeFont.Red.Big">
       
<item name="android:textSize">30sp</item>
   
</style>
        The above style inherits from the CodeFont.Red style, that itself inherits from the CodeFont style, then adds the android:textSize attribute.
Note: This technique for inheritance by chaining together names only works for styles defined by your own resources. You can't inherit Android built-in styles this way, as they reside in a different namespace to that used by your resources. To reference a built-in style, such as TextAppearance, you must use the parent attribute.
        Keep in mind that not all view objects accept all the same style attributes, so you should normally refer to the specific subclass of View for a list of the supported style attributes. However, if you apply a style to a view that doesn't support all of the style attributes, the view applies only those attributes that are supported and ignores the others.

Applying Colors to Theme Attributes

        For example, to apply the custom color to the window background, add the following two <item> elements to your custom theme, defined in MyAndroidApp/res/values/styles.xml file. ( Bir activity'nin background color'ını set etmek için android:windowBackground attribute kullanılır. Bu attribute'e değer olarak, @color'a reference edilip colors.xml'de tanımlı olan my_custom_color isimli rengin değeri verilir. MyCustomTheme isimli bir style'da tanımlanır bunlar. Sonra bu style activity'ye veya uygulamaya uygulanacaktır. )
<resources>
   ...
   <style name="MyCustomTheme" ...>
      <item name="android:windowBackground">@color/my_custom_color</item>
      <item name="android:colorBackgroundCacheHint">@color/my_custom_color</item>
   </style>
   ...
</resources>
Output : Uygulamayı çalıştırdığımızda activity'nin arka planının rengini alapıdaki gibi ayarlamış oluruz.
Theme

What is the difference between  android:windowBackground and android:colorBackground?
windowBackground only affects the main window's background.
colorBackground affects not only the background of the main window but also of all the components e.g. dialogs unless you override it in the component layout.
So both of them change your activity's background, but the latter(colorBackground) changes many more things as well.

Using a Custom Nine-Patch With Buttons

        A nine-patch drawable is a special kind of image which can be scaled in width and height while maintaining its visual integrity. Nine-patches are the most common way to specify the appearance of Android buttons, though any drawable type can be used. (nine-patch drawable Android'e özel bir resim çeşididir. Bu resim'i enine boyuna istediğimiz kadar büyütsek de küçültsek de resmin bütünlüğü bozulmaz. Android'de butonların görünümü için genellikle nine-patch'ler kullanılır. )
        Örnek bir nine-patch button aşağıda gösterilmiştir. Bu butonun görünümü bozulmadan size'ı büyütülebilir küçültülebilir.
Nine Patch Button
Steps to create Nine-Patch Buttons
( Bir Nine-Patch Button yaratmak için aşağıdaki adımlar uygulanır. )
1 - Save this bitmap as /res/drawable/my_nine_patch.9.png (Yukarıdaki resmi veya bütünlüğünün bozulmasını istemediğimiz bir resmi res/drawable klasörü altına kopyalarız. Resminin uzantısı .9.png olmak zorundadır, .9.png Android için özel bir uzantıdır, Android bu uzantıyı tanır. )
2 - Define a new style ( MyCustomButton isimli bir style tanımlarız. Bu style'ın parent'ının android:Widget.Button olduğunu söyleriz. Style element'in altında item element tanımlarız. item element'in name attribute'Üne android:background set ederiz, bunun değerine ise drawable klasörü altındaki .9.png uzantılı resmin path'ini veririz. Yani bu style'da Button widgert'ının  özelliklerini miras alırız ayrıca bu butonun arka planının da path'ini verdiğimiz resimden oluşmasını söyleriz. )
<resources>
      <style name="MyCustomButton" parent="android:Widget.Button">
          <item name="android:background">@drawable/my_nine_patch
          </item>
      </style>
   ...
</resources>
3 - Apply the new button style to the buttonStyle attribute of your custom theme. ( Yeni bir style tanımlarız bu style'ın parent'ı theme'dir. Bu style'da item element tanımlarız, android:buttonStyle attribute'üne değer olarak  az önce tanımladığmız style'ı veririz. Bu theme'i(style'ı) bir activity'ye veya uygulamaya uyguladığımızda android:buttonStyle attribute'ü sadece button view'lere uygulanabileceği için , butonlara MyCustomButton isimli style uygulanır,dolayısıyla butonların arka planı nine-patch resimden oluşur. )
Apply the theme
<resources>
      <style name="MyCustomTheme" parent=...>
         ...
         <item name="android:buttonStyle">@style/MyCustomButton</item>
      </style>
   ...
</resources>
Output : Activity'deki buton aşağıdaki gibi görünür. Butonun arka planı bizim nine patch resmimizin bütünlüğü bozulmadan resize olmuş hali olur.
Theme
Android Themes
        Hope you understood the concept of Style, so now let's try to understand what is a Theme. A theme is nothing but an Android style applied to an entire Activity or application, rather than an individual View. (Theme de bir style'dır, farklı olan şudur : theme bir activity veya uygulamaya uygulanır, style ise bir view'e uygulanır. )
        Thus, when a style is applied as a theme, every View in the Activity or application will apply each style property that it supports. For example, you can apply the same CustomFontStyle style as a theme for an Activity and then all text inside that Activity will have green monospace font. ( Bir theme bir activity veya uygulamaya uygulandığında, activity veya uygulamadaki tüm view'lere desteklenen style property'ler uygulanır. Örneğin daha önce tanımladığımız CustomFontStyle'ı bir theme olarak activity veya uygulamaya uygularsak, activity veya uygulamadaki tüm text'ler yeşil vemonospace font'da olacaktır. )
        To set a theme for all the activities of your application, open the AndroidManifest.xml file and edit the <application> tag to include the android:theme attribute with the style name. For example : ( Bir uygulamanın tüm activity'lerine bir theme'i aşağıdaki gibi uygularız. )
<application  android:theme="@style/CustomFontStyle">
        But if you want a theme applied to just one Activity in your application, then add the android:theme attribute to the <activity> tag only. For example : ( Bir uygulamadaki sadece bir activity'ye bir theme'i aşağıdaki gibi uygularız. )
<activity  android:theme="@style/CustomFontStyle">
        There are a number of default themes defined by Android which you can use directly or inherit them using parent attribute as follows : (Android'de tanımlı çok fazla sayıda theme vardır. Bu theme'leri  doğrudan kullanabiliriz veya parent attribute'ünü kullanarak miras olarak alabiliriz. Aşağıdaki örnekte Android'de tanımlı android:Theme.Light theme'i miras alan bir theme(style) tanımladık. )
<style name="CustomTheme" parent="android:Theme.Light">
        ...
</style>
Örnek : https://www.tutorialspoint.com/android/android_theme_demo_example.htm
Themes_Styles_Example isimli projeyi geliştirdim.
styles.xml
<resources>

   <!--
      Base application theme, dependent on API level. This theme is replaced
      by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
   -->
        
   <style name="AppBaseTheme" parent="android:Theme.Light">
     <!--
         Theme customizations available in newer API levels can go in
         res/values-vXX/styles.xml, while customizations related to
         backward-compatibility can go here.
      -->
   </style>

   <!-- Application theme. -->
   <style name="AppTheme" parent="AppBaseTheme">
      <!-- All customizations that are NOT specific to a particular API-level can go here. -->
      <item name="android:capitalize">characters</item>
      <item name="android:typeface">monospace</item>
      <item name="android:shadowDx">1.2</item>
      <item name="android:shadowDy">1.2</item>
      <item name="android:shadowRadius">2</item>
      <item name="android:textColor">#494948</item>/>
      <item name="android:gravity" >center</item>
      <item name="android:layout_margin" >3dp</item>
      <item name="android:textSize" >5pt</item>
      <item name="android:shadowColor" >#000000</item>
   </style>
   
   <!-- Custom Style defined for the buttons. -->
   <style name="CustomButtonStyle">
      <item name="android:layout_width">100dp</item>
      <item name="android:layout_height">38dp</item>
   </style>
<resources>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <Button
      android:id="@+id/button_s"
      style="@style/CustomButtonStyle"
      android:text="@string/button_small"
      android:onClick="doSmall"/>
   
   <Button
      android:id="@+id/button_l"
      style="@style/CustomButtonStyle"
      android:text="@string/button_large"
      android:onClick="doLarge"/>

   <TextView
      android:id="@+id/text_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:capitalize="characters"
      android:text="@string/hello_world" />
</LinearLayout>

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest >
   <application  ...
      android:theme="@style/AppTheme" >
   </application>
</manifest>
Output :


        Bir activity'deki farklı alanların renklerini aşağıdaki attribute'leri kullanarak belirleriz.
Theme
        Aşağıdaki style.xml dosyasını hazırlayarak yukarıdaki gibi bir layout tasarladık.
<resource>
   <style name="AppTheme" parent="android:Theme.Material">     
      <item name ="android:color/primary">@color/primary</item>
      <item name ="android:color/primaryDark">@color/primary_dark</item>
      <item name ="android:colorAccent/primary">@color/accent</item>
   </style>
<resource>      

Built-in Styles & Themes

        The Android platform provides a large collection of styles and themes that you can use in your applications. You can find a reference of all available styles in the R.style class. To use the styles listed here, replace all underscores in the style name with a period. For example, you can apply the Theme_NoTitleBar theme with "@android:style/Theme.NoTitleBar". You can see the following source code for Android styles and themes . ( Android'de built-in tanımlı çok sayıda style ve theme vardır. Tüm built-in style'ları görmek için R.style class'ını inceleyebiliriz.  R.style class'ındaki örneğin Theme_NoTitleBar isimli bir theme'i uygulamak için alt tire yerine nokta koymalıyız yani "@android:style/Theme.NoTitleBar" demeliyiz. Built-in style ve theme'leri aşağıdaki 2 linkten de görebilirsiniz.  )
SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<style
       
name="style_name"
       
parent="@[package:]style/style_to_inherit">
       
<item
            name
="[package:]style_property_name"
           
>style_value</item>
   
</style>
</resources>
ELEMENTS:
<resources> :  Required. This must be the root node. No attributes.
<style> : Defines a single style. Contains <item> elements.
attributes of <style> element :
name : StringRequired. View, Activity, veya application'a uygulanacak style'ın unique ismi.
parent : Style resource. Miras alınacak olan style.
<item> :  Style'ın herbir property'si <item> element ile belirtilir.
attributes of <item> element:
name : Attribute resourceRequired. The name of the style property to be defined, with a package prefix if necessary (for example android:textColor). ( Bir view'e uygulanacak olan attribute'dür. Örneğin android:layout_width, android:layout_height, android:textSize, android:textColor ).
EXAMPLE:
XML file for the style (saved in res/values/):
<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<style name="CustomText" parent="@style/Text">
       
<item name="android:textSize">20sp</item>
       
<item name="android:textColor">#008</item>
   
</style>
</resources>
XML file that applies the style to a TextView (saved in res/layout/): ( Yukarıda tanımladığımız style'ı aşağıdaki gibi res/layout klasörü altındaki bir layout dosyasında bir textview'e uygularız. )
<?xml version="1.0" encoding="utf-8"?>
<EditText
   
style="@style/CustomText"
   
android:layout_width="fill_parent"
   
android:layout_height="wrap_content"
   
android:text="Hello, World!" />
Örneğin aşağıdaki bir view element tanımladık diyelim layout dosyasında.
<TextView
   
android:layout_width="match_parent"
   
android:layout_height="wrap_content"
   
android:textColor="#00FF00"
   
android:typeface="monospace"
   
android:text="@string/hello" />
        Yukarıdaki layout dosyasında tanımladığımız bazı şeyleri styles olarak tanımlayıp layout dosyasında bu styles'a refer edebiliriz aşağıdaki gibi.
<TextView
   
android:layout_width="match_parent"
   
android:layout_height="wrap_content"
   
android:textAppearance="@style/CodeFont"
   
android:text="@string/hello" />
        The attributes related to style have been removed from the layout XML and put into a style definition called CodeFont, which is then applied using the android:textAppearance attribute.
        Styles in Android share a similar philosophy to cascading stylesheets in web design—they allow you to separate the design from the content.
        theme is a style applied to an entire Activity or app, rather than an individual View, as in the example above. When a style is applied as a theme, every view in the activity or app applies each style attribute that it supports. For example, if you apply the same CodeFont style as a theme for an activity, then all text inside that activity appears in a green monospace font.
        The following example illustrates using hexadecimal color values in a number of attributes:
<resources>
   
<style name="AppTheme" parent="Theme.Material">
       
<item name="colorPrimary">#673AB7</item>
       
<item name="colorPrimaryDark">#512DA8</item>
       
<item name="colorAccent">#FF4081</item>
   
</style>
</resources>
And the following example illustrates specifying values for the same attribute using references:
<resources>
   
<style name="AppTheme" parent="Theme.Material">
       
<item name="colorPrimary">@color/primary</item>
       
<item name="colorPrimaryDark">@color/primary_dark</item>
       
<item name="colorAccent">@color/accent</item>
   
</style>
</resources>

Style Attributes

        Now that you understand how a style is defined, you need to learn what kind of style attributes—defined by the <item> element—are available. ( Style'ın nasıl tanımlandığını öğrendik şimdi ise style element'in içindeki item element'in name attribute'üne hangi değerleri verebileceğimizi konuşalım. )
        The attributes that apply to a specific View are listed in the corresponding class reference, under XML attributes. For example, all of the attributes listed in the table of TextView XML attributes can be used in a style definition for a TextView element (or one of its subclasses). One of the attributes listed in the reference is android:inputType, so where you might normally place the android:inputType attribute in an <EditText> element, like this: ( Bir View'e uygulanabilecek olan attribute'leri, o View'in class reference'ına bakarak öğrenebiliriz. Örneğin TextView'e hangi uygulanabilecek olan attribute'leri, TextView'in class reference'ına bakarak öğrenebiliriz, bu attribute'leri bir TextView element'in style definition'da kullanabiliriz. Örneğin TextView'in android:inputType diye bir attribute'ü varmış. Bu attribute'ü layout dosyasında EditText'in attribute'ü olarak da kullanabiliriz. Hatırla EdİtText TextView'in parent'ıdır.  )
<EditText
   
android:inputType="flag"
    ...
/>
        You can instead create a style for the EditText element that includes this property: ( Veya bir style tanımlayıp bu style'da android:inputType attribute'ü belirtebiliriz. )
<style name="Numbers">
 
<item name="android:inputType">number</item>
 
...
</style>
        So your XML for the layout can now implement this style: ( sonra ise EditText'e layout dosyasında bu style'ı uygularız. )
<EditText
   
style="@style/Numbers"
    ...
/>
        For a reference of all style attributes available in the Android Framework, see the R.attr reference. For the list of all available style attributes available in a particular package of the support library, see the corresponding R.attr reference. For example, for the list of style attributes available in the support-v7 package, see the R.attr reference for that package.
Note: Don't forget to prefix the property names in each <item> element with the android: namespace. For example: <item name="android:inputType">.
You can also create custom style attributes for your app. Custom attributes, however, belong to a different namespace. For more information about creating custom attributes, see Creating a Custom View Class.

Maintaining theme compatibility

        To maintain theme compatibility with previous versions of Android, use one of the themes available in the appcompat-v7 library. You can apply a theme to your app or activity, or you can set it as the parent, when creating your own backwards compatible themes. You can also use backwards compatible theme overlays in the Support Library. To find a list of the available themes and theme overlays, search the R.style reference in theandroid.support.v7.appcompat package for fields that being with Theme_ and ThemeOverlay_respectively.
        Android'in yeni versiyonlarında yeni theme'ler gelmektedir. Örneğin sadece Android 5.0 ve üzeri versiyonlarda çalıştırılabilecek theme'ler vardır bu theme'leri res/values-v21/ klaösrü altındaki bir style xml dosyasında tanımlarız. Bu style'larda uygun parent style'ı seçeriz.
res/values/styles.xml klasöründe genel bir style tanımlarız :s
<style name="LightThemeSelector" parent="android:Theme.Light">
   
...
</style>
        To have this theme use the material theme when the app is running on Android 5.0 (API Level 21) or higher, you can place an alternative declaration for the theme in an XML file in res/values-v21, but make the parent theme the material theme: (Android 5.0 ve üzeri versiyonlarda bu uygulama çalıştırıldığında Material Design'ı kullanan bir theme kullanmak istiyorsak res/values-v21/ klasörü altında bir style xml tanımlarız. parent style Material theme olur.  )
<style name="LightThemeSelector" parent="android:Theme.Material.Light">
   
...
</style>
        Now use this theme like you would any other, and your app automatically switches to the material theme if it's running on Android 5.0 or higher.
Resources :
https://developer.android.com/guide/topics/resources/style-resource.html
https://developer.android.com/guide/topics/ui/themes.html
https://www.tutorialspoint.com/android/android_styles_and_themes.htm

Hiç yorum yok:

Yorum Gönder