Manter o foco no controle em edição acima do teclado virtual

Android

Delphi

23/01/2015

Bom dia;

Estou criando um app Android utilizando Delphi XE5,

Quando o teclado virtual aparece por padrão ele cobre a caixa que está sendo editado, se for abaixo da metade inferior da tela.

Como faço para rolar o formulário para que o campo que está sendo editado permaneça visível?

Obrigado
Adiel França

Adiel França

Curtidas 0

Melhor post

Lucas Ramos

Lucas Ramos

11/02/2015

No form coloque esses códigos nos eventos, o código ainda não ta 100% mas já ajuda e da uma idéia de como vocês tem que fazer, usei esse no delphi XE7 verifiquem para o XE5

procedure TFPrincipal.FormVirtualKeyboardHidden(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
     FTecladoShow := false;

     if not KeyboardVisible then
        AnimateFloat('Padding.Top', 0, 0.1);
end;


procedure TFPrincipal.FormVirtualKeyboardShown(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect);
var
     O: TFMXObject;
begin
     FTecladoShow := true;

     if Assigned(Focused) and (Focused.GetObject is TControl) then
        if TControl(Focused).AbsoluteRect.Bottom - Padding.Top >= (Bounds.Top - DoneBarHeight) then
        begin
             //If switching between controls, the KeyboardHidden animation will run first
             //and we'll see the form scroll up and then down.
             //Calling StopPropertyAnimation jumps the first animation to it's final value - same problem
             //Instead we need to search for the other animation and call StopAtCurrent.
             for O in Children do
                 if (O is TFloatAnimation) and (TFloatAnimation(O).PropertyName = 'Padding.Top') then
                    TFloatAnimation(O).StopAtCurrent;

             AnimateFloat('Padding.Top',Bounds.Top - DoneBarHeight - TControl(Focused).AbsoluteRect.Bottom + Padding.Top, 0.1)
        end
        else
     else
        AnimateFloat('Padding.Top', 0, 0.1);
end;
GOSTEI 3

Mais Respostas

Prime Ltda

Prime Ltda

23/01/2015

Estou com a mesma dúvida! Vc já conseguiu resolver?

Grato!
GOSTEI 0
Prime Ltda

Prime Ltda

23/01/2015

Obrigado pela resposta!
Fiz a implementação aqui e acontece o seguinte...
na primeira procedure está dando um erro na linha:
FTecladoShow := false;
GOSTEI 0
Lucas Ramos

Lucas Ramos

23/01/2015

Bom Dia

Essa é uma variável global declara no seu form ou remova a atribuição se for declarar ela é do tipo Boolean.
GOSTEI 1
Mauricio Abreu

Mauricio Abreu

23/01/2015

Prezado,

Estamos com querendo que um Edit no Android receba apenas numeros e vírgula (,) ou ponto (.) , já setamos no xe7 a propriedade Keyboardtype para NumbersandPunctuation e o mesmo vem com todos os caracteres.
Sabe como fazer isso?
GOSTEI 0
Williamdiego2

Williamdiego2

23/01/2015

Amigos oque seria isto (DoneBarHeight), aqui esta em vermelho!
GOSTEI 0
Felipe Santos

Felipe Santos

23/01/2015

Camarada,
Muito obrigado, funcionou maravilhosamente.

Apenas tive que adicionar no Uses FMX.Ani que não estava explicado.

Também declarei a Variavel FTecladoShow como Boolean, apesar de que não estou usando ela em outros momentos, pois consigo capturar este status através dos metodos em FMX.VirtualKeyboard.IFMXVirtualKeyboardService (ex.: GetVirtualKeyboardState).

Outra alteração que precisei realizar foi trocar DoneBarHeight pelo Height do meu Toolbar (ex.: Tb_topo.Height ).

Enfim, muito obrigado e espero que as informações ajudem os demais.

PS: Usado no XE8.
GOSTEI 1
Esquilo Tranquilo

Esquilo Tranquilo

23/01/2015

Camarada,
Muito obrigado, funcionou maravilhosamente.

Apenas tive que adicionar no Uses FMX.Ani que não estava explicado.

Também declarei a Variavel FTecladoShow como Boolean, apesar de que não estou usando ela em outros momentos, pois consigo capturar este status através dos metodos em FMX.VirtualKeyboard.IFMXVirtualKeyboardService (ex.: GetVirtualKeyboardState).

Outra alteração que precisei realizar foi trocar DoneBarHeight pelo Height do meu Toolbar (ex.: Tb_topo.Height ).

Enfim, muito obrigado e espero que as informações ajudem os demais.

PS: Usado no XE8.


Boa tarde camaradas,

Muito obrigado pelo post de todos, me ajudaram muito.

Mas Felipe, que estrutura vc está usando? É que no meu projeto ele está tipo assim dando uma esticada forte nos Edits e não ficou 100%

Eu estou utilizando um VertScrollBox (AlClient), dentro dele um Layout (AlClient) e dentro deste um Scaledlayout (AlClient), com essa configuração o sistema redimensiona a tela para outros tamanhos e tals.
Porém como comentei, não fica bom o esquema de subir o edit para que o teclado virtual não sobreponha o campo e eu n veja oq estou digitando.

Por favor, peço sua ajuda e dos demais.

obrigado.

Att,
GOSTEI 0
Experidiao Santos

Experidiao Santos

23/01/2015

No Rad Studio 8. tem um exemplo : c:\\user\\public\\Documents\\embarcadero\\16.0\\samples\\object pascal\\mobile samples\\user interface\\keybordtypes\\

Quem tiver outras versões, talvez mude um pouco o caminho.


até mais
GOSTEI 0
Adiel França

Adiel França

23/01/2015

Resposta está nesse site do mestre Rodrigo Mourão:

http://www.rodrigomourao.com.br/tvertscrollbox-aprenda-a-evitar-que-o-teclado-virtual-encubra-seus-controles/
GOSTEI 0
Marcos Mendes

Marcos Mendes

23/01/2015

Olá, estou com o mesmo problema porém já havia feito algo parecido ao de vocês hoje eu consigo manter o fóco no componente acima do teclado virtual porém telas com scroll não conseguem manter a funcionalidade ele fica preso isto teria como solucionar?
GOSTEI 0
Marcos Mendes

Marcos Mendes

23/01/2015

Olá, estou com o mesmo problema porém já havia feito algo parecido ao de vocês hoje eu consigo manter o fóco no componente acima do teclado virtual porém telas com scroll não conseguem manter a funcionalidade ele fica preso isto teria como solucionar?


Inclusive o próprio exemplo da Embarcadeiro que foi o que eu utilizei como base tem o mesmo problema, o scroll nao funciona com o componente do teclado virtual ativo
GOSTEI 0
POSTAR