美文网首页
0518开发(软键盘 EditText相关)

0518开发(软键盘 EditText相关)

作者: menggod | 来源:发表于2017-05-18 16:41 被阅读36次

    感谢开发者 有的当时保存的时候没有保存连接如果侵权联系删除

    
    留给后来者,只设置底部边框的方法,在drawable里新建xml,选择 layer-list ,代码如下,稍作修改后的代码:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <!-- 连框颜色值 -->
        <item>
            <shape>
                <solid android:color="#000000" />
            </shape>
        </item>
        <!-- 主体背景颜色值 -->
       <item android:bottom="1dp"> <!--设置只有底部有边框-->
            <shape>
                <solid android:color="#ffffff" />
            </shape>
        </item>
    </layer-list>
    

    viewpager 包裹内容

    http://stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content
    

    监听软键盘弹起

    **背景:**
    在很多App开发过程中需要在Activity中监听[Android](http://lib.csdn.net/base/android)设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹起与关闭。
    
    **预备知识:**
    在manifest文件中可以设置Activity的android:windowSoftInputMode属性,这个属性值常见的设置如下:
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
    那么这里值的含义列表如下:
    
    【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
    【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
    【C】stateHidden:用户选择activity时,软键盘总是被隐藏
    【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
    【E】stateVisible:软键盘通常是可见的
    【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
    【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
    【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
    【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
    
    **示例:**
    (1)首先我们需要将监听所在的Activity在Manifest文件中的设置为如下形式:
    
    **[html]** [view plain](http://blog.csdn.net/bear_huangzhen/article/details/45896333#) [copy](http://blog.csdn.net/bear_huangzhen/article/details/45896333#)
    
    <activity  
        android:name="com.bear.softkeyboardlistener.MainActivity"  
        android:label="@string/app_name"  
        android:windowSoftInputMode="stateAlwaysHidden|adjustResize" >  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  
      
            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </activity>  
    
    这样设置之后,当有软键盘弹起来的时候,Activity的布局大小会被压缩上去,但是你仍然可以通过滑动浏览所有。
    
    (2)我们要为Activity的最外面的Layout设置一个OnLayoutChangeListener监听器:
    **[java]** [view plain](http://blog.csdn.net/bear_huangzhen/article/details/45896333#) [copy](http://blog.csdn.net/bear_huangzhen/article/details/45896333#)
     [![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/672332)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/672332/fork)
    
    import com.bear.bearbroadcastreceiver.R;  
      
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.view.View;  
    import android.view.View.OnLayoutChangeListener;  
    import android.widget.Toast;  
      
    public class MainActivity extends Activity implements OnLayoutChangeListener{  
          
        //Activity最外层的Layout视图  
        private View activityRootView;  
        //屏幕高度  
        private int screenHeight = 0;  
        //软件盘弹起后所占高度阀值  
        private int keyHeight = 0;  
          
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
      
            activityRootView = findViewById(R.id.root_layout);  
            //获取屏幕高度  
            screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();  
            //阀值设置为屏幕高度的1/3  
            keyHeight = screenHeight/3;  
        }  
          
        @Override  
        protected void onResume() {  
            super.onResume();  
              
            //添加layout大小发生改变监听器  
            activityRootView.addOnLayoutChangeListener(this);  
        }  
          
        @Override  
        public void onLayoutChange(View v, int left, int top, int right,  
                int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {  
              
            //old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值  
              
    //      System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);  
    //      System.out.println(left + " " + top +" " + right + " " + bottom);  
              
              
            //现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起  
            if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){  
                  
                Toast.makeText(MainActivity.this, "监听到软键盘弹起...", Toast.LENGTH_SHORT).show();  
              
            }else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){  
                  
                Toast.makeText(MainActivity.this, "监听到软件盘关闭...", Toast.LENGTH_SHORT).show();  
              
            }  
              
        } 
    
    

    EditText属性的设置

    在开发的过程中,通常会用到EditText,如何让虚拟键盘来适应输入框中内容的类型,通常我们都会在xml文件中加入android:inputType=""。
    
    android:inputType="none"android:inputType="text"android:inputType="textCapCharacters"//前3个输入普通字符android:inputType="textCapWords"//单词首字母大小
    
    android:inputType="textCapSentences"//仅第一个字母大小
    
    android:inputType="textAutoCorrect"android:inputType="textAutoComplete"//前两个自动完成
    
    android:inputType="textMultiLine"//多行输入
    
    android:inputType="textImeMultiLine"//输入法多行(不一定支持)
    
    android:inputType="textNoSuggestions"//不提示
    
    android:inputType="textUri"//URI格式
    
    android:inputType="textEmailAddress"//电子邮件地址格式
    
    android:inputType="textEmailSubject"//邮件主题格式
    
    android:inputType="textShortMessage"//短消息格式
    
    android:inputType="textLongMessage"android:inputType="textPersonName"//人名格式
    
    android:inputType="textPostalAddress"//邮政格式
    
    android:inputType="textPassword"//密码格式
    
    android:inputType="textVisiblePassword"//密码可见格式
    
    android:inputType="textWebEditText"//作为网页表单的文本格式
    
    android:inputType="textFilter"//文本筛选格式
    
    android:inputType="textPhonetic"//拼音输入格式
    
    android:inputType="number"//数字格式
    
    android:inputType="numberSigned"//有符号数字格式
    
    android:inputType="numberDecimal"//可以带小数点的浮点格式
    
    android:inputType="phone"//拨号键盘
    
    android:inputType="datetime"android:inputType="date"//日期键盘
    
    android:inputType="time"//时间键盘
    

    这个帮助很大

    image.png
    http://blog.csdn.net/jeff169/article/details/70195498?utm_source=itdadao&utm_medium=referral
    

    Edittext默认不获取焦点

    刚进来的时候,不弹出键盘,EditText 有个光标上面闪,证明是可编辑的,这个还是符合用户习惯的,从用户体验的角度上讲,还保留光标的闪动是好的。
    解决方法1:(已经试过,证明可以)
    在activity属性中设置[Android](http://lib.csdn.net/base/android):windowSoftInputMode="stateHidden"
    解决方法2:
    InputMethodManager inputMethodManager = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);inputMethodManager.hideSoftInputFromWindow(et.getWindowToken(), 0);
    解决方法3:
    系统默认第一个EditText是获得焦点的,解决办法,增加一个不显示的view强制获得焦点,比如<View android:layout_width="0dip"android:layout_height="0dip"android:focusableInTouchMode="true" />
    

    相关文章

      网友评论

          本文标题:0518开发(软键盘 EditText相关)

          本文链接:https://www.haomeiwen.com/subject/kxisxxtx.html