Italian Adattabilità dell'interfaccia

LucaMs

Expert
Licensed User
Longtime User
Seguro seguro !!
Io ho una app bloccata a landscape e quindi ho fatto un layout con due varianti, tutte e due landscape, e il programma sceglie da solo quale mostrare.
Sul telefono mi mostra una variante, sul tablet me ne mostra un altra.

Ottima notizia, proverocci, grazie :)


infatti ho dei programmi (ad esempio il famoso Clean Master) che sul telefono piccolo si vede bene, mentre sul tablet il font non viene ingrandito e si vedono le scritte piccole.
Oh, e che solo noi abbiamo problemi? :p
 

LucaMs

Expert
Licensed User
Longtime User

Sì, in effetti AutoScaleAll (come anche AutoScale) ridimensiona anche i font. Ed è vero anche che ho letto un bel po' di post di membri insoddisfatti perché non lo fa nel modo ideale.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
A me invece AutoScaleAll non ridimensiona il font, eccovi lo stesso programma su un telefono e sul tablet, vede che sul tablet il font non viene ingrandito, adesso vado ad aprire un thread su "question" e vediamo che mi dice Erel

phone.png tablet.png

Ecco qui il thread che ho scritto: https://www.b4x.com/android/forum/threads/autoscaleall-and-resize-font-size.58527/
 
Last edited:

udg

Expert
Licensed User
Longtime User
In un designer script avevo qualcosa tipo:
B4X:
labelxyz.textsize = 14
AutoscaleRate(0.5)
AutoscaleAll

e controllando sui vari UI Cloud devices la dimensione si adattava bene; l'unico accorgimento era trovare il valore iniziale (nell'esempio, 14) adatto.
 

LucaMs

Expert
Licensed User
Longtime User
In each variant I can change button properties (height, width, left, top and so on) but font size if one for two variant (if I change font size of a button in a variant, it change also in the other variant).

Ti rispondo qui, perché mi piace di più :D.

Non ho ben capito questa affermazione.

P.S. adesso sì, invece; non avevo notato questa cosa e, secondo me, è un bug, perché se è una cosa voluta, non ne capisco il senso.

Comunque, anche se è una rottura di scatole che non dovrebbe essere necessaria, puoi provare ad inserire:
Button1.TextSize = 20
nello script specifico per il variant 960x600


Sto guardando l'app che sto completando, dato che mi sembra che il testo venga scalato decentemente e già ho dimenticato come ho fatto, hehehe.
Ho un solo variant, 800x480 (solo landscape, come il tuo).
Ho impostato soltanto:
AutoScaleRate(1)
AutoScaleAll

e poche righe per centrare un paio di view.

Fammi sapere se così ti funziona meglio, grazie :)


Uhm... però c'è il fatto che ho testato il layout solo sul mio smartphone che ha le stesse dimensioni, anzi, il variant ha addirittura lo stesso scale, 1.5, e sul tablet, 1280x800 ma scale 1.

Beh, prova, cmq.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
io ancora non ho capito cosa fa AutoScaleRate e il senso del valore.
Udg dice di mettere 0.5, Luca dice 1 e Erel dice 0.3
Ho visto che cambiandolo praticamente cambia il modo che va a scalare tutti i view presenti, ma non ne ho capito il senso matematico

Sergio
 

LucaMs

Expert
Licensed User
Longtime User
Quando ho chiesto ad Erel e mi ha risposto "about 0.3", mi è venuto spontaneo dirgli: "mai visto 'circa' in geometria" (ovviamente in inglese).

Dato che anche per me tutto ciò è poco chiaro, gli ho anche scritto che capirei meglio se sapessi come questa cosa funzioni internamente, ma pare che lui abbia sorvolato.

Ti rispondono (non solo lui) che 0 equivale a "non scalare", 1 equivale praticamente allo scalare tramite percentuali e che, dalle prove fatte da Erel, il valore "migliore" sarebbe questo 0.3, che, essendo di default, non devi impostare.

Per adesso, la scelta di creare due layout diversi (con 2 variant ciascuno, se consento sia Landscape che Portrait!) e caricando uno dei due a seconda delle dimensioni del dispositivo, pare funzionare bene (con AutoScaleRate(1))
 

LucaMs

Expert
Licensed User
Longtime User
Boh, io non riceverò molte altre risposte da Erel, soprattutto su questo argomento, anzi, potrebbe bannarmi anche soltanto per questo post.

Il guaio è che non esiste la possibilità di eliminare queste Anchor, perché Erel era convinto che Anchor Top + Left fosse uguale a nessun Anchor e quindi non ha dato questa possibilità.
 

udg

Expert
Licensed User
Longtime User
Ciao a tutti, vi riporto alcuni elementi ricavati da altri post:

delta = ((100%x + 100%y) / (320dip + 430dip) - 1)
rate = 0.3 'value between 0 to 1.
scale = 1 + rate * delta

The rate determines the change amount in relation to the device physical size.
Value of 0 means no change at all. Value of 1 is almost similar to using %x and %y: If the physical
size is twice the size of the standard phone then the size will be twice the original size.

Una risposta di Klaus, a mio avviso la principale autorità in materia di Layout e Designer scripts:
The problem is the width / height ratio. If it's the same as the standard layout everything is OK but if it's bigger there are some drawbacks explained in chapter 8.10 AutoScale in the Beginner's Guide.
If you want to play with a factor you should play with the rate factor that's it's purpose.
In most cases streching a small 3.5'' screen up to a 10'' sceen doesn't look really good so you should use a rate vale lower than 1.
You could also have a look at the Autoscale Code Module that has some other equations and allows to autoscale views added in the code.

@sirjo66 : non esiste un valore di rate valido sempre; nell'applicazione che avevo io 0.5 era il miglior compromesso, ma in altre potrebbe essere 0.3 o altro ancora. Per questo motivo a me piace molto la possibilità offerta dall' UI Cloud, per testare un po' di combinazioni e vedere come vengono rese su un certo numero di devices.
 

LucaMs

Expert
Licensed User
Longtime User
Proprio perché quel "dannato" :) valore potrebbe essere x in alcuni casi, y in altri, io preferirei usarlo fisso a 1 e al limite giostrare con gli script o da codice.

A proposito, ma tramite l'UI Cloud cosa vedi? Il layout prima o dopo la cura degli script? Suppongo dopo, ma non si sa mai.
 

udg

Expert
Licensed User
Longtime User
Ti confermo che l'UI Cloud mostra il dopo la cura..eheh

Quello che faccio io è disegnare layout e script e poi passare a UI Cloud per vedere come appare sui vari devices. Se è buono/decente dai 4" in su allora va bene (in genere anche il 2.8" risulta apprezzabile). Gli "esperimenti" riguardano il valore del rate e la dimensione dei caratteri.
Ma, ad essere sinceri, l'UI Cloud mi aiuta anche sugli "orrori" da distrazione tipo ancoraggi errati o posizionamenti fuori schermo..eheh
In tutta sincerità, la parte delle interfacce è la più noiosa e quella che mi richiede sempre più tempo. Se poi bisogna anche tener conto delle varie "novità" introdotte tra una versione e l'altra di Android..allora il palletico straborda e l'app rimane nel cassetto!
 

LucaMs

Expert
Licensed User
Longtime User
Gli "esperimenti" riguardano il valore del rate e la dimensione dei caratteri.
Quindi come vedi ha ragione Sergio @sirjo66 sul fatto del FontSize autoscalato.


tipo ancoraggi errati o posizionamenti fuori schermo
e qui Erel ha fatto quell'errore di valutazione (secondo me ha letto una frase, che qualcuno ha anche riportato, secondo la quale impostare gli anchor a LEFT+TOP equivarrebbe a NON ancorare la view, ma non è così; la possibilità di non ancorare le view è importante, secondo me. Guarda questi post, da questo in poi.
 

luciano deri

Active Member
Licensed User
Longtime User
la classe Flexible table non mi fa automaticamente il dimensionamento del font, c'è un un parametro per farglielo fare o va impostata da codice la proprietà tabel.textsize? Cosa usi per dedurre le dimensioni dello schermo?
 

luciano deri

Active Member
Licensed User
Longtime User
Vedo che la mia domanda vi ha lasciato costernati. Da codice vorrei fare
B4X:
if  Activity.Height > 480 Then
table.text = 16
else
table.text = 12
end if
Ma activity.height è la risoluzione o la dimensione fisica? C'è un modo per sapere la dimensione ad esempio in pollici dello schermo?
 
Top