zoukankan      html  css  js  c++  java
  • Android中使EditText失去焦点,edittext禁止弹出键盘[转]

    转自http://www.cnblogs.com/yejiurui/archive/2013/01/02/2841945.html

    在我们的应用中,有时候一进入一个页面, EditText默认就会自动获取焦点。弹出输入法框,用户体验很不好,

    那么如何取消这个默认行为呢?

    ps:这篇文字是一年前写的,现在有网友再问这个问题,我进行重新编辑--2014.05.07,目前有更好的办法,第一种方法局限性很强,大家可以使用第二种方法

    第一种方法:.在网上找了好久,有点监听软键盘事件的方法,有调用 clearFouse()方法,但是测试了都不行!在对应的 xml中也找不到相应的属性可以关闭这个默认行为。

    后来研究了一下,在其父控件下,添加如下的属性,就可以完美解决:

    android:focusable="true"   
    android:focusableInTouchMode="true"

    举例如下:

    复制代码
    <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
             android:focusable
    ="true" android:focusableInTouchMode="true"
            >
            
            <EditText 
                android:id="@+id/et_enter_msg_content"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                />
            
            <Button 
                android:id="@+id/sent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/send"
                />
            
            
        </LinearLayout>


    复制代码

    第二种方法:直接关闭输入法

    1
    2
    3
    4
    5
    6
    7
    8
    private void closeInputMethod() {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        boolean isOpen = imm.isActive();
        if (isOpen) {
            // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);//没有显示则显示
            imm.hideSoftInputFromWindow(mobile_topup_num.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

     调用这个方法体就行了,具体if语句里面的几个参数,我就借用一个网友的日志来写把(在此感谢)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1、方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示)
      
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
      
    2、方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示)
      
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(view,InputMethodManager.SHOW_FORCED); 
    [java] view plaincopy
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘 
     
    3、调用隐藏系统默认的输入法
      
    ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);  (WidgetSearchActivity是当前的Activity) 
     
    4、获取输入法打开的状态
      
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开 
  • 相关阅读:
    linux sysfs (2)
    微软——助您启动云的力量网络虚拟盛会
    Windows Azure入门教学系列 全面更新啦!
    与Advanced Telemetry创始人兼 CTO, Tom Naylor的访谈
    Windows Azure AppFabric概述
    Windows Azure Extra Small Instances Public Beta版本发布
    DataMarket 一月内容更新
    和Steve, Wade 一起学习如何使用Windows Azure Startup Tasks
    现实世界的Windows Azure:与eCraft的 Nicklas Andersson(CTO),Peter Löfgren(项目经理)以及Jörgen Westerling(CCO)的访谈
    正确使用Windows Azure 中的VM Role
  • 原文地址:https://www.cnblogs.com/exmyth/p/4444099.html
Copyright © 2011-2022 走看看