问题就是我做的游戏界面,当游戏结束通关后,如何给用户编辑自己名字的功能,相当于通关存盘功能。 
我现在就在SurfaceView里画了个界面,不知道如果调出输入法编辑文字?图片地址:
 参考以下所谓的“答案”做了下,
http://blog.chinaunix.net/space.php?uid=24406894&do=blog&id=2608997只能调出输入法,无法在输入法输入字符和canvas之间同步,而且有错误,不过网上到处都是转贴。
无语了,错误的乱贴,也没有人纠正。其实这功能比较简单,不过我水平实在是有限,折腾了2天没招了。
求助。

解决方案 »

  1.   

    我都是在SurfaceView面画图实现界面的,根据点击的坐标范围,来调用输入法。
    比如点击横线区域就调用,但是在输入法输入的任何字符,都不能显示在canvas.drawtext内string里。也就是只能调出输入,无法编辑了。布局?我这里没用editText控件,是直接canvas写字符的,所以用不到布局
      

  2.   

    我感觉当游戏结束通关后转到一个用布局来填充View 的activity不是很方便吗!
    如果为了快速完成工作,能使用布局的地方使用布局挺好的!
      

  3.   

    我这个问题和布局没关系。
    我说明下,我没有用EditText控件,所以不需要用布局,因为整个界面就一个SurfaceView,其他没有1个控件,都是canvas画出来的,即使用了布局也就定义一个surfaceview,意思不大。遇到的问题是,输入法输入的文字,和SurfaceView/View里定义的String如何同步,并用canvas显示到Surfaceview/view的问题。可能我表述有问题,抱歉。
      

  4.   

    下面是网上提到最多的所谓“答案”的代码,其实是有问题的,我参考这个写的,谁帮忙看看。import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceHolder.Callback; 
    import android.view.SurfaceView; 
    import android.view.View; 
    import android.view.inputmethod.BaseInputConnection; 
    import android.view.inputmethod.CompletionInfo; 
    import android.view.inputmethod.EditorInfo; 
    import android.view.inputmethod.InputConnection; 
    import android.view.inputmethod.InputMethodManager; 
      
    public class test extends SurfaceView implements SurfaceHolder.Callback , Runnable { 
        SurfaceHolder holder=null; 
        String inputString="xyz"; 
        InputMethodManager input=null; 
        
        public test(Context context) 
        { 
            super(context); 
            holder=this.getHolder(); 
            holder.addCallback(this); 
            //this.setFocusable(true); 
            //this.setFocusableInTouchMode(true); 
            
            input=(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
            
            // TODO Auto-generated constructor stub 
        }
        public void surfaceChanged(SurfaceHolder holder, int format, int width, 
                int height) { 
            // TODO Auto-generated method stub 
            new Thread(this).start(); 
            input.showSoftInput(this, 0); 
        }
        public void surfaceCreated(SurfaceHolder holder) { 
            // TODO Auto-generated method stub 
            
        }
        public void surfaceDestroyed(SurfaceHolder holder) { 
            // TODO Auto-generated method stub 
            
        }
        class MyInputConnection extends BaseInputConnection{
            public MyInputConnection(View targetView, boolean fullEditor) { 
                super(targetView, fullEditor); 
                // TODO Auto-generated constructor stub 
            } 
            public boolean commitText(CharSequence text, int newCursorPosition){ 
                inputString=inputString+(String) text; 
                return true; 
            } 
            
        }
        @Override 
        public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
            // TODO Auto-generated method stub 
            return new MyInputConnection(this,false);//super.onCreateInputConnection(outAttrs); 
        }
        public void run() { 
            // TODO Auto-generated method stub 
            while(true){ 
                Canvas c=holder.lockCanvas(); 
                Paint p=new Paint(); 
                p.setColor(Color.RED); 
                c.drawColor(Color.WHITE); 
                c.drawText(inputString, 100, 100, p); 
                holder.unlockCanvasAndPost(c); 
                
            } 
        } 
    }
      

  5.   

    模拟器2.1和2.2居然还有差别,faint
    2.1的还能输入字符,2.2的就不行了。
      

  6.   

    继承EditText 重写的onDraw方法,将他的图片做成你要的图片效果。再 将其画到SurfaceView上面。
    自动就有编辑修改的功能。