Friday, June 6, 2014

Exportar base de datos heroku e importarla a base de datos local


Sacado del link oficial de heroku.

Exportar base de datos de heroku, primero la capturamos en un backup (deben agregar el addon pgbackups de heroku) y luego la pasamos a un archivo, en este caso lo llamaremos latest.dump
$ heroku pgbackups:capture
$ curl -o latest.dump `heroku pgbackups:url`
Si al correr la primera linea les aparece que deben eliminar un backup, dado que ya generaron varios, tienen dos opciones:

heroku pgbackups:capture --expire
lo que hace una captura eliminando el backup más viejo u obtener los backups generados y eliminar alguno en particular:

heroku pgbackups
heroku pgbackups:destroy b003

donde b003 en uno de los backups que mostró el primer comando.

Para importar a la base de datos local:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
donde deben remplazar myuser por el usuario de base de datos que tienen, mydb por el nombre de la base de datos donde deseas importar y latest.dump el nombre del archivo que desean importar.



Bookmark and Share

Friday, March 28, 2014

Boostrap Glyphicon y Rails 4

Tratando de usar la versión gratuita de Glyphicon, disponible para bootstrap,  y rails 4 tuve problemas, pero encontrés la solución en stackoverflow.

Aquí la solución:

Se debe agregar el siguiente código a application.css:

@font-face { font-family: 'Glyphicons Halflings'; src: url(asset_path('glyphicons-halflings-regular.eot')); src: url(asset_path('glyphicons-halflings-regular.eot?#iefix')) format('embedded-opentype'), url(asset_path('glyphicons-halflings-regular.woff')) format('woff'), url(asset_path('glyphicons-halflings-regular.ttf')) format('truetype'), url(asset_path('glyphicons-halflings-regular.svg#glyphicons_halflingsregular')) format('svg'); }
y agregar lo siguiente a application.rb
config.assets.paths << "#{Rails}/vendor/assets/fonts"

y listo!

Bookmark and Share

Wednesday, January 29, 2014

Android: Ajustar pantalla cuando aparece el teclado

Android permite ajustar la pantalla cuando se aparece el teclado, existen dos opciones que se pueden resumir en una sola linea:

android:windowSoftInputMode="stateUnchanged|adjustResize"

Esta línea se debe usar en el Manifest.xml dentro de los tags de la actividad donde se desee aplicar. Dependiendo del resultado que se quiera obtener se puede jugar con las opciones.  Además de estas opciones mencionadas existen otras para lograr otros efectos.

Bookmark and Share

Monday, June 3, 2013

Validar el formato de un E-mail en Android

Se puede hacer con el siguiente método:

public static boolean isEmailValid(String email) {
    boolean isValid = false;

    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        isValid = true;
    }
    return isValid;
}

Gracias a la expresión regular indicada arriba, el método devolverá true si el formato es válido y false en caso contrario.

fuente

Bookmark and Share

Thursday, May 30, 2013

Android: Mostrar un mensaje cuando el ListView está vacío

Si se está usando el ListView, existe un método que se llama setEmptyView el cual recibe un view y se muestra cuando la lista está vacía. Aquí un ejemplo:

Primero se debe agregar un View (como un botón o un texto) al Layout de la actividad donde tienen el ListView. Aquí un ejemplo con un texto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
    <TextView
        android:id="@+id/emptyListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:text="@string/emptyList" >
    </TextView>

</LinearLayout>
Es importante que tenga el atributo android:visibility="gone" para que no se muestre cuando la lista si tenga contenido.

Luego en la clase donde utlizan el ListView, deberán llamar al método setEmptyView y entregarle el TextView que creamos en el xml

ListView lv = getListView();
lv.setEmptyView(findViewById(R.id.emptyListView));
o bien

ListView lv = (ListView)findViewById(R.id.myListView);
lv.setEmptyView(findViewById(R.id.emptyListView));


Bookmark and Share

Tuesday, May 28, 2013

Cambiar la zona horaria del servidor Heroku

Es muy fácil cambiar la zona horaria de Heroku:


  1. Deben obtener la zona horaria que quieren configurar de este link. Ahí deben escoger el texto bajo la columna "TZ"
  2. En su consola local, deben correr el comando: heroku config:add TZ=America/Santiago

Y listo, su servidor se reiniciará una vez finalizada la configuración.

Para revisar que el cambio se haya realizado de forma satisfactoria deben iniciar la consola de heroku desde su consola local (heroku run console) y luego escribir el comando Time.now  ahí se les imprimirá la hora.


Bookmark and Share

Tuesday, May 21, 2013

AFNetworking: Leer una respuesta XML en una aplicación para iPhone, con XCode

Con AFNetworking es muy fácil leer respuestas en XML o JSON que entregue un servidor.
Aquí un ejemplo con XML:

Primero deben bajar el AFNetworking a su computador desde el link:

https://github.com/AFNetworking/AFNetworking

Una vez descargada, descomprime la carpeta. Ahora contaras con una carpeta con un nombre similar (o igual) a: AFNetworking-AFNetworking-211cdfc

Ahora anda a XCode, selecciona tu proyecto, anda a Archivo y haz clic en la opción "Agregar archivo a <nombre_de_tu_proyecto>". Ahi busquen la carpeta AFNetworking-AFNetworking-211cdfc, ábranla y seleccionen la carpeta AFNetworking que está adentro.

Ya estás listo para empezar a conectarte con tu servidor.

Para empezar debes agregar los archivos al encabezado:

#import "AFXMLRequestOperation.h"
#import "AFHTTPClient.h"

Luego debes iniciar la comunicación con el servidor y obtener el XML.


        //Supongamos que deseamos enviar el mail y contraseña a nuestro servidor para obtener una respuesta cuando un usuario intenta iniciar sesión.
NSString *email = [self.txtUsername text];
        NSString *contrasena = [self.txtPassword text];
//Crea un NSDictonary con los parámetros
        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                email, @"email",
                                contrasena, @"contrasena",
                                nil];
        
//Indica la url de tu servidor
        NSURL *url = [[NSURL alloc] initWithString:@"http://www.miservidor.com"];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        [httpClient registerHTTPOperationClass:[AFXMLRequestOperation class]];
        [httpClient setDefaultHeader:@"Accept" value:@"application/xml"];
        //Indica donde se debe hacer la petición
NSMutableURLRequest *request1 = [httpClient requestWithMethod:@"POST" path:@"/iniciar_sesion" parameters:params];
        AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
            
            XMLParser.delegate = self;

//Aquí leemos la respuesta del XML
            [XMLParser parse];
        } failure:nil];

//Aquí iniciamos la llamada
        [operation start];

Ahora falta crear las funciones para parsear el archivo XML, esto se puede lograr de diferentes maneras. Aquí muestro una:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    self.currentElement = [elementName copy];
    self.ElementValue = [[NSMutableString alloc] init];
    
//Ejemplo de lectura
    if ([elementName isEqualToString:@"algun-campo"]) {    
       // hacer algo, ejemplo imprimir un mensaje...
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [self.ElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"algun-campo"]){
    //hacer alguna acción, por ejemplo:
    NSLog(self.ElementValue);   
    }
}

Cualquier cosa dejen un comentario!



Bookmark and Share

Configura la tipografía de tu aplicación Android

Android permite configurar la tipografía a gusto del desarrollador. Hay que tener en cuenta que existen tipografías que son pesadas y también algunas que requieren una licencia o permiso para poder utilizarlas.

Primero, parte con crear una carpeta llamada Fonts bajo la Carpeta res.
Agrega la tipografía que deseas usar a esa carpeta, este puede ser .otf o .ttf (puede que existan otros formatos que se puedan utilizar).

Lamentablemente, Android ya no permite configurar la tipografía a través del xml y se debe hacer en tiempo de ejecución y en cada uno de los elementos.

Por ejemplo, para un TextView. Primero, ubica el TextView que deseas configurar:


TextView tv = (TextView) findViewById(R.id.miTV);


Luego configura la tipografía:


Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/algunatipografia.ttf");


Configura la tipografía del TextView:


tv.setTypeface(tf);


Bookmark and Share

Thursday, May 9, 2013

Reiniciar posición de ScrollView en Android

ScrollView incorpora 2 funciones para reinicar la posición en la que se encuentra un ScrollView.

fullscroll(int direction)  recibe un entero que indica la dirección hacia donde realizar el un scroll completo.

scrollTo(int x, int y) recibe la posición x e y a donde se desea mover el scroller.

Por ejemplo si se desea mover hasta el inicio:

ScrollView sv = (ScrollView) findViewById(R.id.tu_scrollview);
sv.scrollTo(0,0);


Bookmark and Share

Thursday, March 28, 2013

Actualizando a Rhodes 3.5.1

Un poco tarde vengo a escribir de esto, pero para aquellos que no saben, hace unos meses atrás salió la versión de Rhodes 3.5.1

Para actualizar la versión en Windows:

gem install rhodes (o gem update rhodes) 

rhodes-setup (o copiar rhobuild.yml desde la gema rhodes vieja) 
cd <a-tu-aplicación-de-rhodes> migrate-rhodes-app

Ahora el instalador RhoStudio para Windows y Mac son parte de RhoElements v2.x


Bookmark and Share

Tuesday, March 26, 2013

Error H10 al hacer deploy en Heroku

Segunda vez que hago el deploy de una aplicación en Heroku y me vuelve a salir el mismo problema:

at=error code=H10 desc="App crashed" method=GET path=/ host=nombre-de-mi-app.herokuapp.com fwd="190.21.126.160" dyno= connect= service= status=503 bytes=

at=error code=H10 desc="App crashed" method=GET path=/favicon.ico host=timepoints.herokuapp.com fwd="190.21.126.51" dyno= connect= service= status=503 bytes=

Intenté las siguientes cosas y mi problema se solucionó:

En stackoverflow sugerían lo siguiente:

heroku run rake db:migrate

pero eso no me solucionó el problema (inicialmente al menos), lo que había que fijarse bien es que el archivo database.yml esté bien configurado para el ambiente de producción.

En particular, lo que tuve que editar fue el nombre del usuario de la base de datos, lo dejé en root y me aseguré que el nombre de la base de datos esté toda en minúsculas y en el formato: nombreapp_production.

Ejemplo:


production:
  adapter: postgresql
  encoding: unicode
  database: nombreapp_production
  pool: 5
  username: root
  password:


y fijarse de cualquier otro error que pueda estar surgiendo de alguna clase que se está subiendo también puede solucionar el problema.


Bookmark and Share

Wednesday, February 20, 2013

Ventana se abre fuera de la pantalla en Windows7

Es muy común que pase que se mueve una ventana y luego el programa abre todas las ventanas fuera de la pantalla y no se puede ver nada.

Para esto Windows tiene una función Mover o Move en todas las ventanas abiertas.


Como acceder a este menú si no puedes ver la ventana? Muy sencillo, debes seleccionar el programa en la barra de tareas y luego presionar Alt + barra espaciadora. Luego presionando la letra M se seleccionará la opción mover y a continuación con el uso de las flechitas puedes posicionar la ventana en la pantalla para verla nuevamente.


Bookmark and Share

Saturday, February 16, 2013

Función Smart Cover iPad, Nexus 7 y Kindle Paperwhite

Nunca indagué sobre los smart covers (funda inteligente) hasta hoy que tuve un "problema" con mi Nexus 7. Inicialmente pensaba que era un lindo nombre para la funda, pero resultó que realmente hay una función "smart" (inteligente).

Resulta que los dispositivos iPad 3, Nexus 7 y Kindle Paperwhite tienen un sensor magnético para que éstos se prendan o apaguen automáticamente cuando se abra o cierre la tapa de la funda (si es que esta es inteligente y tiene un imán por supuesto). Suena bastante cómodo, pero existe un problema el cual aun no tengo bien claro si es problema de la funda o del dispositivo: los aparatos se apagan cuando colocas la tapa por atrás.

El iPad 3 cuenta con una opción dentro de la configuración para deshabilitar esta función, lamentablemente no es el caso del Nexus 7 (hasta donde he averiguado) y tampoco del Kindle Paperwhite (confirmado por la atención al cliente de Amazon)

Soluciones sugeridas para este problema? Sacar el imán de la funda en el área donde está el sensor o colocar un pedazo de acero.

Si tienen más info al respecto escríbanlo en los comentarios!


Bookmark and Share

Thursday, January 10, 2013

Ver archivos HTML en GitHub

Con GitHub además de mantener tu código en un lugar seguro  y crear un ambiente colaborativo puedes usarlo para mostrar páginas HTML y hacer pruebas.

Para esto debes anteponer lo siguiente antes de la URL del archivo HTML en cuestión:

http://htmlpreview.github.com/?

ejemplo:

http://htmlpreview.github.com/?https://github.com/marimaf/CodeTests/blob/master/showHtml.html



Bookmark and Share

Friday, November 9, 2012

"Google Play no acepta archivos APK firmados con el certificado de depuración. Crea un certificado nuevo que sea válido durante al menos 50 años."

He tratado de subir mi primera aplicación de android al market Google Play y me apareció el siguiente error:

"Google Play no acepta archivos APK firmados con el certificado de depuración. Crea un certificado nuevo que sea válido durante al menos 50 años."

Qué es lo que ocurre? El APK debe ser firmado para que no se pueda modificar a menos que se tenga la llave privada con la que se generó la firma. Sin esta firma, los dispositivos Android no querrán instalar una aplicación.
En un principio, cuando se está desarrollando, la aplicación se firma con una llave de debug, que sirve para poder depurarlo y probar la aplicación en tu dispositivo mientras haces pruebas. Para publicarlo en el market, esta firma debe cambiar ya que la firma de debug no es aceptada.

Si utilizan Basic4Android, hay una forma muy sencilla para solucionar este problema. Solo sigan este tutorial.
Pero no es mi caso, yo uso Eclipse. En el sitio de android developers se puede encontrar información al respecto. Aquí lo hay que hacer según android developers:



  • Obtain a suitable private key
  • Compile the application in release mode
  • Sign your application with your private key
  • Align the final APK package


  • Si están haciendo una aplicación nativa pueden utilizar el wizard de exportar de Eclipse el cual realiza todos estos pasos.

    Yo estoy trabajando en una aplicación multi-plataforma utilizando Rhomobile por lo que requiere seguir los pasos descritos, pero es muy fácil:

    Generar una clave privada, se debe usar un keytool. En Windows abrir consola y utilizar el siguiente comando:


    $ keytool -genkey -v -keystore nombre-de-mi-llave.keystore
    -alias nombre_alias -keyalg RSA -keysize 2048 -validity 10000

    Donde deben reemplazar "nombre-de-mi-llave" y "nombre_alias" por el que gusten. Cuando corran ese comando se les pedirá ciertos datos, incluida una clave la cual deben guardar muy bien ya que si alguien tiene acceso a ella y a la llave pueden manipular su aplicación.
    Si quieren más detalles sobre el comando lean aquí

    Una vez generada la llave. Abran su proyecto y vayan al build.yml y bajo android agreguen lo siguiente bajo production, de tal manera que se vea así:


    android:
      android_title: 0
      version: 2.3.3
      emulator: rhomobile
      production:
        certificate: E:/nombre-de-mi-llave
        password: "clave_de_la_llave"
        alias: "nombre_alias"


    ahora abran la consola de nuevo, vayan a la carpeta de su proyecto y corran el comando:

    rake device:android:production

    de manera que compile nuevamente el proyecto, pero esta vez utilizando la llave indicada para firmar el apk. Cuando corran esto se les pedirá que completen nuevamente los campos que fueron solicitados cuando generaron la llave. Terminado de correr el comando podrán navegar a la carpeta de su aplicación/bin/target y encontrarán el APK firmado y listo para ser subido a Google Play :)

    Bookmark and Share

    Monday, October 29, 2012

    Barra de búsqueda simple - Ruby on Rails


    Es muy sencillo agregar una barra de búsqueda en una aplicación de rails. Aquí un pequeño tutorial:

    1. Crear un form para enviar la solicitud con la palabra a buscar

    Por ejemplo en su index.html.erb coloquen el siguiente código para obtener un formulario como el de la imagen arriba:


    <%= form_tag({:controller => "products", :action => "index"}, :method => :get) do %>
    
        <%= text_field_tag "searchbox", params[:searchbox] %>
    
        <%= submit_tag "Buscar", :name => nil %>
    
    <% end %>

    Recuerden editar el controlador y la acción a la que ustedes necesitan, éstas debe corresponder a la misma que renderea el index.html.erb donde están colocando el código.

    2. Agregar código que incorpore la búsqueda:

    En el archivo del modelo, en este caso sería product.rb, colocar el siguiente código para filtrar los resultados según los parámetros ingresados en la búsqueda.


    def self.search(search)
    
     if search 
    
        where('title LIKE ?', "%#{search}%")
    
      else
    
        scoped
    
      end
    
    end

    En este caso deseo que mi búsqueda filtre de acuerdo al campo "title", ustedes deben editar eso de acuerdo a sus necesidades.

    3. Por ultimo, realizar la búsqueda/filtrado en el controlador para entregar los resultados a la vista index.html.erb, luego en products_controller.erb


    def index
    
      @products = Product.search(params[:searchbox])
    
        respond_to do |format|
    
          format.html # index.html.erb
    
        end
    
      end
    
    
    y listo, los resultados ahora serán filtrados cuando hagan clic en el botón buscar.

    Aquí algunos libros que les pueden ayudar a programar en Rails:

    Bookmark and Share

    Sunday, October 21, 2012

    Utilizar una Roku en Chile

    Como comenté en el post anterior, la Roku es una cajita muy poderosa a bajo precio, pero tiene la desventaja que está hecha para ser utilizada en Estados Unidos. Pero como (casi) todo, tiene una forma de funciona fuera de ese país.

    En pocas palabras, esto es lo que se debe hacer:

    1. Engañar la IP de la Roku
    2. Crear una cuenta de Roku
    3. Conseguir/comprar contenido para ver a través de la Roku.
    Detalles de los pasos a seguir:

    1. Para engañar la IP de la Roku hay que contratar un servicio que lo haga. Existen varios sistemas pagados y otros gratis. Hay que te tener cuidado cual contratar ya que podrían ver todos los datos que transfieres por internet incluyendo claves. En particular, el que más me convenció a mi fue Hide My Ass (https://hidemyass.com/vpn/). Con planes que van desde $11.52usd mensuales a $78.66usd anuales ($6.55usd mensual). Al contratar HMA, bajas un programita y con las credenciales que te pasan puedes engañar la IP de donde te conectas, le indicas un lugar de donde te deseas conectar y listo. El único problema es que ese programita sirve para Windows, Mac o Linux, pero qué hacer con la Roku? Para esto la nueva IP debe venir desde el router de donde se conecta la Roku.  HMA tiene sugerencias para lograrlo, desde sugerencias de routers hasta tutoriales para modificar el firmware de éstos y conectarse al VPN.
    Personalmente, compré un router adicional y traté de flashearlo (instalarle el nuevo firmware DD-WRT que es el que se necesita), pero no tuve mucho éxito. Terminé encontrando un sitio, FlashRouters, en estados unidos que te los venden flasheados y listos para conectarlos con HMA, sólo hay que ingresar las credenciales. Incluso si quieres, les puedes dar las credenciales a ellos y te lo dejan listo llegar y enchufar. 
    Si tienen internet movistar y están conectados a través de PPPoE, deben tener 2 routers. El router flasheado lo deben conectar al segundo router (un router que probablemente ya usaban y tenían en su casa) y ese router va conectado al modem. Si conectan el router flasheado directamente al modem no podrán tener internet, ya que no pueden conectarse al VPN y al PPPoE al mismo tiempo.

    2. Para poder habilitar los canales de interés en la Roku: Amazon, Netflix, Crackle, etc. Es necesario tener una tarjeta de crédito americana. Pero qué pasa si no tienen? Se puede arreglar. Hablen con el servicio al cliente de Roku, conectados a través de la VPN de estados unidos (cuando hablé con ellos revisaron la IP de donde estaba "comunicándome").  Por lo que al servicio al cliente les deben decir que no cuentan con una tarjeta americana, pero se encuentran en estado unidos y desean utilizar la Roku. Para ese caso ellos habilitarán una cuenta sin tarjeta y te advertirán que no podrás comprar canales ni cosas on-demand. Les dices que estás al tanto y listo. Los canales mencionados anteriormente no necesitan ser comprados (Ver punto 3).


    3. Existe contenido para ver en la Roku que requiere que tengan una suscripción de antemano.

    • Amazon Prime: Pagando $79usd anuales obtienes streaming ilimitado de ciertas películas habilitadas por Amazon. La biblioteca de películas habilitadas no es menor, pero de todas formas si quieren ver lo estrenos también lo pueden pagando ya que será cobrada la tarjeta de crédito que tengan en Amazon y no en Roku.
    • Netflix: Si tienen el Netflix chileno contratado con eso basta. Al detectar la IP americana accederán a la biblioteca de películas de Estados Unidos (mucho más surtida que la Chilena)
    • Crackle: Acceso a películas gratis.
    • Hulu: Ideal para ver series, pero sólo podrán tener acceso a este canal si contratan Hulu Plus, el cual requiere una tarjeta de crédito americana para suscribirse. Se pueden comprar tarjetas pre pagadas en estados unidos.


    Bookmark and Share

    Tuesday, October 9, 2012

    Roku - televisión por internet


    La roku es una pequeña cajita que sirve para ver televisión por internet. La gracia es que la conectes a tu pantalla para ver canales de streaming, y se conecta a internet de manera inalámbrica, como lo hace apple TV, pero significativamente más económico.

    Personalmente me compré el Roku 2 XD Streaming Player 1080p, pero existen varios modelos de los cuales puedes elegir según tu bolsillo y preferencias. El más económico comienza en 50USD en amazon.

    Mi roku 2 incluye un control remoto con botones de acceso directo a Netflix, Pandora y Crackle. Es bastante agradable. Me gusta que utilice poco espacio y es bastante rápido como software para moverse entre canales. Además de los canales ya mencionados, es posible conectarse a Amazon Prime, Hulu Plus y muchos más.

    Otra de las características de la Roku 2 XD es que puede mostrar películas en HD 1080p, a diferencia de la Roku HD.

    La letra chica de la cajita:

    *Para funcionar necesita estar en estados unidos
    *Tener una tarjeta de crédito de estados unidos (para poder comprar películas que no se puedan ver gratis)

    Pero no se decepcionen, existe una solución para estos requisitos. Les comentaré como arreglarlo más adelante.

    Bookmark and Share

    Wednesday, September 12, 2012

    Sliding Drawer en Android

    Sliding Drawer o cajón deslizable (?)

    Lo que hace el Sliding Drawer es esconder contenido de un usuario dejando sólo una lengüeta visible, así el usuario puede deslizar la lengüeta para ver el contenido.

    Como bien dice en http://developer.android.com este "cajón" se puede utilizar de manera vertical u horizontal. El xml está compuesto por dos hijos, uno referente al la lengüeta y otro al contenido de éste.

    La plantilla que http://developer.android.com utiliza un imageView para la lengüeta, yo utilicé en este caso un botón, de manera de no tener que lidiar con imagenes. Pero lo pueden cambiar a un imageView si desean. A su vez, cambié el tipo del contenido de GridView a un simple TextView para agregar texto.

    Primero, necesitan uno (o dos) templates para el fondo de la lengüeta y del contenido del cajón. En este caso yo use una plantilla de un fondo azul el cual debe colocarse en la carpeta drawable en un archivo llamado blue.xml por ejemplo.

    El contenido de éste archivo es el siguiente:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" >
            <shape>
                <solid
                    android:color="#449def" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
        <item>
            <shape>
                <gradient
                    android:startColor="#449def"
                    android:endColor="#2f6699"
                    android:angle="270" />
                <stroke
                    android:width="1dp"
                    android:color="#2f6699" />
                <corners
                    android:radius="4dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>
    La lengüeta es lo que tiene el texto "ayuda". Los otros botones que ven son del  proyecto en el que estoy trabajando, no tienen nada que ver con el sliding drawer

    Luego el xml del sliding drawer lo deben colocar dentro de un relativeLayout (o un FrameLayout) (en el xml del layout donde quieren que se vea)

    Así quedó mi sliding drawer:

     <SlidingDrawer
         android:id="@+id/drawer"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:handle="@+id/handle"
         android:content="@+id/content">
         <Button
             android:id="@id/handle"
             android:layout_width="88dip"
             android:layout_height="44dip"
             android:background="@drawable/blue"
             android:text="ayuda"
             android:textColor="#ffffff"/>
    
         <TextView
             android:id="@id/content"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:background="@drawable/blue"
             android:textColor="#ffffff"
             android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut condimentum commodo purus sit amet cursus. Pellentesque euismod nulla et mauris porttitor sit amet consectetur quam euismod. Proin augue ligula, commodo sit amet pellentesque at, bibendum in augue. Vestibulum a metus sit amet lacus porta molestie. Curabitur porta laoreet ipsum quis tincidunt. Nulla facilisi. Quisque dictum mollis ante id blandit. Nam in elit sit amet eros varius posuere id id dui. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis et nibh pretium nisl semper porta elementum sed justo. Sed et enim arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ac nunc eu est adipiscing condimentum id nec nisl. Proin massa erat, ultrices at ullamcorper in, consectetur nec tortor. Sed sed erat ante. Morbi eu nunc mauris." />
         </SlidingDrawer>
    
    

    Bookmark and Share

    Friday, September 7, 2012

    Verificar que una URL es de una imagen en Java/Android

    Si es necesario verificar que una URL es una enlace a una image, bastan 3 líneas de código para hacerlo:


    URLConnection connection = new URL("http://foo.bar/w23afv").openConnection();
    String contentType = connection.getHeaderField("Content-Type");
    boolean image = contentType.startsWith("image/");


    Lo que hace es ver si el encabezado del contenido de la página donde te lleva la url comienza con image/.

    Solución sacada de stackoverflow

    Bookmark and Share
    Related Posts Plugin for WordPress, Blogger...