Italian Ancorare dei controlli (button, panel , imageview) in proporzione al display

Matteo Granatiero

Active Member
Licensed User
Come da titolo vorrei sapere come fare ad ancorare e quindi adattare i controlli (button, imagevie, panel) in base al display del dispsitivo di installazione.
Da come ho potuto notare e provare le semplici frecce di ancoraggio di ogni controllo disponibili nel Form di anteprima non servono a molto in questo caso.
Infatti capita che se installo l'app in uno schermo ridotto non adatta i controlli in basso al limite del display e quindi non visualizzandoli.
 

Matteo Granatiero

Active Member
Licensed User
Se devi realizzare una Griglia usa una libreria apposita. Tu ancori solo la View Principale e all'interno le varie Celle sono distribuite proporzionalmente allo spazio dalla classe.
Vedi ad esempio questa: https://www.b4x.com/android/forum/threads/sd-menuextender.88991/
mh perdona la mia ignoranza ma non so come possa aiutarmi, chiedo solamente di poter ancorare dei button e imageview in proporzione alle dimensioni del display del telefono di installazione, ho solamente 5 pulsanti in verticale e vorrei che nel caso fosse piu piccolo lo schermo per contenerli questi pulsanti si autorimpiccioliscono e non che diventano scrollabili. Grazie per la pazienza
 

LucaMs

Expert
Licensed User
Longtime User
Se vuoi che le view vengano proporzionate esattamente rispetto alle dimensioni del dispositivo, cioè vuoi ottenere che, ad esempio, un tasto alto 50 su un display alto 500 diventi 100 su un dispositivo alto 1000, devi impostare AutoScaleRate(1).

Questa non è però la soluzione a tutti i problemi, purtroppo.

Gli ancoraggi, secondo la mia opinione, "funzionano" soltanto per le view che "costeggiano" i bordi; per quelle centrali dovrai usare lo script (per le distanze tra le view).
 

Gottrik

Member
Licensed User
Longtime User
Tutte le volte che vedo un nuovo “post” dedicato al maledetto problema legato alle diverse caratteristiche degli schermi Android, corro ad aprirlo sperando di trovarvi la “soluzione finale”.

Anchor e/o Autoscale ecc. , i consigli del bravo LucaMs ( che ringrazio per i suoi utili interventi) , ma nessun rimedio valido al 100% per risolvere questo odioso problema …

LucaMs giustamente ha fatto questa considerazione : pensate un po’ cosa potrebbe avvenire se i costruttori di televisori non rispettassero il formato 16:9 ?

Ma allora, a questo punto mi chiedo … perché tutto questo casino ?

I casi sono due:

1° caso – I “padroni di Android” vogliono che la realizzazione delle “App” rimanga circoscritta ad un esiguo numero di programmatori “superdotati “ ( nel campo dell’informatica … ) escludendo gli imbranati come il sottoscritto … già notevolmente penalizzati in passato con l’eliminazione delle vecchie istruzioni come Goto, GoSub ecc. ecc.

Se questa mia ipotesi fosse vera, tutto questo avrebbe almeno una giustificazione .


2° caso – Il caos totale dovuto alle diverse caratteristiche degli schermi è la conseguenza di un mancato controllo da parte dei “padroni di Android” , ovvero : Imbecillità allo stato puro !

Saluti
 

LucaMs

Expert
Licensed User
Longtime User
Tutte le volte che vedo un nuovo “post” dedicato al maledetto problema legato alle diverse caratteristiche degli schermi Android, corro ad aprirlo sperando di trovarvi la “soluzione finale”.
:D

Che purtroppo non esiste.


Non arrivo proprio a capire il perché di questa non unificazione. Di solito i motivi per azioni varie sono commerciali, economici, ma in questo caso non ne vedo; nessuno gli vieterebbe di realizzare i propri smartphone, ad esempio, dai 4" ai 7", volendo, con 100 o 1000 dpi (se ci riescono), sempre in formato standard (meglio se 16:9), senza avere vantaggi o svantaggi economici, solo grane per i programmatori. Anzi, probabilmente unificando il formato, i produttori molto probabilmente risparmierebbero qualche cent.


Tornando alla "soluzione finale", forse un modo ci sarebbe... forse (dovrei provare): creare dai layout con un pannello centrale, distanziato dai 4 bordi diciamo almeno 10dip e caricare nel pannello un layout creato delle stesse dimensioni del pannello e con AutoScaleRate(1), che in pratica equivale ad usare le percentuali.

Poi, se avessimo pazienza e tempo, dovremmo tenere in considerazione la distinzione tra smartphone e tablet e creare layout diversi nei due casi, come ad esempio una lista (xCLV) di prodotti ed una scheda dettaglio: su smartphone, su due pannelli scorrevoli, su tablet i due pannelli affiancati.
 

Matteo Granatiero

Active Member
Licensed User
Se vuoi che le view vengano proporzionate esattamente rispetto alle dimensioni del dispositivo, cioè vuoi ottenere che, ad esempio, un tasto alto 50 su un display alto 500 diventi 100 su un dispositivo alto 1000, devi impostare AutoScaleRate(1).

Questa non è però la soluzione a tutti i problemi, purtroppo.

Gli ancoraggi, secondo la mia opinione, "funzionano" soltanto per le view che "costeggiano" i bordi; per quelle centrali dovrai usare lo script (per le distanze tra le view).
Ho appena provato con AutoScale(1) sotto al Designer Script e mi da questo errore
B4X:
B4A Versione: 8.00
Analisi del Codice.    (0.10s)
Compilazione del codice.    (0.24s)
Compilazione del codice di layouts    (0.04s)
Organizzazione Librerie.    (0.00s)
Generazione file R.    (4.14s)
Compilazione del codice Java prodotto.    Error
Error compiling designer script.
File: menu, variant: General script
Line value: AutoScaleAll(1)
javac 1.8.0_144
src\com\gryan\dressup\designerscripts\LS_menu.java:12: error: ';' expected
anywheresoftware.b4a.keywords.LayoutBuilder.scaleAll(views)BA.NumberToString((1d));
                                                           ^
1 error
 

udg

Expert
Licensed User
Longtime User
Per un "effetto fotocopiatore" (nel senso di ingrandimento/riduzione in funzione dello spazio utile sul device) prova il seguente layout.

Ci sono 5 Button, ugualmente spaziati tra loro. La spaziatura è 1/2 dell'altezza del Button.
Qualcosa di simile si può fare anche per la larghezza
 

Attachments

  • 1.bal
    3.7 KB · Views: 208
Top