目录

Android在游戏的SurfaceView中获取输入与使用EditText,Spinner等控件的方法

目录

[Android]在游戏的SurfaceView中获取输入与使用EditText,Spinner等控件的方法

游戏中有时候需要玩家输入信息,选择信息。在普通的 Android

程序里面,可以使用

EditText

Spinner

等输入控件方便地实现这些功能。但是,一般游戏是使用

SurfaceView

,所有的东西都是自己绘制。所以加入控件有些不伦不类。而且

SurfaceView

属于

View

,本身是不能追加的控件的。我在网络上找了许多文件,一般来说提到了一个方法在外面使用布局。但说到底还是不伦不类。而且使游戏的

UI

变得复杂。我想,做为一个游戏开发者,想要的应该是 一个获取输入的机制。

我在网上找了许多资料,没有一个资料实际上解决了这个问题。有些文件介绍到了使用BaseConnectionInput 加

InputMethodManager

来使

SurfaceView

获得输入,这个方法被到处转,但实际上不起作用。到最后,我在一个老外的网站上找到了答案,要使用以上的方法来使控件获取输入,这个控件至少是继承自

TextView

这种“具有接受输入能力”的控件。但既然继承了

SurfaceView

,那这就不一个选择了。

到最后没办法,我想了一个旁门左道来解决这个问题。我称为“ 代理机制 ”。这实际上不是通过 SurfaceView

获得输入,但是能够工作得很好。

首先,关于使用 EditText

的问题。游戏中需要获取玩家的输入,这是最关键的。其它的控件都可以使用点击事件来处理,只有这个最麻烦,需要键盘。要实现这个,需要几步。

**1、建立一个自己的 EditText

。**

这个很简单,人人都会做。继承 EditText

,复写

draw

方法,复写

draw

方法直接就使他变成空函数,什么都不做。增加一个自己的

TextWatcher

类用于处理文本改变后的逻辑。

**2、将自己的 EditText

添加到 ContentView中。**

一般使用 SurfaceView

是通过如下的方法:

SurfaceView gameSurface = new SurfaceView(this);

setContentView(gameSurface );

在后面加上:

EditText myEdit = new MyEditText(this);

addContentView(myEdit);

使 myEdit

成为主

Activity

的一个

ContentView

。但是,你在主界面看不到它。因为它的

draw

方法被你重写成不绘制任何东西了。他除了看不见之外,其它功能都是完好的。

有人会问,用 setVisibility(View.GONE)

把它配置成看不见行吗?不行,不知道为什么,这样它的功能就失效了。也许是因为它无法获得焦点或是其它什么原因。

3、使用输入代理。

在你需要输入的时候,使你的 EditText

获得焦点,然后使用 InputMethodManager打开软键盘。这样就大功造成了。其它的业务处理逻辑都在 TextWatcher

中处理就行了。关于 InputMethodManager的使用可以在网上查找,我就不详细介绍了。

public void openEditAgent(){

myEdit.requestFocus();

InputMethodManager input  = (InputMethodManager) context.getSystemService( Context.INPUT_METHOD_SERVICE);

input.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);

}

关于 Spinner

的使用也是如于同样的原理。

1

、继承,然后复写

draw

方法,使它看不见。

2

、使用

addContentView

加入到主

Activity

3

、调用。

Spinner

的调用比

EditText

简单,只需要模拟点击就行了。

public void openSpinnerAgent(){

mySpinner.requestFocus();

mySpinner.performClick();

}

这样,你就可以使用 Spinner

控件来完成游戏中要求的输入。当然,你也可以如法炮制其它控件的使用。

这是使用Spinner来获取输入时的样子。EditText不截图和平时使用一样把整个屏幕占了。

https://img-my.csdn.net/uploads/201208/22/1345630369_8015.png