在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{
|
03 |
String inputString= "" ;
|
05 |
public MyInputConnection(View targetView, boolean fullEditor) {
|
06 |
super (targetView, fullEditor);
|
09 |
public boolean commitText(CharSequence text, int newCursorPosition){
|
10 |
inputString=inputString+(String) text;
|
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 |
import android.content.Context;
|
02 |
import android.graphics.Canvas;
|
03 |
import android.graphics.Color;
|
04 |
import android.graphics.Paint;
|
05 |
import android.view.SurfaceHolder;
|
06 |
import android.view.SurfaceHolder.Callback;
|
07 |
import android.view.SurfaceView;
|
08 |
import android.view.View;
|
09 |
import android.view.inputmethod.BaseInputConnection;
|
10 |
import android.view.inputmethod.CompletionInfo;
|
11 |
import android.view.inputmethod.EditorInfo;
|
12 |
import android.view.inputmethod.InputConnection;
|
13 |
import android.view.inputmethod.InputMethodManager;
|
15 |
public class SufaceInput extends SurfaceView implements SurfaceHolder.Callback , Runnable {
|
16 |
SurfaceHolder holder= null ;
|
17 |
String inputString= "xyz" ;
|
18 |
InputMethodManager input= null ;
|
19 |
public SufaceInput(Context context) {
|
21 |
holder= this .getHolder();
|
22 |
holder.addCallback( this );
|
23 |
this .setFocusable( true );
|
24 |
this .setFocusableInTouchMode( true );
|
26 |
input=(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
|
31 |
public void surfaceChanged(SurfaceHolder holder, int format, int width,
|
34 |
new Thread( this ).start();
|
35 |
input.showSoftInput( this , 0 );
|
38 |
public void surfaceCreated(SurfaceHolder holder) {
|
43 |
public void surfaceDestroyed(SurfaceHolder holder) {
|
48 |
class MyInputConnection extends BaseInputConnection{
|
50 |
public MyInputConnection(View targetView, boolean fullEditor) {
|
51 |
super (targetView, fullEditor);
|
54 |
public boolean commitText(CharSequence text, int newCursorPosition){
|
55 |
inputString=inputString+(String) text;
|
62 |
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
|
64 |
return new MyInputConnection( this , false );
|
70 |
Canvas c=holder.lockCanvas();
|
72 |
p.setColor(Color.RED);
|
73 |
c.drawColor(Color.WHITE);
|
74 |
c.drawText(inputString, 100 , 100 , p);
|
75 |
holder.unlockCanvasAndPost(c);
|
分享到:
相关推荐
然后,你可以通过拖放操作在界面上添加新的按钮或其他控件。每个控件都可以设置其显示文本、图标以及关联的VBA宏。宏的关联非常简单,只需从下拉列表中选择已定义的宏名称即可。这样,当你点击按钮时,Excel会自动...
开发者在开发自定义输入法时,需要重写InputMethodService中的某些方法,例如onCreateInputView()用于创建输入界面,onStartInputView()则在输入界面被启用时调用。 2. AndroidManifest.xml配置:在Android应用的...
启用Android USB Host API之前,请确保您具备以下条件: 1. 获取设备的root权限。 2. 确保系统中有名为`libusbhost.so`的驱动文件,通常位于`/system/lib/`目录下。 3. 需要在`/system/etc/permissions`目录下创建或...
<action android:name="android.view.InputMethod"/> android:name="android.view.im.meta" android:resource="@xml/method" /> ``` 5. 创建method.xml 在res/xml目录下创建一个method.xml文件,用于配置...
在Android开发中,有时我们可能需要在软键盘上添加自定义功能,比如一个搜索按钮或者一个额外的操作选项。这个需求通常出现在输入框交互较多的应用场景,例如聊天应用、搜索引擎等。下面将详细介绍如何在Android的软...
在本文中,我们将讨论如何使用 Swagger 在 Spring Boot 2.0 项目中自定义 UI 界面,以美观的蓝色风格实测通过。 一、 Swagger 简介 Swagger 是一个基于 OpenAPI 规范的 API 文档生成工具,能够自动生成 RESTful ...
本文将深入探讨如何使用Java语言在Android平台上实现一个自定义车牌号键盘。 首先,我们要明白自定义键盘的基本原理。Android系统提供了一个叫做`InputMethodService`的服务,它是`Service`的一个子类,专门用于...
虽然描述中没有提及,但一款完善的吉尔吉斯文输入法应考虑到不同操作系统(如Windows、MacOS、Linux)的兼容性,并可能提供移动设备版本(iOS、Android),以满足用户在不同设备上的需求。此外,支持Unicode编码可以...
在Android应用开发中,自定义界面是提升用户体验和实现独特功能的重要手段。在这个"Android自定义界面实现发短信的demo"中,我们将深入探讨如何在Android环境中构建一个用于发送短信的用户界面,并涵盖一些基本的...
本文将深入探讨如何在Android平台上创建一个自定义的软键盘,主要基于系统提供的`Keyboard`类进行改造,涵盖键盘焦点效果的调整以及键盘布局的设计。 首先,理解Android中的软键盘实现原理至关重要。Android系统...
在Android系统中,输入法(IME,Input Method Editor)是用户与设备交互的重要部分,尤其在进行文字输入时。以下将详细讲解这个源码中可能涉及的关键知识点: 1. **Android SDK和构建环境**:首先,开发者需要掌握...
在Android开发过程中,经常需要对UI进行个性化定制来满足不同应用的需求或提高用户体验。RadioButton是一种常用的控件,用于表示一组互斥的选择项。默认情况下,Android提供的RadioButton样式较为单一,可能无法满足...
在Android应用开发中,自定义字体常常用于提升用户体验和界面设计的独特性。"Smart Fonts for Android" 是一个针对Android Studio的插件,旨在简化开发者在Android应用中集成和使用自定义字体的过程。这个插件提供了...
本文将详细解析如何在Android平台上实现一个自定义软键盘,基于提供的"android自定义软键盘"项目——SoftInputDemo。 首先,自定义软键盘的基本流程包括以下几个步骤: 1. **创建布局文件**:自定义键盘的核心在于...
在Android开发中,有时我们需要创建自定义的View控件,并且希望这些自定义视图能够像EditText或TextView一样接收并处理来自输入法的输入内容。本文将详细介绍如何实现在自定义View上接收并处理输入法输入的内容。 ...
在Android应用开发中,"android 输入法弹出布局自动上移"是一个常见的用户体验问题,尤其在设备屏幕空间有限,如手机或小尺寸平板上。当用户在文本输入框(EditText)中点击,输入法键盘弹出时,由于屏幕高度限制,...
在Android平台上,输入法(IME,Input Method Editor)是应用程序层的一个关键组件,它允许用户通过触摸屏或其他输入设备进行文字输入。开发自定义输入法通常涉及到以下知识点: 1. **Android SDK和Eclipse/Android...
1. SogouInputIPhone4-4.1.2-20131031-39325.K4.7.35994.deb:这是搜狗输入法的安装包文件,包含了软件的所有功能模块和资源,用户可以通过安装此文件在iPhone上启用搜狗输入法。 2. mobilesubstrate_0.9.4001_...
在Android开发中,自定义控件是提升用户体验和界面独特性的重要手段。"android自定义上拉控件"是一个专为实现上拉效果设计的组件,这种效果常见于许多应用中,比如滚动到底部时加载更多内容的功能。下面将详细解释这...