Passa ai contenuti principali

Android Studio - EditText: gestione della tastiera

In questo articolo vedremo come è possible interagire con l'EditText e tastiera.
Se quando apriamo l'app viene visualizzata automaticamente la tastiera ma noi vogliamo visualizzarla solo quando clicchiamo sull'EditText basta inserire la seguente riga di codice all'interno del file AndroidManifest.xml:
android:windowSoftInputMode="stateAlwaysHidden"
ecco dove inserire la riga di codice (vedi riga 13):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dm.tutorialtext3">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
in questo modo all'apertura dell'app non viene visualizzata la tastiera.

Se quando orientiamo lo schermo viene visualizzata la tastiera basta aggiungere anche questa riga sempre al file AndroidManifest.xml
android:configChanges="keyboardHidden|orientation|screenSize
ecco dove inserire la riga di codice (vedi riga 14):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dm.tutorialtext3">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden"
android:configChanges="keyboardHidden|orientation|screenSize>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
in questo modo quando modifichiamo l'orientamento dello schermo non verrà visualizzata la tastiera.

Se abbiamo più EditText all'interno della nostra app sarebbe opportuno passare da un EditText all'altro senza dover cliccare all'interno dell' EditText.
Per fare questa operazione è necessario aggiungere una questa riga di codice in fase di dichiarazione dell'EditText nel file MainActivity.kt all'interno della funzione onCreate
editText1.setImeOptions(EditorInfo.IME_ACTION_NEXT)
Questo è un IME, cioè un input method (IME) implementa un particolare modello di interazione che l'utente può utilizzare (nel nostro caso il tasto NEXT per passare all'EditText successiva). Il tipo di IME che verrà aggiunto alla nostra tastiera è passato come argomento al metodo setImeOptions, questo perchè è possibile scegliere, oltre al tasto NEXT altri IME da inserire nella tastiera. Elenchiamo quelli più utilizzati:
  • IME_ACTION_DONE - chiude la tastiera. In alcuni tipi di EditText (definito dall'attributo input_Type) è come impostazione predefinita e non è necessario dichiararlo
  • IME_ACTION_GO - inserisce un bottone che ha l'effetto di generare un'azione precisa oltre alla chiusura della tastiera. Per esempio questo tipo di IME viene aggiunto alle tastiere dove deve essere immesso un URL e una volta cliccato il tasto Go viene fatta la richiesta HTML al server ospitante la risorsa indicata dall'utente.
  • IME_ACTION_SEND - viene utilizzato per inviare il testo inserito nell'EditText ad un determinato servizio come per esempio un'applicazione di invio messaggi

Vedi questo articolo su come eseguire una funzione alla pressione del tasto DONE sulla tastiera.
ESEMPIO 1:
Ecco come si presenta il file activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:id="@+id/RLayout"
tools:context=".MainActivity">
<EditText
android:id="@+id/txtNome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:hint="Nome"
android:inputType="textCapWords"
android:textSize="18sp" />
<EditText
android:id="@+id/txtCognome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/txtNome"
android:layout_below="@+id/txtNome"
android:layout_centerHorizontal="true"
android:hint="Cognome"
android:inputType="textCapWords"
android:textSize="18sp" />
<EditText
android:id="@+id/txtEta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/txtCognome"
android:layout_below="@+id/txtCognome"
android:layout_centerHorizontal="true"
android:hint="Età"
android:textSize="18sp"
android:inputType="number"
android:max="4"
android:ems="10"/>
</RelativeLayout>
Ecco come si presenta il file MainActivity.kt
package com.dm.tutorialtext3
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.inputmethod.EditorInfo
import android.widget.EditText //importazione della Classe: EditText
class MainActivity : AppCompatActivity() {
var editName: EditText? = null
var editSurname: EditText? = null
var editAge: EditText? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editName = findViewById(R.id.txtNome)
editSurname = findViewById(R.id.txtCognome)
editName = findViewById(R.id.txtEta)
editName!!.setImeOptions(EditorInfo.IME_ACTION_NEXT)
editSurname!!.setImeOptions(EditorInfo.IME_ACTION_NEXT)
editName!!.setImeOptions(EditorInfo.IME_ACTION_DONE)
}
}
view raw editTex_KB_1.kt hosted with ❤ by GitHub


Download Project
Download file APK



Vedi introduzione a EditText
Vedi recupero del testo inserito
Vedi eliminare il Focus

Commenti

Post popolari in questo blog

Android Studio - Impostare lingua app

In questo articolo vedremo come poter selezionare la lingua all'interno della nostra app. Nel precedente articolo in cui si parlava del file string.xml , la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo. Per prima cosa creare il layout Ecco un esempio do come può essere il file activity_main.xml Ora creare le stringhe di testo all'interno del file string.xml Ora creare la traduzione del file string.xml nelle varie lingua come descritto in questo articolo Il risultato sarà una serie di file string.xml delle varie lingue impostate. Ora queste di seguito sono tre funzioni che servono per: selezione della lingua salvataggio della selezione nelle preferenze dell'app caricamento della lingua quando si avvia l'app Ecco come si presenta il file Main...

Android Studio - Rinominare il progetto

Rinominare il progetto Android Studio ATTENZIONE!: non eseguire questa procedura se l'app è stata pubblicata su Google Play Store Quando si vuole cambiare nome al progetto: nome cartella in cui è contenuto il progetto package name bisogna eseguire questi passaggi: Andare nella cartella dove è contenuto il progetto Creare una copia del progetto in questione Rinominare la cartella copiata con il nome dell'app (non usare spazi tra le parole) Ora è necessario dire ad Android Studio il nome del nuovo progetto  Aprire Android Studio Aprire il progetto creato in precedenza Una volta caricato il progetto cliccare Build Cliccare Clean Project Attendere che venga eseguito il processo di "pulitura" Cliccare ancora su Build Cliccare su Rebuild Project Attendere che venga ricostruito il progetto Ora aprire la cartella app fino a visualizzare la cartella java Cliccare sull'ingranaggio  Deselezionare la voce Compact Middle Packa...

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.