Spanish Problemas al escalar un CustomListView en dispositivos diversos

RichardI

New Member
Tengo una samsung tablet con un display de 1280x752 escala = 1 (160dpi) y un teléfono celular con un display de 5 pulgadas y con las siguientes características: 480x798, escala = 1.5 (240 dpi).

Estoy creando un CustomListView de forma dinámica pero me encuentro que cuando ejecuto el código en ambos dispositivos, obtengo resultados diferentes. En la siguiente imagen muestro mi ejemplo:

upload_2018-6-3_8-2-25.png


En la parte central del diseñador estoy agregando el control antes mencionado. Estoy usando un tamaño de 2dip x 166dip x 270dip x 222dip. si lo ejecuto en el celular queda perfecto, pero cuando paso a la tablet, me lo coloca encima de los controles "imageview1" y "lbltracking".

El código que tengo escrito para este programa es:

B4X:
#Region  Activity Attributes
#FullScreen: True
#IncludeTitle: False
#End Region

Sub Process_Globals
Type tTrackings (lTracking As String)
Dim Trackings As tTrackings
End Sub

Sub Globals
Private btnSalir As ImageView
Private sTrackings As CustomListView
Private tracking As EditText
Private btnGetdata As ImageView
Private btnLeer As ImageView
Private txtTotal As Label
' color naranja.RGB(255,105,10)
' color verde  .RGB(22,112,0)
Private lblTracking As Label
Private Label4 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("AppLeeManifiestos")
sTrackings.Initialize(Me,"sTrackings")
sTrackings.AsView.Color = Colors.White
Activity.AddView(sTrackings.AsView,20dip,166dip,270dip,222dip)
tracking.RequestFocus
Trackings.Initialize
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub btnSumatoria_Click
End Sub

Sub btnSalir_Click
Activity.Finish
End Sub

Sub tracking_EnterPressed
If tracking.Text <> "" Then
sTrackings.Add(CreateListItem(tracking.text, sTrackings.AsView.Width, 22dip),22dip,tracking.text)
End If
tracking.text = ""
txtTotal.Text = sTrackings.GetSize
End Sub

Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
Dim p As Panel
p.Initialize("")
p.Color = Colors.White
Dim lbl As Label
lbl.Initialize("")
lbl.Text = Text
lbl.TextSize = 12
lbl.TextColor = Colors.RGB(22,112,0)
lbl.Typeface = Typeface.LoadFromAssets("helvetica-normal.ttf")
p.AddView(lbl, 2dip, 2dip, 200dip, 15dip) 'view #0
Return p
End Sub

Sub tracking_FocusChanged (HasFocus As Boolean)
tracking.RequestFocus
End Sub

Sub sTrackings_ItemClick (Index As Int, Value As Object)
Label4.Text = Value
End Sub

Sub btnGetdata_Click
' Log("entre a guardar")
'
Try
'
File.WriteList(File.DirInternal,"ListaTracks.txt", ListaTracks)
'
Log(File.DirInternal)
'
Log("Guardado")
'
Catch
'
Log("Error al escribir fichero ListaTracks.dat")
' End Try
End Sub

Si alguien pudiese orientarme al respecto de lo que estoy haciendo mal, estaré agradecido con sus comentarios.

Saludos
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Tengo una samsung tablet con un display de 1280x752 escala = 1 (160dpi) y un teléfono celular con un display de 5 pulgadas y con las siguientes características: 480x798, escala = 1.5 (240 dpi).

Estoy creando un CustomListView de forma dinámica pero me encuentro que cuando ejecuto el código en ambos dispositivos, obtengo resultados diferentes. En la siguiente imagen muestro mi ejemplo:

View attachment 68573

En la parte central del diseñador estoy agregando el control antes mencionado. Estoy usando un tamaño de 2dip x 166dip x 270dip x 222dip. si lo ejecuto en el celular queda perfecto, pero cuando paso a la tablet, me lo coloca encima de los controles "imageview1" y "lbltracking".

El código que tengo escrito para este programa es:

B4X:
#Region  Activity Attributes
#FullScreen: True
#IncludeTitle: False
#End Region

Sub Process_Globals
Type tTrackings (lTracking As String)
Dim Trackings As tTrackings
End Sub

Sub Globals
Private btnSalir As ImageView
Private sTrackings As CustomListView
Private tracking As EditText
Private btnGetdata As ImageView
Private btnLeer As ImageView
Private txtTotal As Label
' color naranja.RGB(255,105,10)
' color verde  .RGB(22,112,0)
Private lblTracking As Label
Private Label4 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("AppLeeManifiestos")
sTrackings.Initialize(Me,"sTrackings")
sTrackings.AsView.Color = Colors.White
Activity.AddView(sTrackings.AsView,20dip,166dip,270dip,222dip)
tracking.RequestFocus
Trackings.Initialize
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub btnSumatoria_Click
End Sub

Sub btnSalir_Click
Activity.Finish
End Sub

Sub tracking_EnterPressed
If tracking.Text <> "" Then
sTrackings.Add(CreateListItem(tracking.text, sTrackings.AsView.Width, 22dip),22dip,tracking.text)
End If
tracking.text = ""
txtTotal.Text = sTrackings.GetSize
End Sub

Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
Dim p As Panel
p.Initialize("")
p.Color = Colors.White
Dim lbl As Label
lbl.Initialize("")
lbl.Text = Text
lbl.TextSize = 12
lbl.TextColor = Colors.RGB(22,112,0)
lbl.Typeface = Typeface.LoadFromAssets("helvetica-normal.ttf")
p.AddView(lbl, 2dip, 2dip, 200dip, 15dip) 'view #0
Return p
End Sub

Sub tracking_FocusChanged (HasFocus As Boolean)
tracking.RequestFocus
End Sub

Sub sTrackings_ItemClick (Index As Int, Value As Object)
Label4.Text = Value
End Sub

Sub btnGetdata_Click
' Log("entre a guardar")
'
Try
'
File.WriteList(File.DirInternal,"ListaTracks.txt", ListaTracks)
'
Log(File.DirInternal)
'
Log("Guardado")
'
Catch
'
Log("Error al escribir fichero ListaTracks.dat")
' End Try
End Sub

Si alguien pudiese orientarme al respecto de lo que estoy haciendo mal, estaré agradecido con sus comentarios.

Saludos

Hola

Lo estas haciendo bien, el problema es las diferencias tan grandes de resoluciones, una opción que yo empleo cuando creo objetos en tiempo de ejecución es diferenciar si es movil o tablet, y asi cambiar los tamaños.

B4X:
If GetDeviceLayoutValues.ApproximateScreenSize > 6 Then
  ' Es tablet
  EsTablet = True  ' empleo esta variable global para cambiar tamaños
Else
  ' No es tablet, es movil
  EsTablet = False
End If


Saludos
 
Top