zoukankan      html  css  js  c++  java
  • 新打开acitivyt时,EditText焦点自动带出软键盘问题解决方法总结(转)

    原因分析:
           Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这时候android系统会自动弹出软键盘。这会导致挤压activity本来的界面,影响美观。
    几种解决方法:
          一、解决效果:activity打开,软键盘不自动打开,焦点不在editText上面。当点击editText,再打开软键盘
                 具体方法:在onCreate()方法中将焦点放在另一个view上.  view使用requestFocus()焦点,但是如果让button或者textView之类控件直接使用requestFocus()方法,则无法 获取焦点,焦点会依然在editText上。
                                  只能在使用View的requestFocus()方法之前调用下面2个方法,view才可获取焦点:
                                  view.setFocusable(true);
                                  view.setFocusableInTouchMode(true);
                                  然后调用 requestFocus()即可获取焦点。
         二、解决效果:activity打开,软键盘不自动打开,焦点落在editText上面。当点击editText,再打开软键盘
                具体方法:在Activity中OnCreate方法里面加下面这句代码 getWindow().setSoftInputMode(  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                                 或者在AndroidManifest.xml中该activity处添加android:windowSoftInputMode属性
                                 eg. <activity android:name="SelectPartsActivity"
                                                     android:screenOrientation="landscape"
                                                    android:windowSoftInputMode="stateAlwaysHidden" />
                                 PS:如果实在不放心,可以两个都添加
         三、解决效果:android机顶盒开发时,长按遥控器OK键(此处的长按操作一般都为用户按键时间过长导致的误操作,而不是有意长按)打开Activity,软键盘不自动打开,焦点落在editText上面。
                解决方法(本人未测试,不知是否可用):在OnCreate中设置延时,必须等延时事件完毕才让EditText能获得焦点弹出软键盘;或者让EditText一直获得焦点,必须延时事件结束后EditText才能响应软键盘弹出事件。此处用到Timer辅助实现。
                                eg.   @Override
                                        public void onCreate(Bundle savedInstanceState) {
                                            super.onCreate(savedInstanceState);
                                            setContentView(R.layout.main);
                                            Timer timer = new Timer();
                                            timer.schedule(new TimerTask() {
                                                @Override
                                                 public void run() {
                                                     //此处EditText获得焦点或者软键盘弹出操作
                                                     ...................
                                                    //  InputMethodManager imm = (InputMethodManager)MainActivity.this.getSystemService(INPUT_METHOD_SERVICE);
                                                    // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                                                 }
                                             }, 1000);  //在一秒后操作
                                         }
       
                                     自动关闭:
       
                                     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                                     imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

  • 相关阅读:
    第十六周总结
    第十五周学习进度
    输出最长字符串链
    第二阶段冲刺10
    第二阶段冲刺09
    第二阶段冲刺08
    输入法评价
    第十四周进度总结
    collections模块
    shutil模块(了解)
  • 原文地址:https://www.cnblogs.com/androidxiaoyang/p/2739261.html
Copyright © 2011-2022 走看看