jueves, 30 de agosto de 2012

Activity Transparent

En algunos de nuestros proyectos podemos tener la necesidad de sobreponer una activity/dialogo/otros transparente. A continuación tenemos un ejemplo de cómo realizar dicha acción:

Como podemos ver tenemos 2 Activities. La primera de ellas (VisibleActivity) es la que estará en la parte de atrás de la Activity Transparente. La otra Activity (TransparentActivity) será la que estará situada sobrepuesta a la VisibleActivity.

La parte importante es añadir en el Manifest la línea de código que podemos ver destacada en rojo. En ella se puede ver com indicamos a la Activity que tendrá el tema transparente.

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.blogtransaprentactivity"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".VisibleActivity"
            android:label="@string/title_activity_visible" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".TransparentActivity"
            android:label="@string/title_activity_visible"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    </application>
</manifest>

layout_visible.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="I'm below"/>
</RelativeLayout>

VisibleActivity.java
package com.example.blogtransaprentactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;

public class VisibleActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_visible);

startActivity(new Intent(this, TransparentActivity.class));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_visible, menu);
return true;
}
}

layout_transparent.xml
<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:background="#80000000" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="60dip"
        android:padding="@dimen/padding_medium"
        android:text="I'm above"
        tools:context=".VisibleActivity" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Finish Activity" />

</RelativeLayout>

TransparentActivity.java
package com.example.blogtransaprentactivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class TransparentActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transparent);

((Button) findViewById(R.id.button))
.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
finish();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_visible, menu);
return true;
}
}

La imagen que podemos ver a continuación nos muestra la Activity transparente encima. Si pulsamos al botón de abajo desaparece y podemos ver la segunda imagen de forma nítida.



 It works!

Roger Sala,

jueves, 9 de agosto de 2012

Subrayar Texto

En ciertas ocasiones nuestra aplicación requiere de un resaltado de texto. En ese caso, podemos optar en subrayar ese texto, ponerlo en negrita, cursiva, etc. Si lo que deseamos es mostrarlo subrayado lo podemos hacer mediante la siguiente opción:

TextView textView = (TextView) findViewById(R.id.textview);
SpannableString myString  = new SpannableString("Este String esta subrayado");
myString.setSpan(new UnderlineSpan(), 0, myString.length(), 0);
textView.setText(myString);

Simple pero...It works!

Roger Sala,

domingo, 5 de agosto de 2012

Base de Datos: SharedPreferences

Android nos ofrece en su sistema de base de datos el denominado como SharedPreferences. Este sistema nos permite almacenar de forma privada e independiente para cada aplicación, datos simples (String, int, boolean, long y float) en formato clave valor. Para ello tenemos 2 tipos de operaciones: lectura o escritura.

Ejemplo de lectura:

//Creamos una instancia SharedPreferences
SharedPreferences preferences = getSharedPreferences("MY_PREF_NAME", Context.MODE_PRIVATE);
/*Recuperamos un valor SharedPreferences 
DEFAULT_VALUE  --> Valor que será asignado a la variable en caso que no haya ningún valor almacenado en el campo NAME_PREFERENCE_STORAGE.*/
String myValue = preferences.getString("NAME_PREFERENCE_STORAGE", "DEFAULT_VALUE");


Ejemplo de escritura:

//Creamos una instancia SharedPreferences
SharedPreferences preferences = getSharedPreferences("MY_PREF_NAME", Context.MODE_PRIVATE);
//Creamos el Editor de preferencias
SharedPreferences.Editor editor = preferences.edit();
//Añadimos/Modificamos un nuevo campo
editor.putString("NAME_PREFERENCE_STORAGE", value_to_save);
//Confirmamos el cambio/creación. Si no hacemos este último paso nada de lo que hemos hecho será guardado
editor.commit();


Notad, que para invocar el método getSharedPreferences, no hemos usado ningún Context, ni nada por estilo. Esto es debido a qué:

  • Si estamos en una Activity, MapActivity...cualquier objeto que tenga un Context no hace falta añadirlo ya que se invoca por defecto.
  • Si estamos fuera del alcance de un Context, por ejemplo, en una clase simple de Java, como podría ser MyUtils.java, hay que pasar el contexto a esa clase/función e invocar las preferencias a partir de la variable Context. Algo así:
          public static String getSharedPreferences (Context context){
                   SharedPreferences preferences = context.getSharedPreferences("MY_PREF_NAME", Context.MODE_PRIVATE);
                   return preferences.getString("NAME_PREFERENCE_STORAGE", "DEFAULT_VALUE");
         }

It works!

Roger Sala,


miércoles, 1 de agosto de 2012

Java: String a Capital letter

En algunas ocasiones podemos necesitar que un String que está en mayúsculas o minúsculas, se muestre con la primera letra en mayúscula. Pues bien aquí les dejo la función que realiza dicha acción:


public static String capitalize(String s){
      if(s.length()==) return s;
      return s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase();
}

It works!


Roger Sala,