Italian (RISOLTO) Problema di grafica con EditText

Sagenut

Well-Known Member
Licensed User
Longtime User
Ho una interfaccia con 8 EditText, e altre view ovviamente.
Dallo Script General del Designer le ho posizionate e dimensionate in modo da farle adattare ad ogni schermo, e funziona.
Il mio problema è sorto nel momento in cui per abbellire il tutto ho modificato le EditText da codice usando il ColorDrawable.
C'è una strana relazione tra una EditText nella parte alta dello schermo e altre 6 nella parte inferiore.
Inizialmente mi disegna bene le 6 EditText in basso, ma quella in alto diventa troncata in questa maniera

edttagliata1.jpg


mentre le altre vanno tutte bene.
Per caso ho fatto BringToFront alla EditText troncata ed è successo che questa si è messa a posto mentre le altre sono diventate così:

edttagliata2.jpg

Fino a prima queste 6 erano a posto (sarebbero circa 3 volte più larghe)
Se faccio BringToFront a queste 6 ritorno ad avere la prima troncata e queste 6 a posto.
Eseguendo l'app, scrivendo qualcosa nelle EditText fino a superare la loro larghezza di colpo si mette a posto quella in cui stò scrivendo.
Spero di essermi fatto capire. :D
Vi posto il codice di modifica delle EditText.
B4X:
Sub Activity_Resume
    Dim formaedit As ColorDrawable
    Dim colore As Int
    colore = Colors.ARGB(255,154,205,50)
    formaedit.Initialize2(colore,5dip,1dip,Colors.Black)
    edtCredito.Background = formaedit
    edtCodiceConferma.Background = formaedit
    edtNome.Background = formaedit
    edtCognome.Background = formaedit
    edtIndirizzo.Background = formaedit
    edtCap.Background = formaedit
    edtCitta.Background = formaedit
    edtNazione.Background = formaedit
End Sub
Qualche idea?
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Pare proprio funzionare con il tuo consiglio di creare una variabile Background diversa per ogni view.
Però mi sembra abbastanza stupido tutto sommato.
ColorDrawable definisce solo il colore, la smussatura degli angoli, il colore del bordo e lo spessore del bordo.
Viene logico pensare che dopo aver creato uno Stile (diciamo così) questo possa essere applicato ad ogni view che vogliamo abbia quello stile.
Poi che ogni view abbia lunghezze o larghezze diverse non dovrebbe creare problemi.
Giusto per curiosità: c'è una spiegazione logica a questo effetto?
Intanto grazie per avermi risolto il problema.
C'è tanto da imparare.
 

Star-Dust

Expert
Licensed User
Credo che il problema sia che tutti gli oggetti puntino(o sono collegate) sulla stessa variabile e quindi la modifica delle dimensioni di un oggetto si ripercuote su tutti gli altri.

Diverso é che ogni oggetto punti ad una variabile propria con le stesse caratteristiche delle altre, ma propria(esclusiva) che tutti gli oggetti puntino ad una sola variabile per tutti gli oggetti.
Un po come se fosse una Lista di N elementi ma che tutti gli elementi puntano lo stesso Item, Quindi la lista é di N elementi, ma il record é solo uno.

Almeno credo che sia cosi :p:p:p:p:p
 

LucaMs

Expert
Licensed User
Longtime User
Pare proprio funzionare con il tuo consiglio di creare una variabile Background diversa per ogni view.
Non ha molto senso, visto che il motivo è...
c'è una spiegazione logica a questo effetto?
che il BorderWidth della view standard è di 5 dip (vedi progettino allegato)
 

Attachments

  • ColorDrawable test.zip
    8.2 KB · Views: 139

Sagenut

Well-Known Member
Licensed User
Longtime User
Però le mie 8 EdiText non sono tutte uguali come dimensione.
Non sò se questo possa essere il problema.
Forse è possibile usare lo stesso Background per gruppi di view di uguale dimensione.
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Usando i dip la forma si adatta automaticamente ad ogni schermo.
Provato con diversi schermi andava sempre bene.
L'unico problema era quel troncaggio inspiegabile.
Assegnando una variabile dedicata ad ogni view il problema si è magicamente risolto.
Farò anche la prova di usare la stessa variabile per le 6 EditText identiche e crearne una dedicata per le altre 2.
 

LucaMs

Expert
Licensed User
Longtime User
Mi sta venendo il dubbio se i 5dip vadano bene con qualunque dispositivo.


Però le mie 8 EdiText non sono tutte uguali come dimensione.
Non sò se questo possa essere il problema.
Prova a cambiare le dimensioni nel progetto che ho allegato... e facci sapere ;)


[Edit: scritto prima che comparisse il tuo precedente, @Sagenut]
 

LucaMs

Expert
Licensed User
Longtime User
L'unico problema era quel troncaggio inspiegabile.
Ho riletto il primo post e mi pare di capire che il troncaggio avvenga in orizzontale, non in verticale, come pensavo.

Puoi allegare il file .bal?
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Variato le dimensioni delle prime 5 ecco il risultato

edttagliate.jpg

la prima viene troncata.
Nel mio caso la prima veniva troncata a destra, mentre le 6 sotto diventavano più corte e troncate sotto (Vedi immagini del primo post).
Per qualche oscuro motivo la soluzione è quella di @Star-Dust.
Vi farò sapere se usando una stessa variabile a gruppi di view identiche funziona o meno.
 

LucaMs

Expert
Licensed User
Longtime User
Non è che hai qualche view trasparente anzi, più probabilmente nera, accanto alla prima EditText?

Anch'io ho provato la tua modifica, su smartphone e tablet:
upload_2017-5-28_13-16-9.png




upload_2017-5-28_13-16-27.png
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Prova a farle con differenze di dimensioni più marcate come ho fatto io.
Oppure prova a fare molto più piccola solo la prima.
Sembra che il problema appaia se c'è molta differenza di dimensione tra le view che usano uno stesso Background.
Nel mio progetto ho provato a creare 3 variabili Background, comunque tutte uguali come impostazioni:
- la prima abbinata alla prima EditText
- la seconda abbinata alla seconda EditText
- la terza abbinata alle restanti 6 che sono tutte identiche
Pare funzionare.
 

LucaMs

Expert
Licensed User
Longtime User
Che larghezza hai messo per la prima EditText (così la faccio uguale e vediamo)?
 

LucaMs

Expert
Licensed User
Longtime User
Boh, diminuite le larghezze delle prime due (80dip e 100dip, sia nel Portrait che nel Landscape - variant di base) e continua a non troncarmele.
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Nel tuo esempio ho fatto la prima a larghezza 60 e poi le altre a scalare aumentate di 40.
L'ho fatto a mano così al volo.
Però ho anche impostato un Variant di 480x800 come uso nel mio progetto.
Mi ero dimenticato di dirvelo, scusatemi.
 

LucaMs

Expert
Licensed User
Longtime User
Boh, diminuite le larghezze delle prime due (80dip e 100dip, sia nel Portrait che nel Landscape - variant di base) e continua a non troncarmele.
Eh, no, non me le tronca solo perché sono cieco :p, in realtà le tronca eccome.
 

LucaMs

Expert
Licensed User
Longtime User
Scovato l'arcano: è la proprietà Wrap della EditText (prova a togliere la spunta e vedrai che non tronca più la EditText - in compenso tronca ovviamente il testo); suppongo sia un bel bug.
 

LucaMs

Expert
Licensed User
Longtime User
Adesso lo segnalo come bug, perché non sono ancora completamente antipatico ad Erel :p
 

Sagenut

Well-Known Member
Licensed User
Longtime User
L'avevo pensato anche io e avevo già tolto il Wrap ma continuava a farmelo.
Pur essendo l'ultimo arrivato e assolutamente il meno esperto di questo IDE ritengo che la soluzione sia creare un Background a gruppi di view identiche come detto da @Star-Dust.
Farò presente la cosa ad Erel per verificare se è un bug del software o un problema di Android.
Prima farò altre prove facendo gruppi di 5 view uguali e facendo tanti gruppi con dimensioni molto diverse.
Ad ogni gruppo assegnerò una sola variabile Background (con le stesse identiche impostazioni) dedicata ad ogni gruppo.
 

LucaMs

Expert
Licensed User
Longtime User
Farò presente la cosa ad Erel per verificare se è un bug del software o un problema di Android.
Ok, allora segnalalo tu (specificando che il problema pare essere il wrapping del testo se congiunto con la modifica del drawable della EditText da codice), così mi risparmio almeno un ennerismo post maldigerito :p
 
Top