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
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
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…