java - 如何在不扩展 Activity 的情况下使用编辑文本

标签 java android

我正在制作一个游戏,并试图让键盘在触摸某个区域时弹出。 我已经扩展了一个名为 Screen 的类,并且无法扩展我知道编辑文本但对我不起作用的 Activity。他们有另一种解决办法吗?或者除非你可以让编辑文本在这里工作,因为我一直在尝试但没有运气。`package com.rmjr42.math4kidz;

import java.util.List;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Looper;
import android.widget.EditText;

import com.rmjr42.framework.Game;
import com.rmjr42.framework.Graphics;
import com.rmjr42.framework.Image;
import com.rmjr42.framework.Screen;
import com.rmjr42.framework.Graphics.ImageFormat;
import com.rmjr42.framework.Input.TouchEvent;

public class GameScreenCount extends Screen {
    //Math4Kidz keyboard=new Math4Kidz();
    //  EditText text;
    //Surface s=new Surface();
    enum GameState {
        Ready, Running, Paused, GameOver
    }
    GameState state = GameState.Ready;
    // Variable Setup   
    Paint paint, paint2;

    public GameScreenCount(Game game) {
        super(game);
        //  Looper.prepare();
        // Initialize game objects here

        Graphics g = game.getGraphics();

        NewImage pic=new NewImage();


        Assets.background = g.newImage(pic.randombackground(), ImageFormat.RGB565);
        //get one random
        Assets.pic1=g.newImage(pic.singleImage(),ImageFormat.RGB565);

        // Defining a paint object
        paint = new Paint();
        paint.setTextSize(70);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);

        paint2 = new Paint();
        paint2.setTextSize(100);
        paint2.setTextAlign(Paint.Align.CENTER);
        paint2.setAntiAlias(true);
        paint2.setColor(Color.WHITE);

    }




    @Override
    public void update(float deltaTime) {
        List<TouchEvent> touchEvents = game.getInput().getTouchEvents();



        if (state == GameState.Ready)
            updateReady(touchEvents);
        if (state == GameState.Running)
            updateRunning(touchEvents, deltaTime);
        if (state == GameState.Paused)
            updatePaused(touchEvents);
        if (state == GameState.GameOver)
            updateGameOver(touchEvents);
    }

    private void updateReady(List<TouchEvent> touchEvents) {

        state = GameState.Running;
    }

    private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {



        // 1. All touch input is handled here:
        int len = touchEvents.size();
        Graphics g = game.getGraphics();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);

            if (event.type == TouchEvent.TOUCH_UP) {
                if (inBounds(event, 300, 100, 200, 200)) {
                    //Looper.prepare();//EDIT TEXT SHOULD GO HERE


                    //game.setScreen(new GameScreenCount(game));
                }

            }
        }





    }

    private boolean inBounds(TouchEvent event, int x, int y, int width,
            int height) {
        if (event.x > x && event.x < x + width - 1 && event.y > y
                && event.y < y + height - 1)
            return true;
        else
            return false;
    }

    private void updatePaused(List<TouchEvent> touchEvents) {
        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_UP) {
                if (inBounds(event, 0, 0, 800, 240)){

                    if (!inBounds(event, 0, 0, 35, 35)){
                        resume();}
                }

                if (inBounds(event, 0, 240, 800, 240)){
                    nullify();
                    goToMenu();
                }
            }
        }
    }

    private void updateGameOver(List<TouchEvent> touchEvents) {
        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_DOWN) {
                if (inBounds(event, 0, 0, 800, 480)) {
                    nullify();
                    game.setScreen(new MainMenuScreen(game));
                    return;
                }
            }
        }

    }







    @Override
    public void paint(float deltaTime) {
        Graphics g = game.getGraphics();

        g.drawImage(Assets.background, 0, 0);
        g.drawImage(Assets.pic1, 300, 100);
        g.drawString("How many are there ? ", 400, 400, paint);


        // Secondly, draw the UI above the game elements.

        if (state == GameState.Paused)
            drawPausedUI();
        if (state == GameState.GameOver)
            drawGameOverUI();

    }


    private void nullify() {
        paint = null;
        // Call garbage collector to clean up memory.
        System.gc();


    }
    private void drawPausedUI() {
        Graphics g = game.getGraphics();
        // Darken the entire screen so you can display the Paused screen.
        g.drawARGB(155, 0, 0, 0);
        g.drawString("Resume", 400, 165, paint2);
        g.drawString("Menu", 400, 360, paint2);
    }

    private void drawGameOverUI() {
        Graphics g = game.getGraphics();
        g.drawRect(0, 0, 1281, 801, Color.BLACK);
        g.drawString("GAME OVER.", 400, 240, paint2);
        g.drawString("Tap to return.", 400, 290, paint);

    }

    @Override
    public void pause() {
        if (state == GameState.Running)
            state = GameState.Paused;

    }

    @Override
    public void resume() {
        if (state == GameState.Paused)
            state = GameState.Running;
    }

    @Override
    public void dispose() {

    }

    @Override
    public void backButton() {
        pause();
    }

    private void goToMenu() {
        // TODO Auto-generated method stub
        game.setScreen(new MainMenuScreen(game));

    }


}

最佳答案

这需要大量工作,特别是如果您想使用任何键盘都能很好地工作。

Android 有一个输入法框架,允许类与键盘交互。一半是通过键盘实现的,一半是通过编辑字段实现的。你需要做后半部分。您需要实现的主要接口(interface)是

android.view.inputmethod.InputMethod

看看这个和包的其余部分。

关于java - 如何在不扩展 Activity 的情况下使用编辑文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421654/

相关文章:

java - 如何实现最不常用 (LFU) 缓存?

java - 如何打开没有扩展名的文件

java - Spring MVC 中的外部化属性文件

Android - 如果页面不适合,如何将页面设置为滚动?

java - 为什么我会收到 InvocationTargetException?安卓2D游戏

android - 双音安卓

java - 对自动完成执行过滤

java - 我必须在交易中放置准备好的语句的地方

android - React Native + WebView + android 模拟器,WebGL 支持

java - 从 Android 应用程序到 GoDaddy 服务器的 HTTP 请求间歇性超时