No meu aplicativo, há uma tela de registro, na qual eu não quero que o usuário possa copiar / colar texto no EditText
campo. Eu configurei um onLongClickListener
em cada um EditText
para que o menu de contexto mostrando copiar / colar / método de entrada e outras opções não apareça. Portanto, o usuário não poderá copiar / colar nos campos Editar.
OnLongClickListener mOnLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// prevent context menu from being popped up, so that user
// cannot copy/paste from/into any EditText fields.
return true;
}
};
Mas o problema surge se o usuário tiver ativado um teclado de terceiros que não seja o padrão do Android, que pode ter um botão para copiar / colar ou que pode exibir o mesmo menu de contexto. Então, como desativo copiar / colar nesse cenário?
Informe-me se há outras maneiras de copiar / colar também. (e possivelmente como desativá-los)
Qualquer ajuda seria apreciada.
Respostas:
Se você estiver usando o nível 11 ou superior da API, poderá parar a exibição dos menus de copiar, colar, recortar e de contexto personalizado.
Retornar false de onCreateActionMode (ActionMode, Menu) impedirá que o modo de ação seja iniciado (ações Selecionar Tudo, Recortar, Copiar e Colar).
fonte
O melhor método é usar:
fonte
android:longClickable="false"
:)Você pode fazer isso desativando a pressão prolongada do EditText
Para implementá-lo, basta adicionar a seguinte linha no xml -
fonte
Consigo desativar a funcionalidade copiar e colar com o seguinte:
Espero que funcione para você ;-)
fonte
aqui está a melhor maneira de desativar a cópia recortada colar do trabalho editText em todas as versões
fonte
Além das soluções setCustomSelectionActionModeCallback e desativadas , é necessário impedir que os menus PASTE / REPLACE apareçam quando o identificador de seleção de texto é clicado, conforme a imagem abaixo:
A solução está em impedir que o menu PASTE / REPLACE apareça no
show()
método daandroid.widget.Editor
classe (não documentada) . Antes que o menu apareça, é feita uma verificação paraif (!canPaste && !canSuggest) return;
. Os dois métodos usados como base para definir essas variáveis estão naEditText
classe:isSuggestionsEnabled()
é público e, portanto, pode ser substituído.canPaste()
não é e, portanto, deve ser ocultado introduzindo uma função com o mesmo nome na classe derivada.Uma resposta mais completa está disponível aqui .
fonte
Solução Kotlin:
Então você pode simplesmente chamar esse método no seu
TextView
:fonte
Type mismatch
erro com esta descriçãoRequired:ActionMode.Callback! Found:
desta parteobject: ActionMode.Callback
. Alguma idéia de por que pode não estar funcionando?Usando outras soluções, a API 26 (Oreo) ainda estava mostrando a alça do cursor com um único toque no texto digitado e, em seguida, o menu pode ser mostrado. Somente combinações de soluções podem resolver meu problema.
fonte
Se você não deseja desativar o clique longo, porque precisa executar algumas funcionalidades no clique longo do que retornar true é uma opção melhor para fazê-lo.
O seu clique longo no edittext será assim.
De acordo com a documentação, Returning "True" indicará que o clique longo foi manipulado, não sendo necessário executar operações padrão.
Eu testei isso nos níveis 16, 22 e 25 da API. Está funcionando bem para mim. Espero que isso ajude.
fonte
android:longClickable="false"
XMLhttps://github.com/neopixl/PixlUI fornece
EditText
um métodomyEditText.disableCopyAndPaste()
.E funciona na antiga API
fonte
Aqui está um hack para desativar o pop-up "colar". Você precisa substituir o
EditText
método:Semelhante pode ser feito para as outras ações.
fonte
Eu testei esta solução e isso funciona
fonte
Leia a área de transferência, verifique a entrada e a hora em que a entrada é "digitada". Se a área de transferência tiver o mesmo texto e for muito rápida, exclua a entrada colada.
fonte
@Zain Ali, sua resposta funciona na API 11. Eu só queria sugerir uma maneira de participar da API 10. Como eu tinha que manter minha API do projeto nessa versão, eu estava constantemente jogando com as funções disponíveis na 2.3.3 e tive a possibilidade de fazê-lo. Compartilhei o trecho abaixo. Testei o código e ele estava funcionando para mim. Eu fiz esse trecho com urgência. Sinta-se livre para melhorar o código se houver alguma alteração que possa ser feita.
fonte
A solução é muito simples
--------> visualização <---------
fonte
Tente Seguir a classe de cliente para copiar e colar em
Edittext
}
fonte
Para smartphone com prancheta, é possível evitar assim.
fonte
Semelhante ao GnrlKnowledge, você pode limpar a área de transferência
http://developer.android.com/reference/android/text/ClipboardManager.html
Se desejar, preserve o texto na área de transferência e, em onDestroy, você pode configurá-lo novamente.
fonte
Descobri que, quando você cria um filtro de entrada para evitar a entrada de caracteres indesejados, colar esses caracteres no texto de edição não tem efeito. Então isso também resolve meu problema.
fonte
Você pode tentar o android: focusableInTouchMode = "false".
fonte
A solução que funcionou para mim foi criar o Edittext personalizado e substituir o seguinte método:
}
fonte
Tente usar.
fonte
Quem está procurando uma solução no Kotlin, usa a classe abaixo como um widget personalizado e usa-o no xml.
classe SecureEditText: TextInputEditText {
}
fonte
eu adicionei a função de extensão na linguagem Kotlin :
você pode usá-lo assim:
também adicionado abaixo da linha no seu xml:
fonte