`
1025250620
  • 浏览: 230474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI) 转

 
阅读更多

在android中经常会自定义组件,自定义的组件可以通过继承系统的已经有的组件来实现。也可以直接继承自View或者是SurfaceView 界面。有时候想在这些界面中输入文字,例如游戏中经常用到的SurfaceView上让用户输入文字。由于多数android都没有实体的输入键盘,另外 android中都启用了输入法功能,如非英文用户都需要安装指定的输入法等。 因此在这些界面中输入文字首先需要调用输入法功能。

在Android中,输入法(IME)是通过InputMethodService来提供的。 你要做的是在你的view里面启动输入法。 在View里面启用输入法,需要实现的方法是

这个方法会返回一个InputConnection对象。 InputCo

1 public InputConnection onCreateInputConnection(EditorInfo outAttrs) {}

 

nnection就是建立你的View与InputMethodService之间的桥梁。输入法就是通过IntputConnection将文字内容传输到View当中。

为了实现输入功能,我们需要创建自己的InputConnection类。 他的作用是接收输入法提交的内容,并可以对输入法提交的文字内容进行做进一步的处理。

01 class MyInputConnection extends BaseInputConnection{
02  
03         String inputString="";
04  
05         public MyInputConnection(View targetView, booleanfullEditor) {
06             super(targetView, fullEditor);
07             // TODO Auto-generated constructor stub
08         }
09         public boolean commitText(CharSequence text, intnewCursorPosition){
10             inputString=inputString+(String) text;
11             returntrue;
12         }
13          
14     }

 

MyInputConnection继承自BaseInputConnection,BaseInputConnection继承自 InputConnection。 这里面必须要实现的一个方法就是public boolean commitText(CharSequence text, int newCursorPosition), 第一个参数text就是输入法在完成一次输入时提交的文字内容。我们现在直接保存到inputString中, 这样输入法输入的内容会源源不断的添加到nputString中。我们只需要读取inputString就可以得到输入法输入的文字。

接下来要帮的是在需要输入的时候显示出输入法。 当view里需要用户输入的时候,

1 InputMethodManager  input=(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
2 input.showSoftInput(this,0);

 

即可以调用出输入法。

以下代码是我在SurfaceView里做的一个演示。

01 importandroid.content.Context;
02 importandroid.graphics.Canvas;
03 importandroid.graphics.Color;
04 importandroid.graphics.Paint;
05 importandroid.view.SurfaceHolder;
06 importandroid.view.SurfaceHolder.Callback;
07 importandroid.view.SurfaceView;
08 importandroid.view.View;
09 importandroid.view.inputmethod.BaseInputConnection;
10 importandroid.view.inputmethod.CompletionInfo;
11 importandroid.view.inputmethod.EditorInfo;
12 importandroid.view.inputmethod.InputConnection;
13 importandroid.view.inputmethod.InputMethodManager;
14    
15 public class SufaceInput extends SurfaceView implementsSurfaceHolder.Callback , Runnable {
16     SurfaceHolder holder=null;
17     String inputString="xyz";
18     InputMethodManager input=null;
19     publicSufaceInput(Context context) {
20         super(context);
21         holder=this.getHolder();
22         holder.addCallback(this);
23         this.setFocusable(true);
24         this.setFocusableInTouchMode(true);
25          
26         input=(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
27          
28         // TODO Auto-generated constructor stub
29     }
30  
31     public void surfaceChanged(SurfaceHolder holder, int format, intwidth,
32             intheight) {
33         // TODO Auto-generated method stub
34         newThread(this).start();
35         input.showSoftInput(this0);
36     }
37  
38     public voidsurfaceCreated(SurfaceHolder holder) {
39         // TODO Auto-generated method stub
40          
41     }
42  
43     public voidsurfaceDestroyed(SurfaceHolder holder) {
44         // TODO Auto-generated method stub
45          
46     }
47  
48     class MyInputConnection extends BaseInputConnection{
49  
50         public MyInputConnection(View targetView, booleanfullEditor) {
51             super(targetView, fullEditor);
52             // TODO Auto-generated constructor stub
53         }
54         public boolean commitText(CharSequence text, intnewCursorPosition){
55             inputString=inputString+(String) text;
56             returntrue;
57         }
58          
59     }
60  
61     @Override
62     publicInputConnection onCreateInputConnection(EditorInfo outAttrs) {
63         // TODO Auto-generated method stub
64         return newMyInputConnection(this,false);//super.onCreateInputConnection(outAttrs);
65     }
66  
67     public voidrun() {
68         // TODO Auto-generated method stub
69         while(true){
70             Canvas c=holder.lockCanvas();
71             Paint p=newPaint();
72             p.setColor(Color.RED);
73             c.drawColor(Color.WHITE);
74             c.drawText(inputString, 100100, p);
75             holder.unlockCanvasAndPost(c);
76              
77         }
78     }
79 }
分享到:
评论

相关推荐

    CustomUIEditor.zip

    然后,你可以通过拖放操作在界面上添加新的按钮或其他控件。每个控件都可以设置其显示文本、图标以及关联的VBA宏。宏的关联非常简单,只需从下拉列表中选择已定义的宏名称即可。这样,当你点击按钮时,Excel会自动...

    Android之输入法开发简单说明.pdf

    开发者在开发自定义输入法时,需要重写InputMethodService中的某些方法,例如onCreateInputView()用于创建输入界面,onStartInputView()则在输入界面被启用时调用。 2. AndroidManifest.xml配置:在Android应用的...

    how to enable android usb host api

    启用Android USB Host API之前,请确保您具备以下条件: 1. 获取设备的root权限。 2. 确保系统中有名为`libusbhost.so`的驱动文件,通常位于`/system/lib/`目录下。 3. 需要在`/system/etc/permissions`目录下创建或...

    Android-Android自定义键盘数字键盘和字母键盘

    <action android:name="android.view.InputMethod"/> android:name="android.view.im.meta" android:resource="@xml/method" /> ``` 5. 创建method.xml 在res/xml目录下创建一个method.xml文件,用于配置...

    Swagger 自定义UI界面.doc

    在本文中,我们将讨论如何使用 Swagger 在 Spring Boot 2.0 项目中自定义 UI 界面,以美观的蓝色风格实测通过。 一、 Swagger 简介 Swagger 是一个基于 OpenAPI 规范的 API 文档生成工具,能够自动生成 RESTful ...

    自定义车牌号键盘_Android(Java)

    本文将深入探讨如何使用Java语言在Android平台上实现一个自定义车牌号键盘。 首先,我们要明白自定义键盘的基本原理。Android系统提供了一个叫做`InputMethodService`的服务,它是`Service`的一个子类,专门用于...

    吉尔吉斯文输入法 kyrgyzstan-input-method

    虽然描述中没有提及,但一款完善的吉尔吉斯文输入法应考虑到不同操作系统(如Windows、MacOS、Linux)的兼容性,并可能提供移动设备版本(iOS、Android),以满足用户在不同设备上的需求。此外,支持Unicode编码可以...

    Android自定义界面实现发短信的demo

    在Android应用开发中,自定义界面是提升用户体验和实现独特功能的重要手段。在这个"Android自定义界面实现发短信的demo"中,我们将深入探讨如何在Android环境中构建一个用于发送短信的用户界面,并涵盖一些基本的...

    Android高级应用源码-最简单的输入法.zip

    在Android系统中,输入法(IME,Input Method Editor)是用户与设备交互的重要部分,尤其在进行文字输入时。以下将详细讲解这个源码中可能涉及的关键知识点: 1. **Android SDK和构建环境**:首先,开发者需要掌握...

    android 自定义RadioButton的样式

    在Android开发过程中,经常需要对UI进行个性化定制来满足不同应用的需求或提高用户体验。RadioButton是一种常用的控件,用于表示一组互斥的选择项。默认情况下,Android提供的RadioButton样式较为单一,可能无法满足...

    Android-SmartFontsforAndroid轻轻松松使用Android自定义字体

    在Android应用开发中,自定义字体常常用于提升用户体验和界面设计的独特性。"Smart Fonts for Android" 是一个针对Android Studio的插件,旨在简化开发者在Android应用中集成和使用自定义字体的过程。这个插件提供了...

    android自定义软键盘

    本文将详细解析如何在Android平台上实现一个自定义软键盘,基于提供的"android自定义软键盘"项目——SoftInputDemo。 首先,自定义软键盘的基本流程包括以下几个步骤: 1. **创建布局文件**:自定义键盘的核心在于...

    android软键盘上添加一个按钮

    在Android开发中,有时我们可能需要在软键盘上添加自定义功能,比如一个搜索按钮或者一个额外的操作选项。这个需求通常出现在输入框交互较多的应用场景,例如聊天应用、搜索引擎等。下面将详细介绍如何在Android的软...

    Android自定义View接收输入法输入的内容

    在Android开发中,有时我们需要创建自定义的View控件,并且希望这些自定义视图能够像EditText或TextView一样接收并处理来自输入法的输入内容。本文将详细介绍如何实现在自定义View上接收并处理输入法输入的内容。 ...

    android 输入法弹出布局自动上移

    在Android应用开发中,"android 输入法弹出布局自动上移"是一个常见的用户体验问题,尤其在设备屏幕空间有限,如手机或小尺寸平板上。当用户在文本输入框(EditText)中点击,输入法键盘弹出时,由于屏幕高度限制,...

    最简单的输入法_键盘Android源码.zip

    在Android平台上,输入法(IME,Input Method Editor)是应用程序层的一个关键组件,它允许用户通过触摸屏或其他输入设备进行文字输入。开发自定义输入法通常涉及到以下知识点: 1. **Android SDK和Eclipse/Android...

    搜狗输入法 for iphone SogouInput_iPhone

    1. SogouInputIPhone4-4.1.2-20131031-39325.K4.7.35994.deb:这是搜狗输入法的安装包文件,包含了软件的所有功能模块和资源,用户可以通过安装此文件在iPhone上启用搜狗输入法。 2. mobilesubstrate_0.9.4001_...

    android自定义上拉控件

    在Android开发中,自定义控件是提升用户体验和界面独特性的重要手段。"android自定义上拉控件"是一个专为实现上拉效果设计的组件,这种效果常见于许多应用中,比如滚动到底部时加载更多内容的功能。下面将详细解释这...

    Android自定义软键盘

    在AndroidManifest.xml中注册你的InputMethodService,并在`<intent-filter>`标签内添加`<action android:name="android.view.inputmethod.InputMethod" />`,表明这是一个输入法服务。 5. 设置为默认键盘: 用户...

    Android中文输入法实现-杨武

    - **安装与注册**:在`AndroidManifest.xml`中声明输入法权限,并在`res/xml/method.xml`中配置输入法属性,确保IME能在系统中被正确识别和启用。 - **激活输入法**:通过`InputConnection`接口与编辑器交互,`...

Global site tag (gtag.js) - Google Analytics