Android调用输入法软键盘,返回输入的内容

Android调用输入法软键盘,返回输入的内容       

        分类:            Android 32人阅读 评论(0) 收藏 举报

我们一直在讲,C++写游戏代码,然后通过NDK编译,然后展现在Android层。


在游戏中的各种输入框,点击就会出现Android的软键盘。这其实是C++调用了Android层,然后在Android层获得软键盘的输入内容,然后把内容返回到C++层。


我们这里讲的是Android层调出软键盘然后获取到用户输入显示在TextView上面,至于怎么将Android层获取到的内容返回到C++层,请看

C++调用Android 与Android调用C++ 例子

好了,下面是Android调用输入法软键盘获取用户输入的例子。



工程名:Cocos2dInput

包名:com.example.cocos2dinput


我们工程里面有两个Activity,一个是主界面,另外一个界面上有一个输入框加上一个完成按钮,点击完成按钮就把获取到的软键盘输入传递到主界面Activity


MainActivity:

  1. package com.example.cocos2dinput; 
  2.  
  3. import android.hardware.input.InputManager; 
  4. import android.os.Bundle; 
  5. import android.R.integer; 
  6. import android.app.Activity; 
  7. import android.app.AlertDialog; 
  8. import android.app.AlertDialog.Builder; 
  9. import android.content.Context; 
  10. import android.content.DialogInterface; 
  11. import android.content.Intent; 
  12. import android.util.Log; 
  13. import android.view.Menu; 
  14. import android.view.View; 
  15. import android.view.View.OnClickListener; 
  16. import android.view.inputmethod.InputMethodManager; 
  17. import android.widget.Button; 
  18. import android.widget.TextView; 
  19.  
  20. public class MainActivity extends Activity { 
  21.      
  22.     TextView ContentTextView; 
  23.     Button button; 
  24.     Button buttonCallC; 
  25.     String contentString; 
  26.     public static Context mContext; 
  27.  
  28.     @Override 
  29.     protected void onCreate(Bundle savedInstanceState) { 
  30.         super.onCreate(savedInstanceState); 
  31.         setContentView(R.layout.activity_main); 
  32.          
  33.          
  34.         contentString=getStringFromC(); 
  35.         ContentTextView=(TextView)findViewById(R.id.text1); 
  36.         ContentTextView.setText(contentString); 
  37.         button=(Button)findViewById(R.id.button1); 
  38.         buttonCallC=(Button)findViewById(R.id.button2); 
  39.          
  40.         mContext=this.getApplicationContext(); 
  41.          
  42.         button.setOnClickListener(new OnClickListener() { 
  43.              
  44.             @Override 
  45.             public void onClick(View arg0) { 
  46.                 // TODO Auto-generated method stub 
  47.                 //InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
  48.                 //inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
  49.                  
  50.                 Intent intent=new Intent(); 
  51.                 intent.setClassName(getApplication(),"com.example.cocos2dinput.InputActivity"); 
  52.                 startActivityForResult(intent, 0); 
  53.             } 
  54.         }); 
  55.          
  56.     } 
  57.      
  58.      
  59.      
  60.     @Override 
  61.     protected void onActivityResult(int requestCode,int resultCode,Intent intent) 
  62.     { 
  63.         switch (resultCode) { 
  64.         case RESULT_OK: 
  65.             Bundle bundle=intent.getBundleExtra("resultBundle"); 
  66.             contentString=bundle.getString("contentString"); 
  67.             ContentTextView.setText(contentString); 
  68.             break
  69.  
  70.         default
  71.             break
  72.         } 
  73.     } 
  74.  
  75.     @Override 
  76.     public boolean onCreateOptionsMenu(Menu menu) { 
  77.         // Inflate the menu; this adds items to the action bar if it is present. 
  78.         getMenuInflater().inflate(R.menu.main, menu); 
  79.         return true
  80.     } 
  81.      
  82.     static
  83.         System.loadLibrary("cocos2dinput"); 
  84.     } 
  85.  
package com.example.cocos2dinput;

import android.hardware.input.InputManager;
import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	TextView ContentTextView;
	Button button;
	Button buttonCallC;
	String contentString;
	public static Context mContext;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		contentString=getStringFromC();
		ContentTextView=(TextView)findViewById(R.id.text1);
		ContentTextView.setText(contentString);
		button=(Button)findViewById(R.id.button1);
		buttonCallC=(Button)findViewById(R.id.button2);
		
		mContext=this.getApplicationContext();
		
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				//InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
				//inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
				
				Intent intent=new Intent();
				intent.setClassName(getApplication(),"com.example.cocos2dinput.InputActivity");
				startActivityForResult(intent, 0);
			}
		});
		
	}
	
	
	
	@Override
	protected void onActivityResult(int requestCode,int resultCode,Intent intent)
	{
		switch (resultCode) {
		case RESULT_OK:
			Bundle bundle=intent.getBundleExtra("resultBundle");
			contentString=bundle.getString("contentString");
			ContentTextView.setText(contentString);
			break;

		default:
			break;
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	static{
		System.loadLibrary("cocos2dinput");
	}

}


InputActivity:一个输入框和一个完成按钮

  1. package com.example.cocos2dinput; 
  2.  
  3. import android.os.Bundle; 
  4. import android.app.Activity; 
  5. import android.content.Context; 
  6. import android.content.Intent; 
  7. import android.view.Menu; 
  8. import android.view.View; 
  9. import android.view.View.OnClickListener; 
  10. import android.view.View.OnFocusChangeListener; 
  11. import android.view.inputmethod.InputMethodManager; 
  12. import android.widget.Button; 
  13. import android.widget.EditText; 
  14.  
  15. public class InputActivity extends Activity implements OnClickListener { 
  16.  
  17.     public EditText editText; 
  18.     public Button button; 
  19.     public Intent mIntent; 
  20.      
  21.     @Override 
  22.     protected void onCreate(Bundle savedInstanceState) { 
  23.         super.onCreate(savedInstanceState); 
  24.         setContentView(R.layout.activity_input); 
  25.          
  26.         editText=(EditText)findViewById(R.id.editText1); 
  27.         button=(Button)findViewById(R.id.button1); 
  28.          
  29.         mIntent=this.getIntent(); 
  30.          
  31.         button.setOnClickListener(this); 
  32.          
  33.          
  34.     } 
  35.  
  36.     @Override 
  37.     public boolean onCreateOptionsMenu(Menu menu) { 
  38.         // Inflate the menu; this adds items to the action bar if it is present. 
  39.         getMenuInflater().inflate(R.menu.input, menu); 
  40.         return true
  41.     } 
  42.  
  43.     @Override 
  44.     public void onClick(View v) { 
  45.         // TODO Auto-generated method stub 
  46.  
  47.         InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
  48.         //inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
  49.          
  50.         //隐藏 
  51.         inputMethodManager.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
  52.          
  53.         //传送内容到上一个Activity 
  54.         Bundle resultBundle=new Bundle(); 
  55.         resultBundle.putString("contentString", editText.getText().toString().trim()); 
  56.         mIntent.putExtra("resultBundle", resultBundle); 
  57.         setResult(RESULT_OK,mIntent); 
  58.         this.finish();       
  59.     } 
package com.example.cocos2dinput;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;

public class InputActivity extends Activity implements OnClickListener {

	public EditText editText;
	public Button button;
	public Intent mIntent;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_input);
		
		editText=(EditText)findViewById(R.id.editText1);
		button=(Button)findViewById(R.id.button1);
		
		mIntent=this.getIntent();
		
		button.setOnClickListener(this);
		
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.input, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub

		InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
		//inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
		
		//隐藏
		inputMethodManager.hideSoftInputFromWindow(editText.getWindowToken(), 0);
		
		//传送内容到上一个Activity
		Bundle resultBundle=new Bundle();
		resultBundle.putString("contentString", editText.getText().toString().trim());
		mIntent.putExtra("resultBundle", resultBundle);
		setResult(RESULT_OK,mIntent);
		this.finish();		
	}
}


1. 点击游戏中的输入框,触发事件

2. 从C++调用Android层的InputActivity,显示出Android层输入框和软键盘。

3. InputActivity中的输入框显示出了输入的内容,点击完成按钮,Android调用C++ 传递输入内容到上一个Activity(即游戏中)

4. 在C++层设置输入框显示。


OK,完工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值