Android EditText默认弹出和默认关闭输入法的解决方案_andorid studio edittext 默认不要中文输入法-程序员宅基地

技术标签: Android开发  android  edittext  

本文由本人在网上整理所得,仅供学习之用。原文点击打开链接,http://www.ylzx8.cn/yidongkaifa/android/31104.html

二:默认弹出和默认关闭输入法的解决方案。

1.默认关闭,不至于进入Activity就打开输入法,影响界面美观。

①在布局文件中,在EditText前面放置一个看不到的LinearLayout,让他率先获取焦点:

  1. <LinearLayout 
  2. android:focusable="true" 
  3. android:focusableInTouchMode="true" 
  4. android:layout_width="0px" 
  5. android:layout_height="0px"/> 

看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMode=stateVisible,这样就会默认弹起输入法,当然还有别的办法。

  1. <activity 
    <span style="white-space:pre">	</span>android:name=".ui.login" 
            android:configChanges="orientation|keyboardHidden|locale" 
            android:screenOrientation="portrait" 
            android:windowSoftInputMode="stateVisible|adjustPan" > 
     </activity>

Android EditText 不弹出输入法总结

方法一:

在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden

例如:

  1. <activity android:name=".Main" 
  2. android:label="@string/app_name" 
  3. android:windowSoftInputMode="adjustUnspecified|stateHidden" 
  4. android:configChanges="orientation|keyboardHidden"
  5. < intent-filter> 
  6. < action android:name="android.intent.action.MAIN" /> 
  7. < category android:name="android.intent.category.LAUNCHER" /> 
  8. < /intent-filter> 
  9. < /activity>  

方法二:

让EditText失去焦点,使用EditText的clearFocus方法

例如:

  1. EditText edit=(EditText)findViewById(R.id.edit); 
  2. edit.clearFocus();  

方法三:

强制隐藏Android输入法窗口

例如:

  1. EditText edit=(EditText)findViewById(R.id.edit); 
  2. InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
  3. imm.hideSoftInputFromWindow(edit.getWindowToken(),0);  

2.EditText始终不弹出软件键盘

例:

  1. EditText edit=(EditText)findViewById(R.id.edit); 
  2. edit.setInputType(InputType.TYPE_NULL);  

研究了下android中焦点Focus和弹出输入法的问题。在网上看了些例子都不够全面,在这里全面总结下。

一:EditText为什么会默认弹出输入法?

同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出。不好意思,这问题我也一头雾水,谁知道可以告诉我,否则我就把这个问题留下来,以后研究android源码时再搞个清楚。但是...我有解决方案

二:默认弹出和默认关闭输入法的解决方案。

1.默认关闭,不至于进入Activity就打开输入法,影响界面美观。

①在布局文件中,在EditText前面放置一个看不到的LinearLayout,让他率先获取焦点:

  1. <LinearLayout 
  2. android:focusable="true" 
  3. android:focusableInTouchMode="true" 
  4. android:layout_width="0px" 
  5. android:layout_height="0px"/>  

②方法二:先看一个属性android:inputType:指定输入法的类型,int类型,可以用|选择多个。取值可以参考:android.text.InputType类。取值包括:text,textUri,

phone,number,等.

Android SDK中有这么一句话“If the given content type is TYPE_NULL then a soft keyboard will not be displayed for this text view”,

先将EditText的InputType改变为TYPE_NULL,输入法就不会弹出.然后再设置监听,再重新设置它的InputType.

  1. editText.setOnTouchListener(new OnTouchListener() { 
  2.                 public boolean onTouch(View v, MotionEvent event) {  
  3.                     // TODO Auto-generated method stub  
  4.                     int inType = editText.getInputType(); // backup the input type  
  5.                     editText.setInputType(InputType.TYPE_NULL); // disable soft input      
  6.                     editText.onTouchEvent(event); // call native handler      
  7.                     editText.setInputType(inType); // restore input type     
  8.                     return true;                      
  9.                 }  
  10.             });  

2.默认弹出。有时候按照需求可能要求默认弹出输入法。方案如下:

  1. EditText titleInput = (EditText) findViewById(R.id.create_edit_title); 
  2. titleInput.setFocusable(true); 
  3.  titleInput.requestFocus(); 
  4.  onFocusChange(titleInput.isFocused()); 
  5. private void onFocusChange(boolean hasFocus) 
  6. final boolean isFocus = hasFocus; 
  7. (new Handler()).postDelayed(new Runnable() { 
  8. public void run() { 
  9. InputMethodManager imm = (InputMethodManager) 
  10. titleInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
  11. if(isFocus) 
  12. imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
  13. else 
  14. imm.hideSoftInputFromWindow(titleInput.getWindowToken(),0); 
  15. }, 100); 
  16. }  

我觉得因为在Android的主线程中对UI的操作无效,所以必须在Handler中实现弹出输入法的操作。

三:关于焦点和输入法的个人理解

获取焦点是获取焦点,弹输入法是弹输入法。获取焦点后并不一定会弹出输入法,在网上搜了一圈,主流回答是“还有就是已开启界面就是focus的text的话有可能也是不行的,UI渲染是需要时间的”......

由于对源码不懂,我对这一点也没有个全面的认识。只能将焦点和输入法分成两块来处理。焦点的打开和关闭特别简单。

焦点的获取:

  1. titleInput.setFocusable(true); 
  2. titleInput.requestFocus();  

焦点的取消:

  1. titleInput.setFocusable(false);  

四:关于经常调用的处理软键盘的函数如下:

1、打开输入法窗口:

  1. InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
  2. // 接受软键盘输入的编辑文本或其它视图 
  3. imm.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);  

2、关闭出入法窗口

  1. InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
  2. inputMethodManager.hideSoftInputFromWindow(OpeListActivity.this.getCurrentFocus().getWindowToken(), 
  3. InputMethodManager.HIDE_NOT_ALWAYS); 
  4. //接受软键盘输入的编辑文本或其它视图 
  5. inputMethodManagerwww.2cto.com 
  6. .showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);  

3、如果输入法打开则关闭,如果没打开则打开

  1. InputMethodManager m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
  2. m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);  

4、获取输入法打开的状态

  1. InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
  2. boolean isOpen=imm.isActive();  

isOpen若返回true,则表示输入法打开

原文点击打开链接http://www.ylzx8.cn/yidongkaifa/android/31104.html

二:默认弹出和默认关闭输入法的解决方案。

1.默认关闭,不至于进入Activity就打开输入法,影响界面美观。

①在布局文件中,在EditText前面放置一个看不到的LinearLayout,让他率先获取焦点:

  1. <LinearLayout 
  2. android:focusable="true" 
  3. android:focusableInTouchMode="true" 
  4. android:layout_width="0px" 
  5. android:layout_height="0px"/> 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011930786/article/details/48262175

智能推荐

pheatmap:绘制聚类热图的函数_pheatmap基于kmeans绘制热图-程序员宅基地

文章浏览阅读342次,点赞4次,收藏6次。该函数还允许使用 kmeans 聚类聚合行。如果行数太大,以至于 R 无法再处理其分层聚类,大约超过 1000 行,则建议这样做。与其单独显示所有行,不如提前对行进行聚类,并仅显示聚类中心。可以通过参数kmeans_k调整集群的数量。来源:https://www.rdocumentation.org/packages/pheatmap/versions/1.0.12/topics/pheatmap。一个绘制聚类热图的函数,可以更好地控制一些图形参数,如单元大小等。Examples 例子。_pheatmap基于kmeans绘制热图

html div四边阴影效果-程序员宅基地

文章浏览阅读369次。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml..._div四周阴影效果

Java 通过反射获取实体类对应的注释_java获取实体类属性注解-程序员宅基地

文章浏览阅读1.7k次。Java 通过反射获取实体类对应的注释 _java获取实体类属性注解

在使用Mybatis的association属性,两张表中存在相同字段名,联表查询时的冲突解决办法_mybatis association绑定相同对象-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏10次。在使用MyBatis进行多表联查时,想要获取关联外键的表的数据信息,使用association进行联查,但当外键表的字段名和主表相同时,外键表的数据就会被覆盖。_mybatis association绑定相同对象

湘潭大学2018年上学期程序设计实践模拟考试3 参考题解_在湘大xx奶茶店夏天推出了新的饮料价格为5元。 很多学生都要买饮料,每个学生-程序员宅基地

文章浏览阅读2.7k次。体验1: 军神太强啦,1小时屯6题,瞬间AK,接下来的90分钟一直在跟榜体验2: A题原题,循环写得好就不麻烦,不然要写很多行,情况要想全并不难。 B题原题,有了上一场的提示之后,这题就不难了。 C题很简单(小声)。 D题卡掉了O(T*N*K*log(N))的方法,卡掉我5发logN ,不过还是可做。 E题水dp(组合数学)。 F题原题,记忆化搜索。体验3: 被DC两题卡到..._在湘大xx奶茶店夏天推出了新的饮料价格为5元。 很多学生都要买饮料,每个学生

微信小程序预览pdf,页面缓存下载过的pdf_微信浏览器请求pdf文件会缓存吗-程序员宅基地

文章浏览阅读2.8k次。需求:  点击预览图标查看该pdf报告问题:  1、最早是直接将请求倒的url放入到<web-view src="{{realUrl}}"></web-view>中展示,ios可以,安卓显示无法查看。  2、通过微信自身的API实现:wx.downloadFile({})、wx.saveFile({})、wx.openDocument({})  3、对于文件较大的,下载较慢,需要点击过的进行缓存,再次点击无需下载,直接打开。  将点击过的下载的url添加给list的tem_微信浏览器请求pdf文件会缓存吗

随便推点

服务部署之配置网络策略服务(NPS)(基于Windows Server 2022)_windows server 部署网络策略服务-程序员宅基地

文章浏览阅读680次。服务部署之配置网络策略服务(NPS)(基于Windows Server 2022)_windows server 部署网络策略服务

视频异常检测 综述(二)_视频异常检测综述-程序员宅基地

文章浏览阅读4.8k次,点赞6次,收藏29次。基于距离、概率、重构的视频异常检测概述_视频异常检测综述

trajan割点模板-程序员宅基地

文章浏览阅读107次。洛谷P3388#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int N=2e4+5;const int mod=1e9+7;vector<int> g[N];set<int> v;int dfn[N],low[N],fa[N];int n,m,tot;void tarjan(int x){

linux如何关闭硬件加速,启用硬件加速是什么意思?如何关闭【详解】-程序员宅基地

文章浏览阅读1k次。导语:小编相信,经常会使用到电脑的朋友们,对于启用硬件加速这个词一定都是不陌生的吧!可是呢,对于一些电脑小白们来说,往往会搞不清楚,这个启用硬件加速到底是个什么意思呢?启用之后,我们的电脑又会发生什么变化呢?也有一些人,在启用之后,却不知道应该如何关闭这个硬件加速,接下来,小编就来为大家介绍一下启用硬件加速是什么意思,以及它应该如何关闭。启用硬件加速是什么意思?简而言之,硬件加速就是利用硬件模块来..._linux 禁用硬件加速合成、图层和素材面板

SHAP: 在我眼里,没有黑箱_python对shap的计算只能针对大数值吗-程序员宅基地

文章浏览阅读8.1k次,点赞13次,收藏191次。1. 写在前面很多高级的机器学习模型(xgboost, lgb, cat)和神经网络模型, 它们相对于普通线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性, 所以这些模型也往往看作是黑箱模型, 在2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类以及回归), 使得前面的黑箱模型变得可解释了,这篇文章主要整理一下SHAP的使用, 这个在特征选择的时候特别好用。这次整理, 主要是在xgboost和lgb等树模型上的使用方式, 并且用一个_python对shap的计算只能针对大数值吗

【操作系统】考研真题攻克与重点知识点剖析 - 第 1 篇:操作系统概述_2021-程序员宅基地

文章浏览阅读625次。这篇文章深入探讨了操作系统的各个方面,以及相关的计算机科学概念。文章的结构包括对操作系统的定义和功能的讨论,涵盖了硬件管理、操作系统特征、启动过程、运行环境等多个方面。作者使用思维导图和具体版本(如哈工大版本、王道版本)作为辅助,系统性地介绍了操作系统的运行机制,包括中断与异常、系统调用等内容。文章还回顾了操作系统的历史发展,按照不同线索(如哈工大版本)进行叙述,涵盖了操作系统的发展与分类、体系结构等方面。最后,文章提到了一些考研真题,强调了对计算机科学相关概念的深入理解。_2021

推荐文章

热门文章

相关标签