Italian Activity non considerano Navigation Toolbar

Gianni Sassanelli

Active Member
Licensed User
Longtime User
Buongiorno a tutti,
ho un problema con la mia app quando tento di usarla su device con risoluzione 1080 x 1920 (HTC M9)

Ho disegnato il layout della mia activity utilizzando una dimensione 1280 x 800 (risoluzione base scale 1)
Ho inserito nel Bal la voce AUTOSCALE ALL

#Region Project Attributes
#SupportedOrientations: sensorLandscape 'Forzo la App in LandScape
#End Region

A questo punto se eseguo l'applicazione sul mio telefono il risultato è che viene eseguita la rotazione, ma la videata va sotto la navigation toolbar come visibile nello screen shot allegato
Questo però accade solo con la risoluzione 1080 x 1920
su altre risoluzioni tutto è ok

Ho provato con gli emulatori AVD android ed ho creato diversi emulatori cambiando solo la risoluzione.
Ebbene se creo un emulatore con questa risoluzione, mi accade lo stesso problema, ovvero che si ruota lo schermo ma la navigation toolbar rimane sulla Destra anzichè in basso e quindi B4a non se ne accorge.

Come potete vedere la differenza sta nel fatto che in altre risuluzioni quando lo schermo ruota, la navigation toolbar si posiziona in basso (vedi img_2.png), mentre nella risoluzione 1080 x 1920 la toolbar si sposta sulla destra (vedi img_4.png) e questo mi genera casini
 

Attachments

  • img_wrong.png
    img_wrong.png
    85.5 KB · Views: 223
  • img_1.png
    img_1.png
    66 KB · Views: 225
  • img_2.png
    img_2.png
    61.9 KB · Views: 223
  • img_wrong.png
    img_wrong.png
    85.5 KB · Views: 238
  • img_4.png
    img_4.png
    338.7 KB · Views: 285

LucaMs

Expert
Licensed User
Longtime User
Io non sarei così sicuro che questo accada solo con quella particolare risoluzione.

Perché non hai semplicemente impostato:
#SupportedOrientations: landscape
?

Comunque, tu puoi fare in modo che la navigation bar sparisca del tutto (l'utente deve scorrere il dito per visualizzarla di nuovo) usando la modalità "Immersive".

Il codice è quello dell'esempio di Erel:

B4X:
Sub Activity_Create(FirstTime As Boolean)
 
   ' ***  Sets "immersive" mode.  ***
   Activity_WindowFocusChanged(True)
   Dim lv As LayoutValues = GetRealSize
   Dim jo As JavaObject = Activity
   jo.RunMethod("setBottom", Array(lv.Height))
   jo.RunMethod("setRight", Array(lv.Width))
   Activity.Height = lv.Height
   Activity.Width = lv.Width
 
   Activity.LoadLayout("IlTuoLayout")
End Sub

B4X:
Sub Activity_WindowFocusChanged(HasFocus As Boolean)
   If HasFocus Then
       Try
           Dim jo As JavaObject = Activity
           Sleep(100)
           jo.RunMethod("setSystemUiVisibility", Array As Object(5894)) '3846 - non-sticky
       Catch
           
       End Try
   End If
End Sub

Sub GetRealSize As LayoutValues
   Dim lv As LayoutValues
   Dim p As Phone
   If p.SdkVersion >= 17 Then
       Dim ctxt As JavaObject
       ctxt.InitializeContext
       Dim display As JavaObject = ctxt.RunMethodJO("getSystemService", Array("window")).RunMethod("getDefaultDisplay", Null)
       Dim point As JavaObject
       point.InitializeNewInstance("android.graphics.Point", Null)
       display.RunMethod("getRealSize", Array(point))
       lv.Width = point.GetField("x")
       lv.Height = point.GetField("y")
   Else
       lv.Width = 100%x
       lv.Height = 100%y
   End If
   lv.Scale = 100dip / 100
   Return lv
End Sub

Scrivendo questo codice nelle tue Activity, la navigation bar non dovrebbe comparire, né sotto né a destra.
 

Star-Dust

Expert
Licensed User
Longtime User
Buongiorno a tutti,
ho un problema con la mia app quando tento di usarla su device con risoluzione 1080 x 1920 (HTC M9)

Ho disegnato il layout della mia activity utilizzando una dimensione 1280 x 800 (risoluzione base scale 1)
Ho inserito nel Bal la voce AUTOSCALE ALL

#Region Project Attributes
#SupportedOrientations: sensorLandscape 'Forzo la App in LandScape
#End Region

A questo punto se eseguo l'applicazione sul mio telefono il risultato è che viene eseguita la rotazione, ma la videata va sotto la navigation toolbar come visibile nello screen shot allegato
Questo però accade solo con la risoluzione 1080 x 1920
su altre risoluzioni tutto è ok

Ho provato con gli emulatori AVD android ed ho creato diversi emulatori cambiando solo la risoluzione.
Ebbene se creo un emulatore con questa risoluzione, mi accade lo stesso problema, ovvero che si ruota lo schermo ma la navigation toolbar rimane sulla Destra anzichè in basso e quindi B4a non se ne accorge.

Come potete vedere la differenza sta nel fatto che in altre risuluzioni quando lo schermo ruota, la navigation toolbar si posiziona in basso (vedi img_2.png), mentre nella risoluzione 1080 x 1920 la toolbar si sposta sulla destra (vedi img_4.png) e questo mi genera casini
Hai provato su un dispositivo reale?

Se le viste sono orizzontali evidentemente il sistema è impostato correttamente in Landascape come settato nell'attributo.
Che la barra non corrisponda all'orientamento delle viste immagino sia un errore firmware non di B4A. Il sistema sembra riconoscere l'impostazione Landascape sulle viste ma sbaglia la barra. Ecco perché io proverei su un dispositivo fisico. Magari il firmware dell'emulatore non è corretto.

Diverso sarebbe se anche le viste fossero in portrait. Allora supporremo che l'attributo sia ignorato, quindi useremmo altri metodi per forzare il Landascape da codice. Ma non è questo il caso
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Dimenticavo... a volte, in modalità debug, questo codice manda in crash l'app.

Ora non ricordo con certezza ma se succede, cambia di poco il valore nella Sleep e/o aggiungine una nel blocco Catch che si trova in
Activity_WindowFocusChanged.
 

Gianni Sassanelli

Active Member
Licensed User
Longtime User
allora rispondo in sequenza.
1) uso sensorlandscape in quanto su alcuni device quando si imposta il Landscape lo schermo viene ruotato al contrario quindi si userebbe il tablet di testa in giù. questo cambia poco per la app ma è brutto da vedersi.
2) si ho usato un dispositivo reale (HTC M9) il mio telefono sul quale ho iniziato a vedere il problema. Dopodichè ho creato un emulatore con le stesse caratteristiche del telefono per verificare se era solo un problema del software sul mio telefono. Ebbene ho verificato che sull'emulatore settato con quella particolare risoluzione capita lo stesso problema.
3) le viste sono create direttamente in modalità landscape. In questo caso sono partito da una risoluzione 1280 x 800 . Ho disegnato tutto in questa risoluzione ma ho verificato che partendo da questa risoluzione, l'AUTOSCALE non funziona benissimo. Se parto da una risoluzione di 320x480 lo scale va invece molto bene

Ho comunque risolto nascondendo la navigationtoolbar.
 

Star-Dust

Expert
Licensed User
Longtime User
Autoscale non è perfetto, è risaputo.

Infatti con B4XCanvas è stato aggiunta una funzione per misurare la dimensione del testo e consentire di adattarlo alla dimensione della vista.

Per il resto sono convinto che sia una questione di Android. Avevo un tablet Mediacom che sia in orizzontale che verticale la barra rimaneva senpre agganciata sullo stesso lato della cornice.
 
Last edited:
Top