【android】开发笔记系列:行为篇

1:键盘遮挡了输入框

在androidManifest.xml里,对应的activity里设置键盘模式

 <activity
            android:name="活动名称"
            android:windowSoftInputMode="adjustPan">


2:改变输入框回车键为“下一个”

前提:需要设置EditText为单行模式android:singleLine="true",否则回车键默认就是换行的。

在EditText的xml布局文件

android:imeOptions="actionNext"

或者后台代码

EditText对象.setImeOptions(EditorInfo.IME_ACTION_NEXT); 

 

在一堆输入框中,最后一个输入框我们一般都希望为“完成”,即点击之后隐藏输入框

同理:在xml我们需要设置为

 android:imeOptions="actionDone"

后台代码

EditText对象.setImeOptions(EditorInfo.IME_ACTION_DONE);

 

 隐藏/显示软键盘

如果遇到弹不出键盘,可能是对应的窗体(activity刚展示,alertdialog刚弹出)还未初始化完成,这时候,只要延迟执行若干毫秒就可以了

new Handler().postDelayed(new Runnable(){    
    public void run() {    
    //execute the task    
    }    
 }, delay);   

 

改变输入框光标样式

在xml里设置

android:textCursorDrawable

 

代码动态设置

drawable文件

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 圆角,你也可以对不同的角设置不同的数值 -->
    <corners android:radius="1dp"/>

    <!-- 形状的填充色 -->
    <solid android:color="@color/orange"/>
    <!-- 光标的宽度 -->
    <size android:width="2dp" />
</shape>

调用

/**
     * 设置输入框的光标样式
     *
     * @param editText
     * @param resourceId
     */
    public static void setCursorDrawable(EditText editText, int resourceId) {
        try {
            Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
            f.setAccessible(true);
            f.set(editText, resourceId);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }

 

 

隐藏软键盘

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

显示软键盘,控件ID可以是EditText,TextView

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件对象, 0);

 

 去掉默认的下拉效果

 

android:overScrollMode="never"

 

检测Emoj表情图片

/**
     * 检测是否有emoji表情
     *
     * @param source
     * @return
     */
    public static boolean containsEmoji(String source) {
        int len = source.length();
        for (int i = 0; i < len; i++) {
            char codePoint = source.charAt(i);
            if (!isEmojiCharacter(codePoint)) { //如果不能匹配,则该字符是Emoji表情
                return true;
            }
        }
        return false;
    }

    /**
     * 判断是否是Emoji
     *
     * @param codePoint 比较的单个字符
     * @return
     */
    private static boolean isEmojiCharacter(char codePoint) {
        return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
                (codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
                && (codePoint <= 0x10FFFF));
    }

 

posted @ 2015-09-28 17:16  谪仙  阅读(470)  评论(0)    收藏  举报