Diferencia entre revisiones de «TextView. Definición de recursos XML»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Atributos a coñecer)
(Empregando recursos definidos Res)
(No se muestran 7 ediciones intermedias del mismo usuario)
Línea 113: Línea 113:
 
     }
 
     }
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
: <u>Nota:</u> Ao poñer final aplicado a un obxecto dunha clase impedimos que poidamos cambiar a referencia de txtOrixinal a outro obxecto da clase TextView.
  
 
: Ao facelo, [http://wiki.cifprodolfoucha.es/index.php?title=PDM_UD1_Co%C3%B1ecendoAndroidStudio#Automaticamente se temos axustado o IDE Android Studio], fará unha importación da clase de forma automática e aparecerá o impor na parte superior da clase, se non, teremos que facelo manualmente:
 
: Ao facelo, [http://wiki.cifprodolfoucha.es/index.php?title=PDM_UD1_Co%C3%B1ecendoAndroidStudio#Automaticamente se temos axustado o IDE Android Studio], fará unha importación da clase de forma automática e aparecerá o impor na parte superior da clase, se non, teremos que facelo manualmente:
Línea 371: Línea 373:
  
 
* Modifiquemos o ficheiro de recursos de '''meucores''':
 
* Modifiquemos o ficheiro de recursos de '''meucores''':
<syntaxhighlight lang="xml" line highlight="3-4">
+
<syntaxhighlight lang="xml" line enclose="div" highlight="3-4">
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
 
<resources>
 
<resources>
Línea 383: Línea 385:
  
 
*Uso dos recursos no layout. Como sempre, observar as liñas marcadas
 
*Uso dos recursos no layout. Como sempre, observar as liñas marcadas
<syntaxhighlight lang="xml" line highlight="13,19,20,24,25,31,37-39">
+
<syntaxhighlight lang="xml" line enclose="div" highlight="13,19,20,24,25,31,37-39">
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
Línea 439: Línea 441:
  
 
<br />
 
<br />
 +
===Clickable / No Clickable===
 +
 +
* Todos os view´s teñen a propiedade 'Clickable' no que a documentación indica que serve para que o view resposte aos eventos de Click sobre o mesmo.
 +
: O 'problema' o temos en que ao xestionar o evento de Click dende o código, ao poñer a orde <u>setOnClickListener(new OnClickListener)</u> volvemos a facer clickable o control.
 +
: Se queremos que isto non pase teremos que desabilitar o clickable dende o código da seguinte maneira:
 +
<syntaxhighlight lang="java" line  enclose="div" highlight="8">
 +
        tvJava.setOnClickListener(new View.OnClickListener() {
 +
            @Override
 +
            public void onClick(View v) {
 +
                TextView t = (TextView)v;
 +
                t.setText("OLA");
 +
            }
 +
        });
 +
        tvJava.setClickable(false);
 +
</syntaxhighlight>
 +
 +
: Como vemos, a orde setClickable <u><b>ten que estar despois do rexistro de eventos</b></u>.
 +
: O mesmo sucede con calquera View.
 +
 +
 +
: <u>Nota:</u> Grazas a [http://likecharm.blogspot.com/2014/12/viewsetclickable-does-not-work_21.html likeCharm polo seu post].
 +
 +
 +
 +
* Outro aspecto a ter en conta é cando temos direccións web, de correo, mapas, como parte do texto que se amosa.
 +
: Nese caso entraría en xogo as propiedades '''autolink''' e '''linksclickables'''.
 +
: Por exemplo:
 +
<syntaxhighlight lang="java" line  enclose="div" highlight="">
 +
tvJava.setText("https://wwww.google.es");
 +
</syntaxhighlight>
 +
 +
 +
* Por último, se queremos amosar enlaces html no TextView dentro do código da Activity da forma:
 +
<syntaxhighlight lang="java" line  enclose="div" highlight="2">
 +
tvJava.append(Html.fromHtml("<br /><a href=\"http://www.google.com\">This is a link</a>"));
 +
tvJava.setMovementMethod(LinkMovementMethod.getInstance());
 +
</syntaxhighlight>
 +
 +
: Temos que engadir a liña 2 para que o faga. Máis información [https://developer.android.com/reference/android/text/method/LinkMovementMethod neste enlace].
  
 
==Accesibilidade==
 
==Accesibilidade==
Línea 569: Línea 610:
  
  
 
+
* <u>Nota:</u> O método setText está sobrecargado e permite empregar como dato un recurso de tipo String directamente da forma: '''R.string.nome_recurso'''  , pero isto soamente o podemos facer se non engadimos unha nova cadea da forma: tvJava.setText(R.string.nome_recurso + " nova cadea."). Neste caso debemos empregar a opción anterior para obter primeiro a cadea definida no recurso ou ben empregar o método append(). Lembrar que R.tipo_recurso.nome_recurso é un número definido na clase R. Soamente aqueles métodos que acepten un parámetro de tipo 'int resId' traducirán ese número ao recurso definido en /res/values/.
  
  
Línea 580: Línea 621:
 
* Dentro de este control tedes que coñecer e saber empregar os seguintes atributos:
 
* Dentro de este control tedes que coñecer e saber empregar os seguintes atributos:
 
:* id
 
:* id
 +
:* autolink
 
:* background
 
:* background
 
:* clickable
 
:* clickable

Revisión del 14:29 10 oct 2019

Introdución

  • Un TextView é unha etiqueta de texto que serve para amosar texto na aplicación.
  • Este control é unha subclase da clase View.
  • Opcionalmente pódese permitir editar o contido.
  • A clase que implementa o control vén configurada para non permitir a edición.


  • Aproveitando que este é o primeiro control que imos ver, tamén imos explicar como se definen constantes para usar nos recursos XML.


  • Referencias:
    • A clase View: http://developer.android.com/reference/android/view/View.html
      • Antes de continuar é importante familiarizarse (non fai falla aprender nada) cos métodos, subclases e atributos que ten esta clase de que van colgar todos os demais controis. Co cal, aparte de pararse na seguinte imaxe, é aconsellable premer no enlace anterior.

00 Part of Android View Hierarchy.png



Casos prácticos

Se non o temos creado antes, crea un paquete de nome UI como un subpaquete do teu paquete principal.
Dentro do paquete UI, crearemos un novo paquete de nome: CaixaTexto.



  • Dentro do paquete CaixaTexto crear unha nova 'Empty Activity' de nome: UD02_01_TextView de tipo Launcher e sen compatibilidade.
Modifica o arquivo AndroidManifiest.xml e engade unha label á activity como xa vimos na creación do proxecto base.
  • Imos comezar creando un layout con 2 TextViews, onde o segundo TextView se modifica en tempo de execución (ao iniciarse a aplicación).
Nota: No exemplo faise uso dun LineaLayout pero podedes facer uso de calquera dos layouts vistos anteriormente.


PDM TextView 7.JPG

  • A imaxe amosa en tempo de deseño os 2 TextViews.
  • Le o contido da etiqueta azul.
  • O XML do layout asociado a esa imaxe é:
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:padding="20sp"
 6     android:orientation="vertical" >
 7 
 8     <TextView
 9         android:id="@+id/txtOrixinal_UD02_01_TextView"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:text="@string/hello_world" />
13 
14     <TextView
15         android:id="@+id/txtJava_UD02_01_TextView"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:textColor="#00F"
19         android:text="Dá igual o que escribamos aquí. Neste exemplo, ao lanzar a aplicación, vaise cambiar este texto" />
20 
21 </LinearLayout>
  • Nas liñas 9 e 15 asóciase un ID a cada control, TextView, que logo usaremos en Java.
  • Observar as diferenzas entre as liñas 12 e 19. A primeira amosará o texto que contén a constante definida en XML (noutro ficheiro XML), a segunda amosa o texto directamente.
  • Deberedes de ter definida a constante @string/hello_world no ficheiro de recursos: /res/values/strings.xml, como está indicado despois da imaxe.

PDM TextView 2.JPG

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 
4     <string name="app_name">Aprendendo</string>
5     <string name="hello_world">Hello world!</string>
6 
7 </resources>
  • Como xa se dixo é recomendable usar o primeiro caso, pero no material vaise abusar do segundo caso para que se entendan os exemplos máis facilmente.
  • No segundo caso, como xa se indicou, o IDE Eclipse dará unha advertencia na liña 19 porque recomenda que esa propiedade se declare a través dunha constante.


  • As liñas 9 e 15 están creando o ID para os controis para que poidan ser accedidos dende Java a través da Clase R.
  • Observar na imaxe a declaración deses IDs.

PDM TextView 3.JPG

  • Isto xerase automaticamente cando se ten gardado o documento XML onde se declaran os controis.


  • Finalmente mirar como se define a cor azul (RGB), liña 18. Esta definición tamén podería estar usando unha constante declarada noutro ficheiro XML, como se verá ao final deste apartado.

Acceder e manipular o control dende Java

  • A continuación imos acceder ao control TextView declarado en XML dende Java e imos realizar accións sobre o control.
  • A forma de acceder a calquera compoñente gráfico é por medio da chamada ao método findViewById(int id) no que pasamos como parámetro o id do recurso, o cal o podemos obter a través da clase R, da forma: R.id.identificador_recurso.


Escribiremos esta liña:
1     @Override
2     protected void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setContentView(R.layout.activity_ud02_01__text_view);
5 
6         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
7 
8     }
Nota: Ao poñer final aplicado a un obxecto dunha clase impedimos que poidamos cambiar a referencia de txtOrixinal a outro obxecto da clase TextView.
Ao facelo, se temos axustado o IDE Android Studio, fará unha importación da clase de forma automática e aparecerá o impor na parte superior da clase, se non, teremos que facelo manualmente:
PDM TextView 4.JPG
A medida que imos escribindo o tipo se prememos CTRL+ Barra espaciadora xa sabemos que nos vai a autocompletar.
  • O método método findViewById(int id):
    • Recibe como parámetro unha constante da Clase R: neste caso o id asociado a un elemento visual. (CTRL+Barra espaciadora, para localizar a constante).
    • Devolve un obxecto de tipo View.
  • Todo control visual é unha subclase de View, por tanto como obtemos un obxecto View.
Anteriormente á versión 26, sería necesario facer un cast do método da forma:
TextView variable = (TextView) findViewById(R.id.id_text);
A partires da versión API 26 xa non é necesario.


  • A continuación amósase o código Java que vai manipular o TextView
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.CaixaTexto;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.TextView;
 6 
 7 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
 8 
 9 public class UD02_01_TextView extends Activity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_ud02_01__text_view);
15 
16         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
17         final TextView tvJava = (TextView) findViewById(R.id.txtJava_UD02_01_TextView);
18 
19         tvJava.setText("Etiqueta modificada en java: "+txtOrixinal.getText());
20 
21     }
22 }
  • Liña 16: temos un obxecto que apunta a TextView orixinal, ao primeiro TextView do Layout.
  • Liña 17: temos un obxecto que apunta ao novo TextView, ao segundo do Layout.
  • Liña 19: modificamos o texto do segundo TextView. O contido é unha cadea de texto concatenada (+) co texto que ten o primeiro TextView.
  • Cando se lance a aplicación vaise executar ese código, co cal o texto do segundo TextView non vai ser o que se indicou no Layout en tempo de deseño senón o que se indica en tempo de execución.
  • A imaxe amosa a execución da aplicación:

PDM TextView 8.JPG

  • Observar o contido da segunda liña, non é o que se asignou no Layout.

Manipulación html dunha etiqueta de texto

  • As Etiquetas de texto non son texto (String) senón que son código semellante ao html.
  • Entón na liña 18 anterior parece que hai unha contradición: concatenar unha cadea con algo html.
  • Teríamos que ter usado o método toString(): tvOrixinal.getText().toString()
  • Pero en Java non fai falla poñelo porque ese método chámase automaticamente sempre que o obxecto se concatene con outro String (Neste caso a cadea de texto).


  • Para obter a seguinte imaxe non se vai tocar o XML e vaise facer todo en Java.

PDM TextView 5.JPG

  • Na segunda etiqueta cambiouse: cor, tamaño da fonte e púxose en negriña unha palabra.


  • Código JAVA ...
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.CaixaTexto;
 2 
 3 import android.app.Activity;
 4 import android.graphics.Color;
 5 import android.os.Bundle;
 6 import android.text.Html;
 7 import android.widget.TextView;
 8 
 9 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
10 
11 public class UD02_01_TextView extends Activity {
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_ud02_01__text_view);
17 
18         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
19         final TextView tvJava = (TextView) findViewById(R.id.txtJava_UD02_01_TextView);
20 
21         tvJava.setText("Etiqueta modificada en java: "+txtOrixinal.getText());
22         tvJava.append(". Máis texto. ");
23         tvJava.setTextColor(Color.RED);
24         tvJava.setTextSize(20);
25         tvJava.append(Html.fromHtml("<p><br>Isto está en <b>negriña</b> e noutra liña.</p>"));
26 
27     }
28 }
  • Para importar os paquetes premer (SHIFT + CTRL + O)


  • Liña 22: engade contido á etiqueta polo final da mesma e amosa o contido final.
  • Liña 23: cambiar a cor usando unha constante estática.
  • Liña 24: cambiar o tamaño da fonte
  • Liña 25: devolve a cadea en formato HTML no que en Android se podería chamar Texto con estilo mostrable


  • A continuación vaise modificar a aplicación para que poidamos recuperar o contido exacto dun TextView, non o que amosa por pantalla.
  • Tamén se vai usar o método toString() para ver o seu resultado.


  • A imaxe amosa o deseño do Layout

PDM TextView 9.JPG

  • Observar a liña de separación e despois desta, dúas etiquetas de texto.
  • O Ficheiro XML asociado
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:padding="20sp" >
 7 
 8     <TextView
 9         android:id="@+id/tv_orixinal"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:text="@string/hello_world" />
13 
14     <TextView
15         android:id="@+id/tv_java"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:text="Dá igual o que escribamos aquí. Neste exemplo, ao lanzar a aplicación, vaise cambiar este texto"
19         android:textColor="#00F" />
20 
21     <View
22         android:layout_width="match_parent"
23         android:layout_height="2sp"
24         android:background="#000" />
25 
26     <TextView
27         android:id="@+id/txtTv_html_UD02_01_TextView"
28         android:layout_width="wrap_content"
29         android:layout_height="wrap_content"
30         android:text="Cadena html do tv_java. Realizarase en java" />
31 
32     <TextView
33         android:id="@+id/txtTv_string_UD02_01_TextView"
34         android:layout_width="wrap_content"
35         android:layout_height="wrap_content"
36         android:text="String do tv_java. Realizarase en java"
37         android:textColor="#00F"
38         android:textSize="16sp" />
39 
40 </LinearLayout>
  • Observar as liñas marcadas
  • A imaxe amosa a aplicación en execución:

PDM TextView 6.JPG

  • Observar como a primeira etiqueta despois da liña ten o contido do que almacena o EditText vermello.
  • A segunda etiqueta despois da liña amosa a etiqueta vermella pasada polo método toString. Observar como xa non hai negriña.


  • O código que fai iso posible é o seguinte:
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.CaixaTexto;
 2 
 3 import android.app.Activity;
 4 import android.graphics.Color;
 5 import android.os.Bundle;
 6 import android.text.Html;
 7 import android.text.Spanned;
 8 import android.widget.TextView;
 9 
10 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
11 
12 public class UD02_01_TextView extends Activity {
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_ud02_01__text_view);
18 
19         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
20         final TextView tvJava = (TextView) findViewById(R.id.txtJava_UD02_01_TextView);
21         final TextView tvHtml = (TextView) findViewById(R.id.txtTv_html_UD02_01_TextView);
22         final TextView tvString = (TextView) findViewById(R.id.txtTv_string_UD02_01_TextView);
23 
24         tvJava.setText("Etiqueta modificada en java: "+txtOrixinal.getText());
25         tvJava.append(". Máis texto. ");
26         tvJava.setTextColor(Color.RED);
27         tvJava.setTextSize(20);
28         tvJava.append(Html.fromHtml("<p><br>Isto está en <b>negriña</b> e noutra liña.</p>"));
29 
30         tvHtml.setText(Html.toHtml((Spanned)(tvJava.getText())));
31 
32         //tvString.setText(""+tvJava.getText());
33         tvString.setText(tvJava.getText().toString());
34     }
35 }
  • Liña 30: colle o valor da etiqueta vermella e a pasa a formato Html.
  • Liña 33: pasa a cadea vermella a String. Sería o equivalente á liña 35 (Concatenar cunha cadea).

Definición de constantes/recursos xml

  • Como xa vimos na definición XML do Layout temos valores postos á ferro.
  • Sería bo definir esas propiedades noutros ficheiros XML, deste xeito permítese a reutilización e a internacionalización.


  • Engadimos os novos recurso de tipo string. Observar as liñas marcadas.
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <string name="app_name">Aprendendo</string>
4     <string name="hello_world">Hello world!</string>
5 
6     <string name="texto_tv_java">Dá igual o que escribamos aquí. Neste exemplo, ao lanzar a aplicación, vaise cambiar este texto</string>
7     <string name="texto_tv_html">Cadena html do tv_java. Realizarase en java</string>
8     <string name="texto_tv_string">String do tv_java. Realizarase en java</string>
9 </resources>
  • Gardar o ficheiro




  • A continuación vaise crear un ficheiro de recurso para as cores.
Cada cor está formado por 3 cores (RED, GREEN, BLUE) que van dende 00 a FF en hexadecimal (0 a 255 en decimal), aínda que tamén acepta un único díxito (de 0 a F).
Normalmente faríamos uso do que xa trae por defecto, pero imos crear un novo para que vexades cal sería o proceso...
As constantes dos recursos pódense crear directamente no deseñador ou ben crealas previamente e utilizalas no deseñador posteriormente.


  • Modifiquemos o ficheiro de recursos de meucores:
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <color name="azul">#00F</color>
4     <color name="negro">#000</color>
5 
6 </resources>


  • Uso dos recursos no layout. Como sempre, observar as liñas marcadas
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:padding="20sp"
 7     android:orientation="vertical" >
 8 
 9     <TextView
10         android:id="@+id/txtOrixinal_UD02_01_TextView"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:text="@string/hello_world" />
14 
15     <TextView
16         android:id="@+id/txtJava_UD02_01_TextView"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:text="@string/texto_tv_java"
20         android:textColor="@color/azul" />
21 
22     <View
23         android:layout_width="match_parent"
24         android:layout_height="2sp"
25         android:background="@color/negro" />
26 
27     <TextView
28         android:id="@+id/txtTv_html_UD02_01_TextView"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:text="@string/texto_tv_html" />
32 
33     <TextView
34         android:id="@+id/txtTv_string_UD02_01_TextView"
35         android:layout_width="wrap_content"
36         android:layout_height="wrap_content"
37         android:text="@string/texto_tv_string"
38         android:textColor="@color/azul"
39         android:textSize="16sp" />
40 </LinearLayout>


NOTA IMPORTANTE: Lembra que calquera recurso que cres, soamente aceptará como nome letras minúsculas e guión baixo. Os demais caracteres están prohibidos.


  • Anda!!! Quedounos na liña 24 e 39 dous valores candidatos a ser definidos nunhas constantes tipo dimen. Seguro que o participante no curso é quen de facelo.
A etiqueta para as dimensións é: <dimen> </dimen>. Lembra facer uso do atributo 'name'.
Os recursos de tamaño son bos telos para aplicar o mesmo tamaño a todos os views da nosa aplicación desa forma damos a impresión de ter un mesmo deseño.
  • Importante: O tamaño que se garde en <dimen> ten que especificar a unidade, sp ou dp da forma: <dimen name='nome'>10sp</dimen>



Clickable / No Clickable

  • Todos os view´s teñen a propiedade 'Clickable' no que a documentación indica que serve para que o view resposte aos eventos de Click sobre o mesmo.
O 'problema' o temos en que ao xestionar o evento de Click dende o código, ao poñer a orde setOnClickListener(new OnClickListener) volvemos a facer clickable o control.
Se queremos que isto non pase teremos que desabilitar o clickable dende o código da seguinte maneira:
1         tvJava.setOnClickListener(new View.OnClickListener() {
2             @Override
3             public void onClick(View v) {
4                 TextView t = (TextView)v;
5                 t.setText("OLA");
6             }
7         });
8         tvJava.setClickable(false);
Como vemos, a orde setClickable ten que estar despois do rexistro de eventos.
O mesmo sucede con calquera View.


Nota: Grazas a likeCharm polo seu post.


  • Outro aspecto a ter en conta é cando temos direccións web, de correo, mapas, como parte do texto que se amosa.
Nese caso entraría en xogo as propiedades autolink e linksclickables.
Por exemplo:
1 tvJava.setText("https://wwww.google.es");


  • Por último, se queremos amosar enlaces html no TextView dentro do código da Activity da forma:
1 tvJava.append(Html.fromHtml("<br /><a href=\"http://www.google.com\">This is a link</a>"));
2 tvJava.setMovementMethod(LinkMovementMethod.getInstance());
Temos que engadir a liña 2 para que o faga. Máis información neste enlace.

Accesibilidade

Dito modo vai 'ler' a descrición de cada elemento.
  • Como norma xeral podemos dar as seguintes pautas:
Un <TextView> terá que ter o atributo 'android:contentDescription' como se amosa no seguinte exemplo:
 1     <TextView
 2         android:id="@+id/textView7"
 3         android:layout_width="wrap_content"
 4         android:layout_height="wrap_content"
 5         android:layout_marginStart="8dp"
 6         android:layout_marginTop="8dp"
 7         android:text="Dime o teu nome:"
 8         android:textSize="18sp"
 9         android:contentDescription="Nome a enviar"
10         app:layout_constraintStart_toStartOf="parent"
11         app:layout_constraintTop_toTopOf="@+id/etNome_UD03_01_Intents" />


  • No caso de que o TextView estea asociado ao EditText, podemos substituír dito atributo polo atributo: android:labelFor o cal indica cal é o EditText asociado ao TextView.
 1     <TextView
 2         android:id="@+id/textView7"
 3         android:layout_width="wrap_content"
 4         android:layout_height="wrap_content"
 5         android:layout_marginStart="8dp"
 6         android:layout_marginTop="8dp"
 7         android:text="Dime o teu nome:"
 8         android:textSize="18sp"
 9         android:labelFor="@id/etNome_UD03_01_Intents"
10         app:layout_constraintStart_toStartOf="parent"
11         app:layout_constraintTop_toTopOf="@+id/etNome_UD03_01_Intents" />
12 
13     <EditText
14         android:id="@+id/etNome_UD03_01_Intents"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:layout_marginStart="8dp"
18         android:layout_marginTop="8dp"
19         android:ems="10"
20         android:inputType="textPersonName"
21         app:layout_constraintStart_toEndOf="@+id/textView7"
22         app:layout_constraintTop_toTopOf="parent" />


  • Para comprobar que non temos problemas de accesibilidade:



Empregando recursos definidos Res

  • Xa veremos na sección de internacionalización como podemos ter cadeas en varios idiomas e que Android recolla a correcta en función do idioma escollido a nivel de S.O. nos axustes.
Pero existen outras cadeas que poida que empreguemos directamente no código da aplicación e non a través de /res/ no layout da activity.
Esas cadeas tamén necesitarán que estean traducidas a diferentes idiomas (se a nosa aplicación ten esa funcionalidade).
Para iso non podemos 'teclear' directamente a cadea de texto no código como fixemos nos exercicios anteriores, da forma:
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.CaixaTexto;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.TextView;
 6 
 7 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
 8 
 9 public class UD02_01_TextView extends Activity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_ud02_01__text_view);
15 
16         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
17         final TextView tvJava = (TextView) findViewById(R.id.txtJava_UD02_01_TextView);
18 
19         tvJava.setText("Etiqueta modificada en java: "+txtOrixinal.getText());
20 
21     }
22 }
Como vemos, temos o texto 'Etiqueta modificada en Java:' escrito directamente no código.


  • O que temos que facer é crear unha constante nun arquivo de recurso en '/res/values/' ou empregar un xa creado, por exemplo strings.xml.
Dentro deste arquivo (ou outro creado) definimos a constante có texto asociado da forma:
1 <resources>
2     <string name="app_name">Aprendiendo</string>
3     <string name="hello_world">Hello world!</string>
4     <string name="mensaxe_UD2_01_TextView">Etiqueta modificada en Java:</string>
5 
6 </resources>
Como vemos o nome da constante é mensaxe_UD2_01_TextView
 1 public class UD02_01_TextView extends AppCompatActivity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_ud02_01__text_view);
 7 
 8         final TextView txtOrixinal = findViewById(R.id.txtOrixinal_UD02_01_TextView);
 9         final TextView tvJava = (TextView) findViewById(R.id.txtJava_UD02_01_TextView);
10 
11         String mensaxe = getResources().getString(R.string.mensaxe_UD2_01_TextView);
12         tvJava.setText(mensaxe + txtOrixinal.getText());
13     }
14 }


  • Nota: O método setText está sobrecargado e permite empregar como dato un recurso de tipo String directamente da forma: R.string.nome_recurso , pero isto soamente o podemos facer se non engadimos unha nova cadea da forma: tvJava.setText(R.string.nome_recurso + " nova cadea."). Neste caso debemos empregar a opción anterior para obter primeiro a cadea definida no recurso ou ben empregar o método append(). Lembrar que R.tipo_recurso.nome_recurso é un número definido na clase R. Soamente aqueles métodos que acepten un parámetro de tipo 'int resId' traducirán ese número ao recurso definido en /res/values/.



Atributos a coñecer

  • Dentro de este control tedes que coñecer e saber empregar os seguintes atributos:
  • id
  • autolink
  • background
  • clickable
  • contentDescription
  • enabled
  • fontFamily
  • foreground
  • foregroundGravity
  • gravity
  • height
  • hint
  • laberFor
  • lineHeight
  • lines
  • linksClickable
  • longClickable
  • maxlength
  • maxlines
  • minLines
  • nextFocusXXXXX (varios)
  • onClick
  • padding
  • singleline
  • style
  • Tag
  • text
  • textXXXX (varios)
  • visibility
  • width


  • A maiores todos os atributos relacionados cos layout´s e tamaños








-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).