Resultados 1 al 2 de 2


[GUÍA] Hacerse una pestaña personalizada en leak 4.2.2 - Beta - Resvisar cuando oficial


Estás en el tema [GUÍA] Hacerse una pestaña personalizada en leak 4.2.2 - Beta - Resvisar cuando oficial dentro del subforo Tutoriales - Samsung Galaxy S III en Esp-Desarrolladores. Bueno, yo estas cosas las estoy dejando por aquí en personalización, pero no estoy seguro que tengan que ir aquí..en fin.. Os dejo como me hice el tab, entre otras cosas para que no se me olvide y por si alguno que estéis trasteando lo queréis probar. Es sencillo. En la 4.2.2 parece que nos van a poner los tabs que aparecen en el S4. Vamos a trabajar en SecSettings. Si alguno quiere un apktool preparado para api 17 (4.2+) os lo podéis descargar desde este enlace (todavía no lo tengo...



Este tema tuvo 1377 Visitas y 1 Respuestas

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

  1. #1
    Fecha de ingreso
     Mar-2013
    Mensajes
     12,594
    Gracias Enviadas
    8,662
    Agradecido 22,992 Veces en 7,864 Posts


    Bueno, yo estas cosas las estoy dejando por aquí en personalización, pero no estoy seguro que tengan que ir aquí..en fin..

    Os dejo como me hice el tab, entre otras cosas para que no se me olvide y por si alguno que estéis trasteando lo queréis probar. Es sencillo.

    En la 4.2.2 parece que nos van a poner los tabs que aparecen en el S4. Vamos a trabajar en SecSettings. Si alguno quiere un apktool preparado para api 17 (4.2+) os lo podéis descargar desde este enlace (todavía no lo tengo montado del todo pero os valdrá).

    Vamos a trabajar con SecSettings.apk

    1.- cargamos framework-res y twframewor-res de la 4.2.2 leak como habitualmente (apktool.bat if framewor-res.apk y apktool.bat if twframewor-res.apk ) y arrancamos el apktool (script)

    2.- Para hacer el tab (pestaña), vamos a necesitar tres cosas, antes de modificar el smali que la crea.

    - el public id del icono del tab.
    - el public id del texto del tab.
    - El public id de lo que queremos que se cargue al pusar sobre el tab

    vamos a ello.

    3.- Creamos los elementos (vosotros os personalizáis los nombres a vuestro gusto)

    3.1 - Icono del tab

    En res->drawables, nos podemos crear un xml, que yo he llamado ic_tab_grx.xml y que contiene lo siguiente

    Código:
    <?xml version="1.0" encoding="utf-8"?>
    <selector
      xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@drawable/grx_ajustes_rom" />
        <item android:state_selected="true" android:drawable="@drawable/grx_ajustes_rom" />
        <item android:state_focused="true" android:drawable="@drawable/grx_ajustes_rom" />
        <item android:drawable="@drawable/grx_ajustes_rom_dim" />
    </selector>
    Por tanto debemos crear dos pngs en res-> drawable o res ->drawable-xhdpi (yo los dejé aquí, pero me gusta más dejarlo en drawable, lo hice muy rápido).

    - grx_ajustes_rom.png (cuando está activo) (nota, poned un tamaño moderado, 40 x 40 o lo que sea no revisé bien la maquetación
    - grx_ajustes_rom_dim (cuando no está activa).


    3.2 - Texto del tab.

    Nos vamos a values -> strings y al final añadimos

    <string name="grx_titulo_tab">Más</string> o lo que queráis. Ya sabéis, podéis ponerlo aquí en inglés y luego en values-es en español, pero el id que necesitamos será el de values. En mi caso los que ya me conocéis sabéis que quitaré los textos vía styles.., je je..


    3.3 - Xml a cargar al pulsar sobre la pestaña

    Nos vamos a res - xml y creamos un xml. Yo le he llamado grx_headers.xml para seguir un poco la lógica de nombres que trae.

    Yo empezaría por uno en blanco

    Código:
    <?xml version="1.0" encoding="utf-8"?>
    <preference-headers
      xmlns:android="http://schemas.android.com/apk/res/android">
    </preference-headers>
    Pero podéis poner algo ya si queréis

    Código:
    <?xml version="1.0" encoding="utf-8"?>
    <preference-headers
      xmlns:android="http://schemas.android.com/apk/res/android">
        <header android:icon="@drawable/ic_settings_display" android:id="@id/display_settings" android:title="@string/display_settings" android:fragment="com.android.settings.DisplaySettings" />
        <header android:icon="@drawable/ic_settings_torchlight" android:id="@id/torchlight_settings" android:title="@string/torchlight_settings" android:fragment="com.android.settings.torchlight.TorchlightSettings" />
        <header android:icon="@drawable/ic_settings_language" android:id="@id/language_settings" android:title="@string/language_settings" android:fragment="com.android.settings.inputmethod.InputMethodAndLanguageSettings" />
    </preference-headers>

    En este caso he usado lo que había por ahí en otros headers, pero esto luego lo podéis personalizar modificando los icon, ids, title y android:fragment . Esto sólo es una prueba. También podéis meter intent como os puse en la referencia que os puse cuando expliqué cómo me hago las pantallas personalizadas.
    También podéis meter aquí un enlace a vuestra pantalla personalizada tal y como os puse en ese tuto.


    3.4.- Compilamos y montamos la apk de trabajo final. Por montar me refiero a que yo para no tener problemas con las firmas y demás y evitar que se rompan al tematizar, en este punto, abro (que no descomprimo) con winrar tanto el secsettings origina como el unsignedsecsettings y paso arrastrando desde el winrar con unsigned al winrar con signed lo que he modificado, en este caso el resources, los pngs de drawable-xhdpi, el xml nuevo de drawable y el xml nuevo de res-xml.

    3.5. A partir de ahora trabajamos con esta apk bien montada. CAda uno que siga su método.

    4.- Descompilamos la apk nueva

    5.- Nos vamos a res -> values -> public.xml y buscamos los tres ids, el del icono (ic_tab_grx), el del texto (grx_titulo_tab) y el del xml que cargaremos (grx_headers).

    6.- Ahora nos vamos a smali\com\android\settings y abrimos SettingsTabActivity.smali

    7.- En el bloque # instance fields añadimos al final lo siguiente

    Código:
    .field mGrxTabView:Landroid/view/View;
    8.- En el método .method protected onCreate(Landroid/os/BundleV

    buscamos lo siguiente (es una referencia, no añadimos código todavía)

    Código:
    invoke-virtual {v0, v3}, Landroid/app/ActionBar;->addTab(Landroid/app/ActionBar$Tab;)V
    Hay cuatro dentro de ese método correspondientes a cada tab.
    Esto es para situaros, suponiendo que queramos ponerla el cuarto lugar, localizamos esto


    y justo después de
    Código:
    iget-object v4, p0, Lcom/android/settings/SettingsTabActivity;->mAccountTabView:Landroid/view/View;
    Pegamos el siguiente código (Nota, revisar depurar receivers - listeners)




    Donde véis

    - const v4, 0x7f020571 sustituimos por nuestro id de imágen de la pestaña
    - const v4, 0x7f0902be ponemos el id del texto de nuestra pestaña. (como observáis en las imágenes, yo dejé el mismo texto que la pestaña


    Con esto ya conseguimos que se pinte la pestaña ahora vamos a que se nos muestre lo que hemos definido al pulsar sobre ella.

    9.- Localizamos el método .method public onBuildHeaders(Ljava/util/ListV


    Lo que vamos a hacer ahora es provocar que se cargue lo que queramos al pulsar en nuestra nueva pestaña, siguiendo el ejemplo lo puesto en grx_headers.xml. Necesitaremos el id generado del mismo

    Mirad el original



    y ahora mirad el resultante


    Los cambios son los siguientes:

    Tenemos una opción más, por lo que añadimos switch_4 en este bloque

    Código:
        .packed-switch 0x0
            :pswitch_0
            :pswitch_1
            :pswitch_2
            :pswitch_3
            :pswitch_4
        .end packed-switch
    Ahora como el nuevo tab lo hemos situado en cuarta posición según el ejemplo que estamos haciendo, justo después de esto

    Código:
        :pswitch_2
        const v0, 0x7f070008
    
        invoke-virtual {p0, v0, p1}, Lcom/android/settings/SettingsTabActivity;->loadHeadersFromResource(ILjava/util/List;)V
    
        goto :goto_0
    
        .line 458
    tenemos que añadir esto o dejarlo así

    Código:
        :pswitch_3
        const v0, 0x7f0700ad
    
        invoke-virtual {p0, v0, p1}, Lcom/android/settings/SettingsTabActivity;->loadHeadersFromResource(ILjava/util/List;)V
    
        goto :goto_0
    donde 0x7f0700ad es el id generado para grx_headers.xml.

    y ahora tenemos que arreglar lo que había original correspondiente a la cuarta pestaña, tan simple como poner el _switch_4 y dejarlo así

    Código:
        :pswitch_4
        const v0, 0x7f070049
    
        invoke-virtual {p0, v0, p1}, Lcom/android/settings/SettingsTabActivity;->loadHeadersFromResource(ILjava/util/List;)V
    
        goto :goto_0

    Listo, compilamos, enchufamos y ya la debemos tener. No hay que preocuparse del scroll, ya viene incorporado en esta leak, veremos si en la oficial se mantiene todo esto.

    Una vez hecho esto, ya solo trabajamos sobre grx_headers.xml.

    En las imágenes veréis (si sois capaces que no veas si quedan pequeñas en este foro) que tengo también hecho en esta leak lo que os puse sobre pantalla de ajustes personalizadas (http://www.esp-desarrolladores.com/showthread.php?t=488) En vez de settings_headers lo puse en device_headers.xml que es lo que se carga al pulsar sobre la pestaña Dispositivo. Pero el código smali que me hice para ese caso funcioan perfectamente..por ahora, veremos en la oficial


    Pues nada, espero que os guste.

    Screenshot_2013-05-21-15-08-00.jpg
    Screenshot_2013-05-21-15-07-41.jpg
    Screenshot_2013-05-21-15-07-45.jpg
    Screenshot_2013-05-21-15-07-54.jpg

    Última edición por Grouxho; 22-05-13 a las 10:18


  2. Los siguientes 7 Usuarios dieron las gracias a Grouxho Por su Mensaje :

    adri9214 (22-05-13),axl33 (09-10-13),Balaperdida (30-05-13),Cowboyjoe (30-05-13),Hasek (22-05-13),Jeshuuu (04-09-13),xztxkratos (22-05-13)




  3. #2
    Fecha de ingreso
     Mar-2013
    Ubicación
     Barcelona
    Mensajes
     5
    Versión de ROM
     Prefiero el Bourbon
    Modelo de smartphone
     S3
    Tu operador
     yoigo
    Gracias Enviadas
    3
    Agradecido 4 Veces en 2 Posts


    Uff socio acabo de empezar con todo esto de la tematizacion y ando echo un lio... de todas formas gracias porel tuto man..

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  


ESP-Desarrolladores

    ESP-Desarrolladores, es una comunidad de desarrollo Android en habla hispana, Aquí encontrarás lo último en Android, ROMs, Kernel, APPs, etc... Pasa y Ponte Cómodo!!! estás en tu casa ;)

Síguenos en

Twitter Facebook Google+ espdesarrolladores - Andyou Youtube RSS Feed