Diferencia entre revisiones de «PDM UD1 Bibliotecas de compatibilidade»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 8 ediciones intermedias del mismo usuario)
Línea 4: Línea 4:
  
  
 +
* A partires da versión Android 9.0 (API 28) aparece outra forma de implementar ditas bibliotecas, denominada 'artifacts' e que se atopa dentro do espazo de nome '''androidx'''.
 +
 +
<br />
 +
==Versión actual==
 +
 +
:* Todas as bibliotecas de compatibilidade están aloxadas nun paquete que comeza polo nome '''androidx'''.
 +
:* A diferenza das bibliotecas de compatibilidade empregadas anteriormente, éstas se manteñen e actualizan por separado e non é necesario actualizar todo o S.O. como pasaba antes coas bibliotecas de compatibilidade amdroid.compact.
 +
 +
 +
<br />
 +
===Como empregar a novo sistema de bibliotecas de compatibilidade===
 +
 +
<gallery caption="Empregando androidx" widths="350" heights="300px" perrow="2">
 +
Image:PDM_Artifacts_1.jpg| Cando creamos un novo proxecto debemos marcar a opción '''use androidx.*.artifacts'''. Para que isto aparece debemos ter a lo menos a API 28 ou posterior instalada.
 +
Image:PDM_Artifacts_2.jpg| Ao facelo, no arquivo '''gradle.properties''' aparecerán dúas propiedades có valor a true (isto teríamos que facelo manualmente se non configuramos o proxecto dende o inicio para facer uso destas bibliotecas): android.useAndroidX e android.enableJetifier.
 +
Image:PDM_Artifacts_7.jpg| Tamén debe engadirse un repositorio no arquivo '''build.gradle (a nivel de Proxecto)''' có nome <u>google()</u> (isto teríamos que facelo manualmente se non configuramos o proxecto dende o inicio para facer uso destas bibliotecas)
 +
</gallery>
 +
 +
 +
* Podedes consultar [https://developer.android.com/jetpack/androidx/versions?hl=es-419#version-table neste enlace] a nomenclatura das versións empregadas e o que significa cada número.
 +
 +
<br />
 +
===Exemplo de uso===
 +
 +
* Podedes atopar [https://developer.android.com/jetpack/androidx/versions?hl=es-419 neste enlace] a lista de bibliotecas coas versións actuais que se atopan dentro do espazo de nomes androidx.
 +
: Para engadir un novo recurso temos que editar o arquivo '''build.gradle''' a nivel de Módulo e na sección de 'dependences' debemos empregar a orde '''implementation''':
 +
[[Imagen:PDM_Artifacts_3.jpg|400px|center]]
 +
 +
: Como vemos, xa por defecto fai uso de dúas bibliotecas, unha para colocar os elementos gráficos nas activities (un tipo de layout denominado ConstraintLayout) e a librería appcompat, que entre outros elementos incorpora o ToolBar.
 +
 +
 +
* Imaxinemos que no noso proxecto queremos empregar o widget (control gráfico) [https://wiki.cifprodolfoucha.es/index.php?title=PDM_RecyclerView_e_CardView CARDVIEW].
 +
 +
 +
<gallery caption="Exemplo de uso empregando biblioteca androidx" widths="350" heights="300px" perrow="2">
 +
Image:PDM_Artifacts_4.jpg| Imos o deseño gráfica da activity. Podemos ver como sito control no se atopa no proxecto e que é necesario descargalo. O arrastramos ao layout.
 +
Image:PDM_Artifacts_5.jpg| Ao facelo se nos indica que é necesario empregar a librería androidx.cardview. Prememos o botón OK e empeza a facer unha sincronización Gradle descargando a librería. Isto é debido a que o que estar a facer realmente é engadir unha liña nova ao arquivo build.gradle.
 +
Image:PDM_Artifacts_6.jpg| Podemos comprobar como está engadida a liña implementation coa nova librería.
 +
Image:PDM_Artifacts_8.jpg| Imaxinemos que queremos engadir unha librería ao noso proxecto que nos permite imprimir fotos e documentos. Miramos na lista e vemos que se chama print e que a versión estable é a 1.0.0.
 +
Image:PDM_Artifacts_9.jpg| Se prememos no enlace aparece a dependencia que temos que engadir.
 +
Image:PDM_Artifacts_10.jpg| Escribimos a liña 'implementation' coa librería que queiramos e premer o enlace Sync Now.
 +
</gallery>
 +
 +
 +
 +
 +
<br />
 +
 +
==Versión antiga==
 +
 +
* As librerías empezan có nome: com.android.support
 +
: Soamente se actualizarán ata a versión 28, a partires de entón soamente se dará soporte ás biblitecas do espazo de nome '''androidx'''.
  
 
* Podedes consultar as melloras a nivel xeral que ofrecen ditas bibliotecas [https://developer.android.com/topic/libraries/support-library/?hl=es-419 neste enlace].
 
* Podedes consultar as melloras a nivel xeral que ofrecen ditas bibliotecas [https://developer.android.com/topic/libraries/support-library/?hl=es-419 neste enlace].
  
* Podedes consultar as funcións que incorporan cada unha das bibliotecas de compatibilidade [https://developer.android.com/topic/libraries/support-library/features?hl=es-419 neste enlace].
+
* Podedes consultar as funcións que incorporan cada unha das bibliotecas de compatibilidade [https://developer.android.com/topic/libraries/support-library/packages?hl=es-419 neste enlace].
  
  
Línea 15: Línea 67:
  
 
<br />
 
<br />
=Exemplo de uso=
+
 
 +
===Exemplo de uso===
  
 
* Un exemplo de uso sería o uso do ActionBar:
 
* Un exemplo de uso sería o uso do ActionBar:
Línea 24: Línea 77:
  
 
* Dende a versión 3.0 (API 11) todas as activity´s poden levar unha ActionBar (de feito ven no theme por defecto). Pero a medida que foron xurdindo novas versións da API, engadíronse novas funcionalidades.
 
* Dende a versión 3.0 (API 11) todas as activity´s poden levar unha ActionBar (de feito ven no theme por defecto). Pero a medida que foron xurdindo novas versións da API, engadíronse novas funcionalidades.
: Por exemplo, a partires da versión API 21 (Android 5) engadíronse novas opcións para modificar o deseño e adaptalo á filosofía do [https://developer.android.com/design/material/?hl=es-419 Material Design].  
+
: Por exemplo, a partires da versión API 21 (Android 5) engadíronse novas opcións para modificar o deseño e adaptalo á filosofía do [https://developer.android.com/design/material/?hl=es-419 Material Design]. De feito a ActionBar pasou a denominarse ToolBar.
: Unha destas propiedades novas é a elevación, que ven ser un efecto como se o compoñente estivera colocado 'por enriba' doutro. No caso da barra de acción (a partires de Android 5 denomínase '''App Bar''') dito método é [https://developer.android.com/reference/android/app/ActionBar.html#setElevation(float) setElevation] e a guía de Material Design indica que debe estar a 4dp.
+
: Unha destas propiedades novas é a elevación, que ven ser un efecto como se o compoñente estivera colocado 'por enriba' doutro. No caso da barra de acción (Action Bar) que a partires de Android 5 denomínase '''Tool Bar''' ('''App Bar''' está formada por Tool Bar, Status Bar e Tab Bar) dito método é [https://developer.android.com/reference/android/app/ActionBar.html#setElevation(float) setElevation] e a guía de Material Design indica que debe estar a 4dp.
  
  
  
* Se creamos un novo proxecto cun target_SDK por enriba do 21 e un min_SDK tamén por enriba do 21, poderemos facer uso de dito método:
+
* Se creamos un novo proxecto cun target_SDK a partires da API 21 e un min_SDK tamén a partires do 21, poderemos facer uso de dito método:
 
<gallery caption="Proxecto creado cunha API 28" widths="350" heights="300px" perrow="2">
 
<gallery caption="Proxecto creado cunha API 28" widths="350" heights="300px" perrow="2">
 
Image:PDM_Biblioteca_compat_2.jpg| Proxecto compilado coa API 28
 
Image:PDM_Biblioteca_compat_2.jpg| Proxecto compilado coa API 28
Image:PDM_Biblioteca_compat_3.jpg| MinSDK e TargetSDK coa API 28
+
Image:PDM_Biblioteca_compat_3.jpg| MinSDK 21 (na imaxe aparece 28, pero se pode poñer 21) e TargetSDK coa API 28
 
Image:PDM_Biblioteca_compat_4.jpg| Podemos comprobar como podemos facer uso do método '''setElevetion'''.
 
Image:PDM_Biblioteca_compat_4.jpg| Podemos comprobar como podemos facer uso do método '''setElevetion'''.
 
Image:PDM_Biblioteca_compat_5.jpg| Resultado da execución.
 
Image:PDM_Biblioteca_compat_5.jpg| Resultado da execución.
 
</gallery>
 
</gallery>
  
 +
 +
<br />
 +
'''Código do Manifiesto:'''
 +
<syntaxhighlight lang="java" line enclose="div" highlight="">
 +
...........
 +
        <activity android:name=".NOME_ACTIVITY"
 +
            android:label="@string/app_name"
 +
            android:theme="@style/AppTheme">
 +
            <intent-filter>
 +
                <action android:name="android.intent.action.MAIN" />
 +
 +
                <category android:name="android.intent.category.LAUNCHER" />
 +
            </intent-filter>
 +
        </activity>
 +
...........
 +
</syntaxhighlight>
  
  
 
<br />
 
<br />
* Agora fagamos un proxecto para unha API 19.
+
'''Código do layout:'''
 +
<syntaxhighlight lang="java" line enclose="div" highlight="7,9">
 +
<?xml version="1.0" encoding="utf-8"?>
 +
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 +
    xmlns:app="http://schemas.android.com/apk/res-auto"
 +
    xmlns:tools="http://schemas.android.com/tools"
 +
    android:layout_width="match_parent"
 +
    android:layout_height="match_parent"
 +
    tools:context=".NOME_DA_ACTIVITY">
 +
 
 +
    <android.widget.Toolbar
 +
        android:id="@+id/toolbar2"
 +
        android:layout_width="match_parent"
 +
        android:layout_height="wrap_content"
 +
        android:layout_marginTop="4dp"
 +
        android:background="?attr/colorPrimary"
 +
        android:minHeight="?attr/actionBarSize"
 +
        android:theme="?attr/actionBarTheme"
 +
        android:title="ToolBar"
 +
        app:layout_constraintEnd_toEndOf="parent"
 +
        app:layout_constraintTop_toTopOf="parent" />
 +
</android.support.constraint.ConstraintLayout>
 +
</syntaxhighlight>
 +
 
 +
: Línea 7: Hai que poñer o nome da vosa activity
 +
: Línea 9: Fixarse como o control Toolbar non é o da biblioteca de compatibilidade.
 +
 
 +
'''Código da Activity:'''
 +
<syntaxhighlight lang="java" line enclose="div" highlight="5">
 +
import android.app.Activity;
 +
import android.os.Bundle;
 +
import android.widget.Toolbar;
 +
 
 +
public class NOME_DA_ACTIVITY extends Activity {
 +
 
 +
    @Override
 +
    protected void onCreate(Bundle savedInstanceState) {
 +
        super.onCreate(savedInstanceState);
 +
        setContentView(R.layout.activity_main221);
 +
 
 +
        Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar2);
 +
 
 +
        float scale = getResources().getDisplayMetrics().density;
 +
        int pix = (int)(4*scale+0.5f);
 +
 
 +
        myToolbar.setElevation(pix);
 +
    }
 +
}
 +
 
 +
</syntaxhighlight>
 +
: Línea 5: Hai que poñer o nome da vosa activity
 +
 
 +
 
 +
 
 +
<br />
 +
* Agora cambiamos o MinSDK para API 19.
 +
: Na API 19 non existía o ToolBar. O equivalente denomábase ActionBar, polo tanto teredes un erro na código da Activity:
 +
[[Imagen:PDM_Biblioteca_compat_5b.jpg|400px|center]]
 +
 
 +
 
 +
 
 
<gallery caption="Proxecto creado cunha min_SDK API 19" widths="350" heights="300px" perrow="2">
 
<gallery caption="Proxecto creado cunha min_SDK API 19" widths="350" heights="300px" perrow="2">
 
Image:PDM_Biblioteca_compat_6.jpg| Poñemos un minSDK de API 19.  
 
Image:PDM_Biblioteca_compat_6.jpg| Poñemos un minSDK de API 19.  
Línea 46: Línea 175:
 
Image:PDM_Biblioteca_compat_8.jpg| Como se pode comprobar a biblioteca de compatibilidade appcompact-v7 permite facer uso das funcionalidades da ActionBar (ToolBar a partires da API 21). '''Importante:''' Na imaxe aparece a <u>versión 24.2.0</u>. Este número ten que corresponder coa versión do '''Compile Sdk'''.
 
Image:PDM_Biblioteca_compat_8.jpg| Como se pode comprobar a biblioteca de compatibilidade appcompact-v7 permite facer uso das funcionalidades da ActionBar (ToolBar a partires da API 21). '''Importante:''' Na imaxe aparece a <u>versión 24.2.0</u>. Este número ten que corresponder coa versión do '''Compile Sdk'''.
 
Image:PDM_Biblioteca_compat_9.jpg| As API´s que aparecen no 'Conpile Sdk' son as que están descargadas dende o SDK Manager.
 
Image:PDM_Biblioteca_compat_9.jpg| As API´s que aparecen no 'Conpile Sdk' son as que están descargadas dende o SDK Manager.
Image:PDM_Biblioteca_compat_10.jpg| Para incorporar unha biblioteca de compatibilidade só temos que escribir <b>implementation 'nome_biblioteca:version'</b> no arquivo '''build.gradle''' do módulo. No noso exemplo é: implementation 'com.android.support:appcompat-v7:27.0.0' Non debemos empregar a API 28 xa que cambia o funcionamento.
+
Image:PDM_Biblioteca_compat_10.jpg| Para incorporar unha biblioteca de compatibilidade só temos que escribir <b>implementation 'nome_biblioteca:version'</b> no arquivo '''build.gradle''' do módulo. No noso exemplo é: <b>implementation 'com.android.support:appcompat-v7:27.0.0'</b> Non debemos empregar a API 28 xa que cambia o funcionamento.
Image:PDM_Biblioteca_compat_11.jpg| Agora existen varias formas de engadir un ToolBar-ActionBar. Unha delas é a de poñer un Theme que incorpore unha barra de acción. No noso exemplo: Theme.AppCompat.Light.DarkActionBar
+
Image:PDM_Biblioteca_compat_11.jpg| Agora existen varias formas de engadir un ToolBar-ActionBar. Unha delas é a de poñer un Theme que incorpore unha barra de acción. No noso exemplo: <b>Theme.AppCompat.Light.DarkActionBar</b> Eliminamos por tanto no layout da Activity o Toolbar que tiñamos posto.
 
Image:PDM_Biblioteca_compat_12.jpg| Temos que modificar a activity e agora vai ser unha subclase da clase AppCompactActivity. O action bar a obtemos chamando ao método 'getSupportActionBar()'. Podemos ver como xa podemos facer uso de método 'setElevation()'. Indicar que esta forma sería a recomendada para facer uso do ActionBar en calquera versión de Android. Así nos aseguramos que todas van funcionar igual. Se non o facemos así e usamos as ActionBar que foron aparecendo en cada versión das Api´s estaremos limitados as método e propiedades da MinSDK indicada.
 
Image:PDM_Biblioteca_compat_12.jpg| Temos que modificar a activity e agora vai ser unha subclase da clase AppCompactActivity. O action bar a obtemos chamando ao método 'getSupportActionBar()'. Podemos ver como xa podemos facer uso de método 'setElevation()'. Indicar que esta forma sería a recomendada para facer uso do ActionBar en calquera versión de Android. Así nos aseguramos que todas van funcionar igual. Se non o facemos así e usamos as ActionBar que foron aparecendo en cada versión das Api´s estaremos limitados as método e propiedades da MinSDK indicada.
 +
Image:PDM_Biblioteca_compat_13.jpg| Resultado da execución.
 
</gallery>
 
</gallery>
  

Revisión actual del 14:20 18 ago 2020

Introdución

  • Como xa comentamos anteriormente, as bibliotecas de compatibilidade son creados por Android para dar soporte a versións antigas do S.O. Android e que estas poidan executar novas funcionalidades que apareceron en versións posteriores.


  • A partires da versión Android 9.0 (API 28) aparece outra forma de implementar ditas bibliotecas, denominada 'artifacts' e que se atopa dentro do espazo de nome androidx.


Versión actual

  • Todas as bibliotecas de compatibilidade están aloxadas nun paquete que comeza polo nome androidx.
  • A diferenza das bibliotecas de compatibilidade empregadas anteriormente, éstas se manteñen e actualizan por separado e non é necesario actualizar todo o S.O. como pasaba antes coas bibliotecas de compatibilidade amdroid.compact.



Como empregar a novo sistema de bibliotecas de compatibilidade


  • Podedes consultar neste enlace a nomenclatura das versións empregadas e o que significa cada número.


Exemplo de uso

  • Podedes atopar neste enlace a lista de bibliotecas coas versións actuais que se atopan dentro do espazo de nomes androidx.
Para engadir un novo recurso temos que editar o arquivo build.gradle a nivel de Módulo e na sección de 'dependences' debemos empregar a orde implementation:
PDM Artifacts 3.jpg
Como vemos, xa por defecto fai uso de dúas bibliotecas, unha para colocar os elementos gráficos nas activities (un tipo de layout denominado ConstraintLayout) e a librería appcompat, que entre outros elementos incorpora o ToolBar.


  • Imaxinemos que no noso proxecto queremos empregar o widget (control gráfico) CARDVIEW.





Versión antiga

  • As librerías empezan có nome: com.android.support
Soamente se actualizarán ata a versión 28, a partires de entón soamente se dará soporte ás biblitecas do espazo de nome androidx.
  • Podedes consultar as melloras a nivel xeral que ofrecen ditas bibliotecas neste enlace.
  • Podedes consultar as funcións que incorporan cada unha das bibliotecas de compatibilidade neste enlace.


  • Podedes consultar como configurar o Android Studio para descargar e utilizar ditas bibliotecas neste enlace



Exemplo de uso

  • Un exemplo de uso sería o uso do ActionBar:
PDM Biblioteca compat 1.jpg
Imaxe obtida desta web


  • Dende a versión 3.0 (API 11) todas as activity´s poden levar unha ActionBar (de feito ven no theme por defecto). Pero a medida que foron xurdindo novas versións da API, engadíronse novas funcionalidades.
Por exemplo, a partires da versión API 21 (Android 5) engadíronse novas opcións para modificar o deseño e adaptalo á filosofía do Material Design. De feito a ActionBar pasou a denominarse ToolBar.
Unha destas propiedades novas é a elevación, que ven ser un efecto como se o compoñente estivera colocado 'por enriba' doutro. No caso da barra de acción (Action Bar) que a partires de Android 5 denomínase Tool Bar (App Bar está formada por Tool Bar, Status Bar e Tab Bar) dito método é setElevation e a guía de Material Design indica que debe estar a 4dp.


  • Se creamos un novo proxecto cun target_SDK a partires da API 21 e un min_SDK tamén a partires do 21, poderemos facer uso de dito método:



Código do Manifiesto:

 1 ...........
 2         <activity android:name=".NOME_ACTIVITY"
 3             android:label="@string/app_name"
 4             android:theme="@style/AppTheme">
 5             <intent-filter>
 6                 <action android:name="android.intent.action.MAIN" />
 7 
 8                 <category android:name="android.intent.category.LAUNCHER" />
 9             </intent-filter>
10         </activity>
11 ...........



Código do layout:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".NOME_DA_ACTIVITY">
 8 
 9     <android.widget.Toolbar
10         android:id="@+id/toolbar2"
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:layout_marginTop="4dp"
14         android:background="?attr/colorPrimary"
15         android:minHeight="?attr/actionBarSize"
16         android:theme="?attr/actionBarTheme"
17         android:title="ToolBar"
18         app:layout_constraintEnd_toEndOf="parent"
19         app:layout_constraintTop_toTopOf="parent" />
20 </android.support.constraint.ConstraintLayout>
Línea 7: Hai que poñer o nome da vosa activity
Línea 9: Fixarse como o control Toolbar non é o da biblioteca de compatibilidade.

Código da Activity:

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.widget.Toolbar;
 4 
 5 public class NOME_DA_ACTIVITY extends Activity {
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_main221);
11 
12         Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar2);
13 
14         float scale = getResources().getDisplayMetrics().density;
15         int pix = (int)(4*scale+0.5f);
16 
17         myToolbar.setElevation(pix);
18     }
19 }
Línea 5: Hai que poñer o nome da vosa activity



  • Agora cambiamos o MinSDK para API 19.
Na API 19 non existía o ToolBar. O equivalente denomábase ActionBar, polo tanto teredes un erro na código da Activity:
PDM Biblioteca compat 5b.jpg










-- Ángel D. Fernández González -- (2018).