Italian Fissare orientamento schermo in base al device

Gianni Sassanelli

Active Member
Licensed User
Longtime User
Buongiorno a tutti,
avrei la necessità di fissare l'orientamento dello schermo in modo Portrait o LandScape in base al tipo di device.

Vorrei fare la cosa nel Manifest oppure nella #Region Project Attributes

Qualcosa tipo
#IF device_is_tablet
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: landscape
#ELSE
#SupportedOrientations: portrait


qualcuno può aiutarmi per cortesia?
Grazie.
 

Sagenut

Expert
Licensed User
Longtime User
In attesa di soluzioni migliori che magari non conosco potresti fare 2 Activity:
una orientata in Portrait per i telefoni e una orientata in Landscape per i Tablet.
Per rilevare se il device è un telefono o un tablet puoi provare questo codice
B4X:
Sub Activity_Create(FirstTime As Boolean)
   If GetDevicePhysicalSize > 6 Then
      '7'' or 10'' tablet
   Else
      'phone
   End If
End Sub

Sub GetDevicePhysicalSize As Float
   Dim lv As LayoutValues
   lv = GetDeviceLayoutValues
   Return Sqrt(Power(lv.Height / lv.Scale / 160, 2) + Power(lv.Width / lv.Scale / 160, 2))
End Sub
In base al risultato lancerai l'Activity relativa.
Il problema è che in pratica avrai 2 volte lo stesso codice nelle 2 Activity, che di differente avranno solo il Layout immagino.
Quindi cerca di spostare la maggior parte del codice in classi e moduli in modo da potervi accedere da entrambe le Activity senza doverlo riscrivere 2 volte.
Questa è la mia idea.
 
Last edited:

arenaluigi

Well-Known Member
Licensed User
Longtime User
Buongiorno a tutti,
avrei la necessità di fissare l'orientamento dello schermo in modo Portrait o LandScape in base al tipo di device.

Vorrei fare la cosa nel Manifest oppure nella #Region Project Attributes

Qualcosa tipo
#IF device_is_tablet
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: landscape
#ELSE
#SupportedOrientations: portrait


qualcuno può aiutarmi per cortesia?
Grazie.
Hai provato con le varianti ?
 

Gianni Sassanelli

Active Member
Licensed User
Longtime User
Salve a tutti Luigi e Savenut,
in effetti ho seguito entrambe le strade,
ma purtroppo in entrambi i casi nascono dei problemi

Premetto che nel main gestisco il riconoscimento del device e quindi imposto una property pubblica Is_Tablet = True quando riconosco un tablet.

Il problema sta nel comportamento, infatti nel main ho scritto
#SupportedOrientations: unspecified ' questo mi consente tutti gli orientamenti

Ma purtroppo non posso gestirlo nelle activity altrimenti il gioco sarebbe fatto. (SOB)


Nelle activity nell'evento CREATE faccio così

B4X:
    Dim P As PHONE
    If Main.Is_Tablet Then 
        p.SetScreenOrientation(0)
        Activity.LoadLayout("lay_sincro_dati_Landscape")
    Else  
        p.SetScreenOrientation(1) 
        Activity.LoadLayout("lay_sincro_dati_Portrait")
    End If

Purtroppo però durante l'attività capita che gli utenti mentre lanciano una voce di menù che richiama un'activity, hanno il dispositivo coricato quindi il sistema riconosce la modalità LandScape e quindi quando parte l'activity parte Rotata e posi con il mio codice si gira.

Invece gestendo una condizione manifest potrei bloccare il portrait sui cellulari e Landscape sui tablet.

Servirebbe nel manifest qualcosa di questo tipo, condizionata sul tipo di device, ma non so come fare

#if java
public void _onCreate() {
if (_theme_value != 0)
setTheme(_theme_value);
}
#end if
 

Sagenut

Expert
Licensed User
Longtime User
Questo potrebbe risolvere il problema degli orientamenti diversi con più Activity

Activity Orientation
 
Top