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
- 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. )
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>
<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>
<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.
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.
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.
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.
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>
<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 : String. Required. 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
resource. Required.
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>
<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!" />
<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" />
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" />
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.
A 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>
<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 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"
... />
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>
<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"
... />
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>
...
</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>
...
</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