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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar