【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 @   谪仙  阅读(461)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示