android源码问题解答之一(输入法)

本文将采取问答形式展开,收集的一些平时修改android平台源码遇到的问题。基于展讯平台,别的平台也基本上类似修改即可。

case 1:android:imeOptions有什么作用?

曾经出现一个问题:固定拨号横屏下保存输入PIN2码后完成功能失效。经检查发现编辑框的android:imeOptions="actionDone"属性没有设置。在android2.3.5上修改Phone/res/layout/get_pin2_screen.xml文件,为EditText android:id="@+id/pin添加android:imeOptions="actionDone"属性后问题解决。

默认情况下软键盘右下角的按钮为“下一个”,点击会到下一个输入框,保持软键盘;

当设置
android:imeOptions="actionDone"
,软键盘下方变成“完成”,点击后光标保持在原来的输入框上,并且软键盘关闭;

当设置android:imeOptions="actionSend"软键盘下方变成“发送”,点击后光标移动下一个。

case2:海外项目如何根据当地sim自动切换语言

修改文件:MccTable.java (frameworks\opt\telephony\src\java\com\android\internal\telephony)

找到sTable中对应的配置信息:

写成如下形式sTable.add(new MccEntry(460,"cn",2,"zh"));

locale.region为cn ,locale.language为zh表示所在地在中国,自动识别为中文

case3:android4.4 如何去除系统语言跟随sim卡地区变换功能?

如果想去除 系统语言跟随sim卡地区变换的功能按照如下方法修改

frameworks/opt/telephony/src/java/com/android/internal/telephony/MccTable.java文件中

updateMccMncConfiguration()函数 注释 locale = getLocaleFromMcc(context, mcc);

或注释掉 if (locale != null) {中如下两句

config.setLocale(locale);

updateConfig = true;

case4:如何在输入法中如何添加印度货币符号卢比。

1.如果是第三方输入法,需要联系第三方。

2.如果是安卓原生的latin IME,可以找到资源文件中的kbd_symbols.xml。 见如下:

<Key

android:keyLabel="$"

android:popupKeyboard="@xml/kbd_popup_template"

android:popupCharacters="¢£€¥????" />

keylabel是表示这个键显示的内容,如果是短按,就上屏这个字。

如果长按,就是弹出popup,请用户选择,选择的内容是popupCharacters中显示,

原生的latin IME中可选的是欧元,法郎等货币符号,可以把卢比的符号加入到这里。

3.如果需要增加别的符号,也可以像卢比添加的方式。

case5:怎么配置输入法默认声音和vibrator

以Google拼音为例:

Settings.java代码中存在initConfs配置函数

private void initConfs() {

mKeySound = mSharedPref.getBoolean(ANDPY_CONFS_KEYSOUND_KEY, true);

mVibrate = mSharedPref.getBoolean(ANDPY_CONFS_VIBRATE_KEY, false);

mPrediction = mSharedPref.getBoolean(ANDPY_CONFS_PREDICTION_KEY, true);

}

见声音配置(ANDPY_CONFS_KEYSOUND_KEY, true),设置成true代表默认打开,false代表关闭;

Vibrator也是如此配置;

case6:输入法开启按键震动,震感太弱,如何解决

此问题如果是单体即单个手机问题,则一般为硬件vibrator有点问题,如果不是单体问题,通过软件配置一般也可以达到加强震感的要求,该平台中具体配置如下:

packages\inputmethods\pinyinime\src\com\android\inputmethod\pinyin\SoftKeyboardView.java:

搜索mVibratePattern关键字,对此进行配置即可

如 protected long[] mVibratePattern = new long[] {1, 20};

改成    protected long[] mVibratePattern = new long[] {1, 50};

case7:如何配置输入法显示和隐藏

在应用程序设计中一般会有如下对输入法显示/隐藏的要求:

1:在启动之后,当获得输入焦点的时候,即要求显示输入法

2:在Activity跳转的时候,要求隐藏前一个输入焦点绑定的输入 等这些设计要求。

如下介绍三种配置方法:

一:在AndroidMainfest.xml中配置,

一般针对需要输入焦点出现时候就弹出IME的Activity下配置

android:windowSoftInputMode="..."配置参数如下:

stateHidden:用户选择activity时,软键盘总是被隐藏

stateAlwaysHidden:当该Activity主窗口获取输入焦点时,软键盘也总是被隐藏的

stateVisible:软键盘通常是可见的

stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

另外还有两个配置是为了动态调整输入框的位置

adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分 ---这个我们用的比较多,

一般当输入焦点比较多的Activity的时候,配置这个,系统会自动的调整Activity的界面,保证EditText不会被IME遮挡。一般会压缩Title和输入框之间的布局

二:在代码中配置

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

这里的WindowManager.LayoutParams有

SOFT_INPUT_ADJUST_PAN

SOFT_INPUT_ADJUST_RESIZE

SOFT_INPUT_STATE_ALWAYS_VISIBLE

SOFT_INPUT_STATE_ALWAYS_HIDDEN

SOFT_INPUT_STATE_HIDDEN

SOFT_INPUT_STATE_VISIBLE

SOFT_INPUT_STATE_UNSPECIFIED

SOFT_INPUT_STATE_UNCHANGED

这里的配置和上述AndroidManifest意思是一样的

如果我们在上述两个文件中都配置了,最后都是以代码中的配置为准

三:在Activity跳转的时候需要动态的显示/隐藏输入法

隐藏

public void hideInputMethod() {

InputMethodManager imm = getInputMethodManager();

if (imm != null) {

imm.hideSoftInputFromWindow(getWindowToken(), 0);//这里的Token 是当前焦点view的Token

}

}

显示

public void showInputMethod() {

InputMethodManager imm = getInputMethodManager();

if (imm != null) {

imm.showSoftInput(this, 0);

}

}

上述两种是常用的动态显示/隐藏输入法

case8:如何防止一个控件被过快重复点击

在android开发中,为防止控件过快点击,需要确保有效点击,即在有效时间内只记下一次点击事件

private boolean processFlag = true; //默认可以点击

//b_next 那个被点击的控件

b_next.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

if (processFlag) {

setProcessFlag();//

toNext();// 去执行的具体操作

new TimeThread().start();

}

}

});

/**

* 设置按钮在短时间内被重复点击的有效标识(true表示点击有效,false表示点击无效)

*/

private synchronized void setProcessFlag() {

processFlag = false;

}

/**

* 计时线程(防止在一定时间段内重复点击按钮)

*/

private class TimeThread extends Thread {

public void run() {

try {

sleep(1000);

processFlag = true;

} catch (Exception e) {

e.printStackTrace();

}

}

}

时间: 2024-10-13 04:08:59

android源码问题解答之一(输入法)的相关文章

android 源码问题解答(异常处理)

case1:如何做到按back键不退出应用后台继续运行? 在基类activity会调用onBackPressed这个方法,这个方法会finish当前这个activity,使得当前activity走到onDestory,如果想要按back键不走到onDestory,需要复写onBackPressed方法 @Override public void onBackPressed() { // TODO Auto-generated method stub // super.onBackPressed(

Android源码问题解答之三(状态栏和锁屏)

case1:如何调整状态栏中通知栏里图标的间隔 状态栏中通知栏的图标大多不是方方正正的矩形或者正方形,但是一旦两个或者两个以上的方正的图标相邻时,没有间隙,会有视觉上的局促感. 可以通过给图标增加间隙的方法,来使其更加美观.修改如下: frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java for (int i=0; i<toShow.size(); i++) {

Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境

Android源码浅析(二)--Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境 接着上篇,上片主要是介绍了一些安装工具的小知识点Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置,其实Ubuntu Kylin 16.04 LTS也只是为了体验,我们为了追求稳定,还是使用了Ubuntu14.04 这里提供一个国内镜像的下载链接,可以用迅雷,下载下来之后后缀

Linux Mint 安装、配置及搭建Android源码编译环境

用过ubuntu,现在想换换Linux Mint试试看.下面是我安装配置Linux Mint13的过程.1.安装 安装LinuxMint13时,我尝试了好多种方法,都失败了.最后选用了硬盘安装.硬盘安装Linuxmint和安装ubuntu一样.1.1.准备工作 1.从linux mint的官方网站http://www.linuxmint.com/ 下载linux mint 13. 2.下载grub4dos,http://www.linuxidc.com/Linux/2009-01/18027.h

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

利用国内镜像源下载、编译Android源码

在国内下载Android可是不太容易,不过从Google断断续续地下载了几天源码后发现清华大学有个TUNA镜像源可以下载Android源码,甚是方便. 参考网站: http://source.android.com/index.html https://aosp.tuna.tsinghua.edu.cn/ 一.环境准备: 现在Android源码的下载和编译在Linux和Mac OS上都可以了,但Mac OS上设置略微复杂点,所以我选择了Ubuntu 14.04 64位的虚拟机.(硬盘建议50G以

Android源码中的抽象工厂---IPolicy

抽象工厂应用是很广的,在Android源码中,这个IPolicy就是一个简单的抽象工厂模式.下面分析一下IPolicy及其实现,以及创建的相关对象(源码基于5.0.0). 抽象工厂 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. UML类图 通过继承抽象工厂,可以产生不同的产品系列 代码示例 abstract class AbsFactory{ public abstract AbsProductA createProduct1(); public abstract

android源码编译1

一.环境说明: 1.liunx系统:Ubuntu12.04 2.jdk:sun-java6-jdk 3.g++4.5 gcc4.5 二.android源码的目录结构 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development

Android核心服务解析篇(二)——Android源码结构分析

获得Android源码后,我们来分析源码结构.源码的全部工程分为如下三个部分. ①Core Project:核心工程部分,这是建立Android系统的基础,保存在根目录的各个文件夹中. ②External Project:扩展工程部分,可以使其他开源项目具有扩展功能,保存在external文件夹中. ③Package:包部分,提供了Android的应用程序,内容提供者,输入法和服务,保存在package文件夹中. 在获取的Android4.3源码目录中,包含了原始Android的目标机代码,主机