Android Styling with Kotlin: Mastering styles.xml for Consistent UI Design

In Android development, maintaining a consistent look and feel across your application is crucial for a positive user experience. Android’s styling system allows you to define styles in XML and apply them to your UI components. This guide walks you through creating and applying a simple style in XML using Kotlin for Android development, specifically focusing on res/values/styles.xml.

What is Styling in Android?

Styling in Android involves defining visual attributes such as text color, font size, background color, and padding in a central location. By applying a style to UI elements, you ensure consistency and reduce redundancy in your layout XML files.

Why Use Styles?

  • Consistency: Ensures a uniform look and feel across your application.
  • Maintainability: Centralized style definitions make it easier to update the appearance of multiple UI elements at once.
  • Readability: Keeps your layout XML files clean and concise by extracting styling information.

Step-by-Step Guide to Creating and Applying a Simple Style in Android XML

Step 1: Create a New Android Project (if necessary)

If you don’t already have an Android project, create a new one using Android Studio. Choose Kotlin as the language and select an appropriate template.

Step 2: Define a Style in res/values/styles.xml

Open the res/values/styles.xml file in your project. If it doesn’t exist, create it under the res/values directory. Define your style using the <style> tag.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomButton">
        <item name="android:textColor">@color/white</item>
        <item name="android:background">@color/colorPrimary</item>
        <item name="android:padding">16dp</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textStyle">bold</item>
    </style>
</resources>

In this example, we’ve created a style named CustomButton with the following attributes:

  • android:textColor: Text color set to white.
  • android:background: Background color set to the primary color (defined in colors.xml).
  • android:padding: Padding around the text set to 16dp.
  • android:textSize: Text size set to 18sp.
  • android:textStyle: Text style set to bold.

Make sure you have the necessary color resources defined in res/values/colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>
    <color name="white">#FFFFFF</color>
</resources>

Step 3: Apply the Style to a UI Component in Layout XML

Open your layout XML file (e.g., activity_main.xml) and apply the style to a Button using the style attribute.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me"
        android:style="@style/CustomButton"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Here, the style="@style/CustomButton" attribute applies the defined style to the Button.

Step 4: Use the View in Kotlin Code

In your Kotlin activity or fragment, you don’t need to do anything special to apply the style. The style is automatically applied when the layout is inflated. You can interact with the styled button as usual.


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val myButton: Button = findViewById(R.id.myButton)
        myButton.setOnClickListener {
            Toast.makeText(this, "Button Clicked!", Toast.LENGTH_SHORT).show()
        }
    }
}

Step 5: Run Your Application

Build and run your application on an emulator or a physical device. You should see the button with the styling defined in CustomButton.

Example: Extending Styles

You can also extend existing styles to create new styles that inherit attributes from the parent style. For example, you can extend a default button style.

<style name="ExtendedButton" parent="Widget.AppCompat.Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:background">@color/colorAccent</item>
    <item name="android:textSize">20sp</item>
</style>

To use this style:

<Button
    android:id="@+id/extendedButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Extended Button"
    android:style="@style/ExtendedButton"
    app:layout_constraintTop_toBottomOf="@+id/myButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    android:layout_marginTop="16dp"/>

Example: Using Themes

Themes are similar to styles, but they apply to an entire activity or application rather than individual views. To define a theme, use the <style> tag with a parent attribute pointing to a base theme.

<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Apply the theme in your AndroidManifest.xml:

<application
    android:theme="@style/CustomTheme">
    ...
</application>

Conclusion

Styling is a powerful feature in Android development that promotes consistency, maintainability, and readability. By defining styles in res/values/styles.xml and applying them to UI components, you can ensure that your application has a consistent look and feel. Using styles efficiently reduces code duplication and simplifies the process of updating the visual appearance of your app.