Italian Problemi con textsize

Ciao a tutti ragazzi, sto sviluppando la mia app ma ho problemi con il textsize, ovvero al testo do un valore percentuale, ad esempio 2%x se la larghezza(presa con il GetDeviceLayoutValues.Width) è <1080 e ad esempio 1%x se è maggiore, ma ho riscontrato problemi sia con i cellulari grandi che con i tablet grandi, ovvero nei cellulari grandi le scritte fuoriescono, nei tablet grandi le scritte sono minuscole. Help me
 

imgsimonebiliato

Well-Known Member
Licensed User
Longtime User
Ciao @Matteo Meretta, questo è un vecchio problema con il quale mi sono già scontrato :confused:.
Personalmente, non uso il design ma scrivo tutto da codice perchè così riesco a pilotare qualsiasi cosa voglia.
In ogni cosa, ogni device ha una diversa scala che calcoli così:

B4X:
Public Sub GetDeviceScale As Double
Return 100dip / 100
End Sub

A seconda poi del risultato, imposti le dimensioni corrette.
Io mi sono creato una libreria (e continuo ad aggiornarla) per risolvere quindi questo problema.
Su questo post viene spiegato un pò ;)
 

LucaMs

Expert
Licensed User
Longtime User
... e comunque dovresti considerare l'altezza dello screen, non la larghezza.

Ci sono molti dubbi su questo argomento: puoi trovare tante domande (e risposta) simili alla tua, sul sito.

Direi che puoi dare un'occhiata a come risolve la situazione Klaus col suo modulo Scale.
 

luciano deri

Active Member
Licensed User
Longtime User
Io creo i Layout quasi totalmente da Designer.
Con il codice sugli script dimensiono e riposiziono i componenti.
La prima istruzione deve essere AutoScaleAll
Da scrip gestisco top, left e width dei componenti che hanno un testo.
I pulsanti sono quasi sempre con BitmapDrawable.
Mi sembra che di fatto l'autoscale entra sulla dimensione che non è gestita da codice.
Per l'altezza l'autoscale mi sembra che faccia un lavoro decente sia per il dimensionamento che per il text size.

Saluti.
 

LucaMs

Expert
Licensed User
Longtime User
Con il codice sugli script dimensiono e riposiziono i componenti.
La prima istruzione deve essere AutoScaleAll

Se usi AutoScaleAll non dovresti aver bisogno di dimensionare le view tramite script.
Invece, il Designer ancora non mi convince.

Ho montato quest'immagine che affianca due modelli presi dall'UI Cloud:
upload_2016-2-11_12-11-5.png
 

luciano deri

Active Member
Licensed User
Longtime User
Diciamo che AutoScaleAll funziona con un po' a caso (per non essere scurrile).
Io lo avevo tolto, ma senza non fa il resize dei font. Lo lascio solo per gestire automaticamente le heignt e il text size che non ho capito come si fa da codice.
Con gli script fatti bene, senza troppa fatica, riesco a dimensionare layout che veramente funzionano su ogni dispositivo su entrambe le direzioni.
Con la proprietà ActivitySize puoi anche decidere di variare le proporzioni in modo da aumentare o diminuire il numero di righe e colonne visibili in una maschera senza fare un resize stupido. Ad esempio un display da 5" potrà contenere oggetti con un passo di 20%x (quindi 5) mentre uno in uno da 10 non ci metto 5 bottoni grossi come cavallette, ma farò un passo di 10%x e quindi faccio una bella righina da 10 bottoni e tolgo la scroll.
 

LucaMs

Expert
Licensed User
Longtime User
Diciamo che AutoScaleAll funziona con un po' a caso (per non essere scurrile).
Dopo oltre due anni di lotte, forse sarebbe il caso di essere scurrili :D

Lo lascio solo per gestire automaticamente le heignt e il text size
Ma non va bene nemmeno per quelle! Anzi, soprattutto il text size è un... casino (ma, si, usiamo i termini specifici!).

Io capisco che, purtroppo, tra i vari dispositivi, gli screen hanno un rapporto base/altezza differente, ma come ti spieghi la grossa differenza che c'è tra le due immagini del mio post precedente (tra l'altro, ho aperto l'ennesimo thread su questo nel Questions).

Non vorrei disilluderti, ma hai provato i tuoi layout sul Cloud? Confronta anche tu, lì, un tablet da 10" e uno smarphone da 4"-4.3" e guardali bene.

Nel caso dell'immagine precedente, un solo button, questo è molto sproporzionato, tra i due modelli; ed ho lasciato soltanto AutoScaleAll.
 

LucaMs

Expert
Licensed User
Longtime User
L'ho usato fin da subito, appena mi accorsi che il Designer non funzionava (ho anche "collaborato" nello scoprire che gli mancava una cosa importantissima, ovvero non venivano tenute in considerazione la barra di sistema e del titolo, cioè il Full Screen e lo ShowTitle).

Il punto è che se uso quel modulo (e lo preferisco nettamente) non posso usare l'UI Cloud!
 

LucaMs

Expert
Licensed User
Longtime User
Devo essere sincero...

Oltre due anni fa iniziai ad avvicinarmi ad Android, col classico Eclipse.
Poi scoprii B4A e mi sembrava che, grazie al fatto che era Basic like e grazie al suo Designer, avrei potuto sviluppare tutto molto più velocemente (tra l'altro non conoscendo Java).

Adesso ho grossi dubbi. Se avessi continuato in quel modo, in poco tempo avrei imparato Java (del resto, VB.Net non è molto differente, se non nella sintassi).
Qui ci si affida troppo alle varie librerie, che tra l'altro nel 90% dei casi sono wrapper di codice gratuito trovato in giro e che quindi si sarebbe potuto utilizzare direttamente in Eclipse (a quel punto, sapendolo anche modificare a proprio piacimento).
 

luciano deri

Active Member
Licensed User
Longtime User

10" script + AutoScale

10" Solo Autoscale

10" Solo scrit senza AutoScale
(Non riesco a caricare le immagini del cloud, vabè fidatevi che la prima era meglio delle altre due)
Tutto il Designer è stato progettato con Variant 320x480 scale 1 = (160dpi).

Anche io avevo iniziato con Eclipse, partendo con zero conoscenze in java. A livello culturale Java è più prezioso, sviluppare nel linguaggio definitivo sicuramente rende il progetto più efficiente, ma come tempi di sviluppo a un livello qualitativo comunque accettabile B4A è molto più rapido e intuitivo.
Ci sono altri strumenti, forse anche più competitivi (qualcuno mi ha parlato di Apache Cordova), ma io per adesso mi accontento di B4A.
 
Quindi cosa mi consigliate di fare? Io sto impazzendo ormai da giorni o_O comunque perchè mi dovrei basare sull'atezza e non sulla larghezza? io ho dei button creati in runtime con dimensioni 13.7% sia per x che per y, poi imposto il textsize a 3.3 per gli schermi con larghezza inferiore a 720, 2 peer quelli compresi tra 720 e 1080, e per il resto lo imposto a 1.55, teoricamente dovrebbe essere sempre intorno a 21, pero su quelli grandi non va :( aiutatemi se potete :( ditemi se è un idea sbagliata o meno :(
 

luciano deri

Active Member
Licensed User
Longtime User
Io i bottoni li faccio quadrati con l'immagine e gravity Fill.
B4X:
 Script:
If ActivitySize <= 4 Then
    button.Height = 8.5%y
End If
If ActivitySize > 4 And ActivitySize <= 7 Then
    button.Height = 6%y
End If
If ActivitySize > 7 And ActivitySize <= 10 Then
    button.Height = 5%y
End If  
If ActivitySize > 10 Then
    button.Height = 4%y
End If  
button.Width = button.Height

Codice
Sub DeterminaLayout
    Dim lv As LayoutValues
lv = GetDeviceLayoutValues
Dim screensize As Double
screensize = lv.ApproximateScreenSize
Log (screensize)
Select True
    Case screensize <= 4
        LayLoad = 1
    Case screensize > 4 And screensize <= 7
        LayLoad = 2      
    Case screensize > 7 And screensize <= 10
        LayLoad = 3      
    Case screensize > 10
        LayLoad = 4              
End Select  
' in base a LayLoad dimensiono i font e tutte quelle 'dimensioni non gestite da scrip
End Sub
 
Top