Spanish [SOLUCIONADO]Como evitar que teclado tape editext y otro elementos?

ferpahud

Active Member
Licensed User
Hola bueno dias, queria saber si existe alguna posibilidad de que el teclado no tape un editext, y demas componentes de una pantalla.

Tengo una pantalla donde el usuario hace varias cargar, y cuando presiona los ultimos editext el teclado tapa los restantes. Hay alguna posibilidad para que esto no pase? se puede achicar el teclado? se puede meter toda la pantalla como en un scroll y cuando el cursor se pare en un editext lo ponga a este en la parte superior de la pantalla?

Desde ya muchas gracias.

Saludos!
 

bgsoft

Well-Known Member
Licensed User
Hola

Esto es el código simplificado de la dirección que te dio dar2o3. En PanelGeneral (es un Panel) he incluido los EditText y asi muevo todo el panel. Tendras que jugar un poco con los tantos por ciento que te vayan mejor. Hazte un pequeño programa de pruebas y asi veras rápido como funciona.

B4X:
Sub Globals
  Dim IME As IME


Sub Activity_Create(FirstTime As Boolean)

    IME.Initialize("IME")
    IME.AddHeightChangedEvent

    'llamar manualmente a este método para establecer la disposición de teclado
    IME_HeightChanged(-60%y,0)
  




Sub IME_HeightChanged(NewHeight As Int, OldHeight As Int)
    ' para subir la entrada de datos y que este encima del teclado

    Log("NewHeight " & NewHeight & " OldHeight " & OldHeight)
    PanelGeneral.Top= NewHeight-PanelGeneral.Height
  
End Sub

Saludos
 

ferpahud

Active Member
Licensed User
Hola

Esto es el código simplificado de la dirección que te dio dar2o3. En PanelGeneral (es un Panel) he incluido los EditText y asi muevo todo el panel. Tendras que jugar un poco con los tantos por ciento que te vayan mejor. Hazte un pequeño programa de pruebas y asi veras rápido como funciona.

B4X:
Sub Globals
  Dim IME As IME


Sub Activity_Create(FirstTime As Boolean)

    IME.Initialize("IME")
    IME.AddHeightChangedEvent

    'llamar manualmente a este método para establecer la disposición de teclado
    IME_HeightChanged(-60%y,0)
 




Sub IME_HeightChanged(NewHeight As Int, OldHeight As Int)
    ' para subir la entrada de datos y que este encima del teclado

    Log("NewHeight " & NewHeight & " OldHeight " & OldHeight)
    PanelGeneral.Top= NewHeight-PanelGeneral.Height
 
End Sub

Saludos
Muchas gracias por la ayuda, lo que no entiendo es a que te refieres con panel?
 

bgsoft

Well-Known Member
Licensed User
Hola

Como ya te dije:
En PanelGeneral (es un Panel) he incluido los EditText y asi muevo todo el panel.

Muchas gracias por la ayuda, lo que no entiendo es a que te refieres con panel?
Panel es un objeto panel, en el cual he incrustado varios EditText , pero ya te dije que si pones un solo EditText , cambia:

B4X:
    PanelGeneral.Top= NewHeight-PanelGeneral.Height

Por:

B4X:
    EditText1.Top= NewHeight-EditText1.Height ' o el nombre del EditText que quieras mover

Saludos
 

bgsoft

Well-Known Member
Licensed User
Hola Ferpahud, ya probaste el código?, lo digo por que si te fue bien, seria interesante que añadieras al titulo [SOLUCIONADO], asi vamos creando un foro mas dinamico.

Gracias

Saludos
 

tomky

Active Member
Licensed User
A mi no se por qué no me funciona ese código de bgsoft.

En cambio si me funciona:

B4X:
Sub EditText_FocusChanged (HasFocus As Boolean)
    If HasFocus = True Then
        ScrollView.ScrollPosition=EditText.Top
    End If
End Sub

Teniendo suficiente margen el scrollview. En mi caso:

B4X:
    ScrollView.Initialize(160%y)

Saludos.
 

ferpahud

Active Member
Licensed User
Hola Ferpahud, ya probaste el código?, lo digo por que si te fue bien, seria interesante que añadieras al titulo [SOLUCIONADO], asi vamos creando un foro mas dinamico.

Gracias

Saludos
Al final no puede solucionarlo de esa manera, lo que hice fue achicar los demas elementos para que el teclado no los tapara :(
 
Top