Passa ai contenuti principali

Android Studio - EditText: eliminare il focus

In questo articolo vedremo come poter eliminare il cursore e la selezione (Focus) dell'EditText una volta inserito testo o numeri.
Questo esempio prende come base il progetto presentato in questo articolo con l'aggiunta della funzione ClearFocus (annulla la selezione) e CursorVisible (visualizzazione o meno del cursore)

Cos'è il Focus e il Cursor?
Nell'immagine qui sotto, come si può vedere, la prima EditText è selezionata (Focus) e il cursore (Cursor) lampeggiante, mentre la seconda EditText non è selezionata e senza cursore.
Quindi il Focus è quando attiviamo l'EditText per l'inserimento del testo, mentre il Cursor è il cursore che ci dice dove stiamo inserendo il testo.

Ora se scriviamo qualcosa nella prima EditText e clicchiamo sul pulsante, vedremo che oltre ad eseguire la funzione per cui è programmato, la EditText rimane selezionata (Focus) e il cursore (Cursor) lampeggiante.
Per fare in modo che alla pressione del pulsante venga annullato il Focus e disattivato il Cursor nell'EditText bisogna seguire alcuni accorgimenti.
Nel file activity_main.xml occorre aggiungere una View con l'aggiunta degli attributi:
android:focusable="true"
android:focusableInTouchMode="true"
view raw clearfocus1.xml hosted with ❤ by GitHub
una View molto utile a questo scopo può essere ad esempio un divisorio (Divider)
<View
android:id="@+id/divider1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#00FFFFFF"
android:focusable="true"
android:focusableInTouchMode="true"/>
view raw clearfocus2.xml hosted with ❤ by GitHub
Questa View, con gli attributi specificati sopra, fa si che quando andiamo a disattivare il Focus e il Cursor sulla EditText, la View divider si prende il Focus.
Se non specifichiamo questi attributi la disattivazione del Focus sulla EditText non avrà effetto.

N.B. Inserire questa View prima della EditText a cui si vuole cancellare il Focus.
Se nel layout si hanno più EditText basta inserire una sola View con gli attributi specificati sopra.
Nel file MainActivity.kt all'interno della funzione setOnClickListener del pulsante bisogna inserire queste righe di codice:
//editTxt è il nome della variabile associata alla EditText a cui si vuole cancellare il Focus e il Cursor
editTxt!!.isCursorVisible = false //nasconde la visualizzazione del cursore
editTxt!!.clearFocus() //cancella il focus dalla EditText specificata
editTxt!!.isFocusableInTouchMode = true //riabilita il focus quando si clicca sulla EditText
editTxt!!.isFocusable = true //riabilita il focusa alla EditText
editTxt!!.isCursorVisible = true //riabilita il cursore alla EditText
view raw clearfocus1.kt hosted with ❤ by GitHub
Se si desidera cancellare il Focus e il Cursor su tutti gli EditText aggiungere le righe di codice sopra riportate cambiando la variabile a cui sono associate le altre EditText.
Mentre per la seconda EditText non è stato inserito alcun codice ed il risultato è il seguente:
Ecco il file activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
tools:context=".MainActivity"
android:orientation="vertical">
<View
android:id="@+id/divider1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#00FFFFFF"
android:focusable="true"
android:focusableInTouchMode="true"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:id="@+id/editText"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:ems="10"
android:id="@+id/editText2"/>
<Button
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:textSize="20sp"
android:textColor="#000000"/>
</LinearLayout>
view raw clearfocus3.xml hosted with ❤ by GitHub
Ecco il file MainActivity.kt
package com.dm.tutorialtext7
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
var editTxt: EditText? = null
var txt: TextView? = null
var btn: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editTxt = findViewById(R.id.editText)
txt = findViewById(R.id.textView)
btn = findViewById(R.id.button)
btn!!.setOnClickListener{
//variabile temporanea per il recupero del testo inserito nella EditText
val message: String = editTxt!!.text.toString()
//inserimento del testo all'interno di una TextView
txt!!.text = message
editTxt!!.isCursorVisible = false //nasconde la visualizzazione del cursore
editTxt!!.clearFocus() //cancella il focus dalla EditText specificata
editTxt!!.isFocusableInTouchMode = true //riabilita il focus quando si clicca sulla EditText
editTxt!!.isFocusable = true //riabilita il focusa alla EditText
editTxt!!.isCursorVisible = true //riabilita il cursore alla EditText
//nasconde la tastiera
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(txt!!.getWindowToken(), 0)
}
}
}
view raw clearfocus2.kt hosted with ❤ by GitHub


Download Project
Download file APK


Vedi introduzione a EditText
Vedi gestione della tastiera
Vedi recupero del testo inserito

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.