Android 键盘开发知识点总结

先废话一下,说说开发键盘的原因:像理财产品、银行等app客户端登录时,尤其是要输入密码时,会屏蔽掉系统默认输入法,改为自己的输入法!这个是考虑安全,以及防止被输入法软件记录密码等问题!所以,安全性极高的app都会要求密码等都用自己的输入法,这就有开发的需求 了!

言归正传:开发这种软件盘,从什么地方开始着手呢?

步骤1:

先看Android给我们提供的Demo

关于软键盘的Demo,在以下目录中能找到:

..\samples\android-22\legacy\SoftKeyboard

步骤二:键盘布局

从Demo中可以看出,键盘的开发和界面开发不一样,虽然键盘也需要布局,但是却不是用的布局文件,而是在xml目录里的文件

先来看个:

qwerty.xml文件:

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 android:keyWidth="10%p"
 android:horizontalGap="0px"
 android:verticalGap="0px"
 android:keyHeight="@dimen/key_height"
 >

 <Row>
  <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
  <Key android:codes="119" android:keyLabel="w"/>
  <Key android:codes="101" android:keyLabel="e"/>
  <Key android:codes="114" android:keyLabel="r"/>
  <Key android:codes="116" android:keyLabel="t"/>
  <Key android:codes="121" android:keyLabel="y"/>
  <Key android:codes="117" android:keyLabel="u"/>
  <Key android:codes="105" android:keyLabel="i"/>
  <Key android:codes="111" android:keyLabel="o"/>
  <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
 </Row>

 <Row>
  <Key android:codes="97" android:keyLabel="a" android:horizontalGap="5%p"
    android:keyEdgeFlags="left"/>
  <Key android:codes="115" android:keyLabel="s"/>
  <Key android:codes="100" android:keyLabel="d"/>
  <Key android:codes="102" android:keyLabel="f"/>
  <Key android:codes="103" android:keyLabel="g"/>
  <Key android:codes="104" android:keyLabel="h"/>
  <Key android:codes="106" android:keyLabel="j"/>
  <Key android:codes="107" android:keyLabel="k"/>
  <Key android:codes="108" android:keyLabel="l" android:keyEdgeFlags="right"/>
 </Row>

 <Row>
  <Key android:codes="-1" android:keyIcon="@drawable/sym_keyboard_shift"
    android:keyWidth="15%p" android:isModifier="true"
    android:isSticky="true" android:keyEdgeFlags="left"/>
  <Key android:codes="122" android:keyLabel="z"/>
  <Key android:codes="120" android:keyLabel="x"/>
  <Key android:codes="99" android:keyLabel="c"/>
  <Key android:codes="118" android:keyLabel="v"/>
  <Key android:codes="98" android:keyLabel="b"/>
  <Key android:codes="110" android:keyLabel="n"/>
  <Key android:codes="109" android:keyLabel="m"/>
  <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete"
    android:keyWidth="15%p" android:keyEdgeFlags="right"
    android:isRepeatable="true"/>
 </Row>

 <Row android:rowEdgeFlags="bottom">
  <Key android:codes="-3" android:keyIcon="@drawable/sym_keyboard_done"
    android:keyWidth="15%p" android:keyEdgeFlags="left"/>
  <Key android:codes="-2" android:keyLabel="123" android:keyWidth="10%p"/>
  <!--
   android:codes: -101 is not a framework-defined key code but a key code that is
   privately defined in com.example.android.softkeyboard.LatinKeyboardView.
  -->
  <Key android:codes="-101" android:keyIcon="@drawable/sym_keyboard_language_switch"
    android:keyWidth="10%p"/>
  <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
    android:keyWidth="30%p" android:isRepeatable="true"/>
  <Key android:codes="46,44" android:keyLabel=". ,"
    android:keyWidth="15%p"/>
  <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
    android:keyWidth="20%p" android:keyEdgeFlags="right"/>
 </Row>
</Keyboard>

分析一下:

1>从以上代码可以看出,布局主要是在Keyboard的文件里进行的,每一行以< Row>开始和结束,键则是以< key>为起始节点,而键盘是监听键的数字码为主要监听对象的,label 只是键盘的显示标签;

2> 而Keyboard 节点里的属性android:keyWidth=”10%p” 是指:如果键key的节点里没有该属性,则宽度为 整个屏幕宽度的10%,如果key的节点里有该属性,则以key的节点属性为最终值;

3>key节点属性里android:codes=”46,44” ,codes为两个,意思是:第一次点击是46的字符串,第二次点击是44的字符串,两次点击相隔一秒的时间;

步骤三:分析代码

键盘组件是继承KeyboardView,而自定义的,通过使用Keyboard类加载键盘布局文件,并通过KeyboardView.setKeyboard(Keyboard keyboard)的方法,将布局赋值到View里;具体如下:

1>使用Keyboard类加载xml文件:

Keyboard keyboard=new Keyboard(context, R.xml.qwerty);

2>将Keyboard赋值给view,使用KeyboardView里的方法setKeyboard赋值

setKeyboard(keyboard);

步骤四 给View设置监听事件

设置监听事件setOnKeyboardActionListener,实现onKey的方法,

步骤五:EditText使用场景布局

在使用指定输入法的Activity布局里,添加以下代码

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" >

  <android.inputmethodservice.KeyboardView
   android:id="@+id/keyboard_view"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:focusable="true"
   android:focusableInTouchMode="true"
   android:background="@color/lightblack"
   android:keyBackground="@drawable/btn_keyboard_key"
   android:keyTextColor="@color/white"
   android:visibility="gone" />
 </RelativeLayout>

1>开发键盘时,遇到以下问题:

点击的Popup,字体都是白色的,有时是黑色的,和主题有关系,解决方法:

KeyboardView有一个属性,keyPreviewLayout,即是预览键盘的布局文件,可以自己定义,以TextView 为布局文件的根节点

2>预览布局文件的Popup 高度太高,如何调整,想调整成方形的:
KeyboardView有一个属性keyPreviewHeight,即是预览额高度,即可以调整

(0)

相关推荐

  • 30条android项目开发技巧与经验总结

    1.如果是阅读型文本(例如一篇文章),不需要固定大小的,textSize可以使用sp:如果是展示型文本(例如按钮中的文本),其大小受到限制的,textSize可以使用dp. 2.使用json用作网络数据传输时,应该使用String字段取代int字段. 3.按照现在正常密度比(系统的densityDPI根据分辨率和屏幕尺寸为正常的120.160.240.320.480.640时)9:16的安卓机其尺寸为(360dp*540dp).UI有时会根据iPhone机型使用750px*1334px作图,而按

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • Android TV开发:使用RecycleView实现横向的Listview并响应点击事件的代码

    本文讲述了Android TV开发:使用RecycleView实现横向的Listview并响应点击事件的代码.分享给大家供大家参考,具体如下: 1.先贴出自己的效果图(可横向滚动,并响应item点击事件): 2.关于点击事件的实现细节 核心:使用接口回调 在adapter中自己定义了个接口,然后在onBindViewHolder中去为holder.itemView去设置相应的监听最后回调我们设置的监听. class HomeAdapter extends RecyclerView.Adapter

  • Android快递物流信息布局开发

    本文实例为大家分享了Android快递物流信息布局展示的具体代码,供大家参考,具体内容如下 1. 思路介绍 效果图: 思路: 就一个ListView,每个item就是一条物流信息.然后每个item,分为左和右两边,左边是一个进度条的风格,右边是物流文字,适配器里面判断item,position为0 就设置为绿色,其他position就设置为灰色就行了. 2. 代码 item的布局 <?xml version="1.0" encoding="utf-8"?>

  • Android应用架构思想分析

    算算日子,工作刚好三年了.这篇开始,鄙人就要向着各种以前想起来就头大的方向努力前进了.作为在Android应用层搬砖多年的民工,首篇我想谈谈自己对架构思想的一些看法.如有不妥,还请拍砖. 盖楼的故事(虚构) 有一块地,两个区域,开发商分别让两个包工头负责开发. 包工头A办事干净利落,甩开膀子就开工了.为了省钱雇了一个全能的工人,他既要去采购盖房的材料,又要用这些材料盖房子.起初底层屋子结构简单,还能应付得来,到了后面复杂的设计需求时,忙的不可开交,经常精疲力尽,阻断了盖房子的进程,使得老板很是不

  • Android组件化开发路由的设计实践

    调研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技术 编译时注解,个人想法是一口吃不成胖子,先做个比较实用的. VpRouter路由框架主要应用于组件化开发中 设计目的 解耦 跨模块跳转 方便服务器配置schema,实现动态配置跳转目标 对外部提供远程访问的功能,实现跨应用调用响应 主要功能点 支持intent,http,schema三种跳转 路由表支持xml配置,可自定义,支持多路径 有拦截器 同时支持反射和隐式意图 支持结果回调 支持参数传递 链

  • Android 键盘开发知识点总结

    先废话一下,说说开发键盘的原因:像理财产品.银行等app客户端登录时,尤其是要输入密码时,会屏蔽掉系统默认输入法,改为自己的输入法!这个是考虑安全,以及防止被输入法软件记录密码等问题!所以,安全性极高的app都会要求密码等都用自己的输入法,这就有开发的需求 了! 言归正传:开发这种软件盘,从什么地方开始着手呢? 步骤1: 先看Android给我们提供的Demo 关于软键盘的Demo,在以下目录中能找到: ..\samples\android-22\legacy\SoftKeyboard 步骤二:

  • Android高级开发之性能优化典范

    本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个像素每次只绘制一次是最优的,但是由于重叠的布 局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,当这个操作耗时超过16.67ms时,就会出现掉帧现象,表现为应用卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量减

  • 实现Android键盘的中英文适配

    大家在进行Android项目开发的时候经常会遇到中文输入和英文输入切换的情况,本篇内容教给大家实现Android下自动识别中英文键盘的功能. 英文环境下,密码框字体和一般字体不一致问题 1.xml中不能设置inputType 属性.或者password属性 2.中文环境中设置inputType可以 3.当要是适配英文,只能在Java代码设置 android开发EditText输入时弹出数字输入键盘(适配英文环境) 首先设置只能输入数字 <EditText android:id="@+id/

  • Android快速开发系列 10个常用工具类实例代码详解

    打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~在此感谢群里给我发项目中工具类的兄弟/姐妹~ 1.日志工具类L.java package com.zhy.utils; import android.util.Log; /** * Log统一管理类 * * * */ public class L { private L() { /* cannot be instantiated */ throw new UnsupportedOpe

  • Android 线程优化知识点学习

    目录 前言 一.线程调度原理解析 线程调度的原理 线程调度模型 Android 的线程调度 线程调度小结 二.Android 异步方式汇总 Thread HandlerThread IntentService AsyncTask 线程池 RxJava 三.Android线程优化实战 线程使用准则 线程池优化实战 四.定位线程创建者 如何确定线程创建者 Epic实战 五.优雅实现线程收敛 线程收敛常规方案 基础库如何使用线程 基础库优雅使用线程 前言 在实际项目开发中会频繁的用到线程,线程使用起来

  • Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法

    本文实例讲述了Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法.分享给大家供大家参考,具体如下: 这里主要介绍如何解决ViewPager在ScrollView中滑动经常失效.无法正常滑动问题. 解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPager)处理即可,重写ScrollView的onInterceptTouchEvent函数,如下: package cc.newnews.view; import an

  • 图文详解Android Studio搭建Android集成开发环境的过程

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环境,不过一直没有发表出来,写这篇文章的目的是记录一下Android开发环境的搭建过程,这篇文章写得一般般,主要是记录了整个搭建过程,没什么技术含量,觉得有帮助的朋友就看一下! 一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(A

  • Android编程开发之打开文件的Intent及使用方法

    本文实例讲述了Android编程开发之打开文件的Intent及使用方法.分享给大家供大家参考,具体如下: 在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件.word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同 1.

  • Android编程开发实现多线程断点续传下载器实例

    本文实例讲述了Android编程开发实现多线程断点续传下载器.分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,比如无信号断线.电量不足等情况下,这就需要使用到断点续传功能,下次启动时从记录位置继续下载,可避免重复部分的下载.这里采用数据库来记录下载的进度. 效果图:   断点续传 1.断点续传需要在下载过程中记录每条线程的下载进度 2.每次下载开始之前先读取数据库

  • Android编程开发实现带进度条和百分比的多线程下载

    本文实例讲述了Android编程开发实现带进度条和百分比的多线程下载.分享给大家供大家参考,具体如下: 继上一篇<java多线程下载实例详解>之后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java: package com.example.downloads; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.H

随机推荐