Android: ejemplo de demostración de tema

El siguiente ejemplo demuestra cómo puede utilizar un tema para una aplicación. Para fines de demostración, modificaremos nuestro valor predeterminadoAppThemedonde se cambiará el texto predeterminado, su tamaño, familia, sombra, etc. Comencemos con la creación de una aplicación de Android simple según los siguientes pasos:

Paso Descripción
1 Utilizará Eclipse IDE para crear una aplicación de Android y nombrarla ThemeDemo en un paquete com.example.themedemo como se explica en el capítulo Ejemplo de Hello World .
2 Modifique el archivo src / MainActivity.java para agregar detectores de eventos de clic y controladores para los dos botones definidos.
3 Defina su estilo en un archivo de estilo global res/values/style.xml para definir atributos personalizados para un botón y cambiar el tema predeterminado de la aplicación para jugar con el texto.
4 Modifique el contenido detallado del archivo res / layout / activity_main.xml para incluir un conjunto de controles de interfaz de usuario de Android y hacer uso del estilo definido.
5 Defina las constantes requeridas en el archivo res / values ​​/ strings.xml
6 Ejecute la aplicación para lanzar el emulador de Android y verifique el resultado de los cambios realizados en la aplicación.

A continuación se muestra el contenido del archivo de actividad principal modificado src/com.example.themedemo/MainActivity.java. Este archivo puede incluir cada uno de los métodos fundamentales del ciclo de vida.

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

A continuación se mostrará el contenido de res/values/style.xml archivo que tendrá estilo adicional CustomButtonStyle definido -

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

A continuación se mostrará el contenido de res/layout/activity_main.xml archivo -

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

A continuación se mostrará el contenido de res/values/strings.xml para definir dos nuevas 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>

A continuación se muestra el contenido predeterminado de AndroidManifest.xml. Aquí no necesitamos cambiar nada porque no modificamos el nombre del tema. Pero si define un tema nuevo o hereda un nombre predeterminado con un nombre diferente, tendrá que reemplazarAppTheme nombre con el nuevo nombre de ellos.

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

Intentemos ejecutar tu ThemeDemosolicitud. Supongo que habías creado tuAVDmientras realiza la configuración del entorno. Para ejecutar la aplicación desde Eclipse, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar de la barra de herramientas. Eclipse instala la aplicación en su AVD y la inicia y si todo está bien con su configuración y aplicación, se mostrará la siguiente ventana del emulador: