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,即是预览额高度,即可以调整

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 03:13:01

Android 键盘开发心得的相关文章

Paypal-Express Checkout快捷支付方式的android端开发心得(二)

一.前导 上一篇讲的不是非常好,这里再又一次讲一下. Paypal手机支付有2种形式: 1.Mobile Express Checkout,MEC,快捷支付 2.MPL 假设採用MEC支付方式,这样的方式点击Checkoutbutton之后的页面一直到付款结束都是url的形式,必须先有Web网站的支付,所以仅仅能通过WebView的形式进行记载,使用起来和Web网站效果一样,假设载入的页面中有些内容不想显示,能够隐藏. 二.MEC支付案例 package com.sound.chinabuye.

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码.输出调试信息等.虽然嵌入式Linux在调试方面并没有Visual Studio.Delphi.Eclipse这些可视化工具方便,但是学习一些这方面的技术无疑更有助于开发强大而稳定的Linux内核模块. 对于嵌入式Linux内核模块,可执行程序.代码库的调试可能更要复杂些.因为在大多数时候需要至少两台

Android系统移植与驱动开发心得

Android是什么? 它是一种优秀的.免费的.开源的嵌入式操作系统,任何人都可以利用Android的源代码定制属于自己的嵌入式系统.总之,Android 是Google开发的基于Linux平台的开源手机操作系统.Android系统可以搭载在手机.MP4.智能电视.车载系统等多种设备上. Android系统移植        Android 移植开发的最终目的是开发设备产品.从开发者的角度来看,这种类型的开发以具有硬件系统为前提,在不同类型的硬件系统基础上构建 Android 软件系统.这种类型

Android studio 使用心得(三)—从Eclipse迁移到Android studio

断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功后,我也能happy的开发了,两不误.直接来分享我捉摸的一点小成果吧 以Demo4 为例,并引用了library包appcompat_v7_8. 1,第一步,Eclipse还是要有滴,并且adt 得在22以上,我相信大家adt肯定在22以上了吧,不然还开发个毛. (1) 在Eclipse中,选择Fl

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

Android项目开发第五周

本周进展:本周是此次Android项目开发最后一周,按照进度基本上完成了Android游戏开发的各项任务. 总的开发报告如下: 1.需求分析: 当前移动互联网快速发展,人们生活逐渐趋于多元化,以智能手机为代表的电子产品逐渐受到人们的追捧,手机游戏渐渐地成为了人们休闲娱乐的一种方式.本款软件是一款基于Android系统下采用2.5D技术开发的休闲益智类塔防游戏.塔防游戏是目前市场上比较流行的一类游戏. 2.系统设计: 本游戏的策划主要包含:游戏类型定位.呈现技术以及目标平台的确定等工作. 游戏类型

为 Android 平台开发一个输入法

学习目标: 实现新的输入法 学习目的: 掌握Android输入法框架 学习收获: Android 1.5 新特色之一就是输入法框架(Input Method Framework,IMF),正是它的出现,才为诞生不带实体键盘的设备提供了可能.IMF设计用来支持不同的IME,包括了soft keyboard,hand-writing recognizes和hard keyboard translators.这里,我们把焦点锁定在soft keyboard上. 新特色对普通应用开发者而言,应该确保让应

Android上开发Android软件

先吐槽下Windows的Android开发环境配置,能把人恶心到死.为了这个,不小心把房东的楼梯护栏踢歪了.自己装过的人都懂,眼泪哗哗不想说了在Android上配置开发环境超乎寻常的简单,只需要下载一个软件就可以搞定:AIDE (Android java IDE)下载地址1: http://apk.banma.com/v0/app-feed/soft/apk/20140123/106bbb48f9c34982b84114f515958133.apk下载地址2:http://pan.baidu.c

Android相机开发详解(一)

Android相机开发详解(一) 请支持原创,尊重原创,转载请注明出处:http://blog.csdn.net/kangweijian(来自kangweijian的csdn博客) Android相机开发能够实现打开相机,前后摄像头切换,摄像预览,保存图片,浏览已拍照图片等相机功能. Android相机开发详解(一)主要实现打开相机,摄像预览,前后置摄像头切换,保存图片等四个功能. Android相机开发详解(二)主要实现翻页浏览相片,触控缩放浏览图片,删除图片,发送图片等四个功能. Andro