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

23/01/2015

0

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

Responder

Post mais votado

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;

Lucas Ramos

Lucas Ramos
Responder

Mais Posts

10/02/2015

Prime Ltda

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

Grato!
Responder

11/02/2015

Prime Ltda

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

11/02/2015

Lucas Ramos

Bom Dia

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

23/06/2015

Mauricio Abreu

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?
Responder

21/04/2016

Williamdiego2

Amigos oque seria isto (DoneBarHeight), aqui esta em vermelho!
Responder

11/05/2016

Felipe Santos

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.
Responder

12/05/2016

Esquilo Tranquilo

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,
Responder

31/08/2016

Experidiao Santos

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
Responder

11/11/2016

Adiel França

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/
Responder

13/04/2017

Marcos Mendes

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?
Responder

13/04/2017

Marcos Mendes

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar