Android - Exemple de démonstration de thème

L'exemple suivant montre comment utiliser un thème pour une application. À des fins de démonstration, nous modifierons notre valeur par défautAppThemeIci, le texte par défaut, sa taille, sa famille, son ombre, etc. seront modifiés. Commençons par créer une application Android simple en suivant les étapes suivantes -

Étape La description
1 Vous allez utiliser Eclipse IDE pour créer une application Android et la nommer ThemeDemo sous un package com.example.themedemo comme expliqué dans le chapitre Exemple de Hello World .
2 Modifiez le fichier src / MainActivity.java pour ajouter des écouteurs et des gestionnaires d'événements de clic pour les deux boutons définis.
3 Définissez votre style dans un fichier de style global res/values/style.xml pour définir des attributs personnalisés pour un bouton et changer le thème par défaut de l'application pour jouer avec le texte.
4 Modifiez le contenu Detault du fichier res / layout / activity_main.xml pour inclure un ensemble de contrôles d'interface utilisateur Android et utiliser le style défini.
5 Définir les constantes requises dans res / valeurs / strings.xml fichier
6 Exécutez l'application pour lancer l'émulateur Android et vérifier le résultat des modifications apportées à l'application.

Voici le contenu du fichier d'activité principal modifié src/com.example.themedemo/MainActivity.java. Ce fichier peut inclure chacune des méthodes fondamentales du cycle de vie.

package com.example.themedemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      //--- find both the buttons---
      Button sButton = (Button) findViewById(R.id.button_s);
      Button lButton = (Button) findViewById(R.id.button_l);
      
      // -- register click event with first button ---
      sButton.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
            // --- find the text view --
            TextView txtView = (TextView) findViewById(R.id.text_id);
            
            // -- change text size --
            txtView.setTextSize(20);
         }
      });
      
      // -- register click event with second button ---
      lButton.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
            // --- find the text view --
            TextView txtView = (TextView) findViewById(R.id.text_id);
            
            // -- change text size --
            txtView.setTextSize(24);
         }
      });
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

Voici le contenu de res/values/style.xml fichier qui aura un style supplémentaire CustomButtonStyle défini -

<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>

Voici le contenu de res/layout/activity_main.xml fichier -

<?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>

Voici le contenu de res/values/strings.xml pour définir deux nouvelles constantes -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">ThemeDemo</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="button_small">Small Font</string>
   <string name="button_large">Large Font</string>
</resources>

Voici le contenu par défaut de AndroidManifest.xml. Ici, nous n'avons pas besoin de changer quoi que ce soit car nous avons gardé le nom du thème inchangé. Mais si vous définissez un nouveau thème frais ou héritez d'un nouveau thème par défaut avec un nom différent, vous devrez le remplacerAppTheme nom avec le nouveau nom de leur.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.guidemo"
   android:versionCode="1"
   android:versionName="1.0" >
   
   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="17" />
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.guidemo.MainActivity"
         android:label="@string/app_name" >
            
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Essayons d'exécuter votre ThemeDemoapplication. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application à partir d'Eclipse, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Eclipse installe l'application sur votre AVD et la démarre et si tout va bien avec votre configuration et votre application, elle affichera la fenêtre Emulator suivante -