My app opens the input method picker (the menu where you choose a keyboard) with InputMethodManager.showInputMethodPicker()
. My app doesn\'t actually create the
There is no such mechanism for check InputMethodPicker
is open or not.
But you can check it via another way like as using hasWindowFocus()
method for check has focus of your root layout.
Below is sample code:
Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/btnPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Picker" />
<Button
android:id="@+id/btnCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop" />
</LinearLayout>
DemoappActivity.class
public class DemoappActivity extends Activity {
/** Called when the activity is first created. */
Button btn1 , btn2;
InputMethodManager imeManager;
LinearLayout mLayoutRoot;
TimerTask timertask;
Timer timer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayoutRoot = (LinearLayout)findViewById(R.id.mainlayout);
imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
btn1 = (Button)findViewById(R.id.btnPicker);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showInputMethodPicker();
}
});
btn2 = (Button)findViewById(R.id.btnCheck);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
timer.cancel();
}
});
checkMyWindowHasFocus();
}
@Override
protected void onDestroy() {
timer.cancel();
super.onDestroy();
}
public void checkMyWindowHasFocus()
{
timertask = new TimerTask() {
@Override
public void run() {
System.out.println("has window focus..."+mLayoutRoot.hasWindowFocus());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Has focus "+mLayoutRoot.hasWindowFocus(), Toast.LENGTH_SHORT).show();
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 500, 5000);
}
private void showInputMethodPicker() {
if (imeManager != null) {
imeManager.showInputMethodPicker();
} else {
Toast.makeText(this, "Error",Toast.LENGTH_LONG).show();
}
}
}
Here is a small trick. Please do test it and let us know if it works.
All you have to do is make your activity extend this InputMethodActivity. When you need the user to pick input method, call pickInput(), and onInputMethodPicked() will be called when the user is done.
package mobi.sherif.inputchangecheck;
import android.os.Bundle;
import android.os.Handler;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.inputmethod.InputMethodManager;
public abstract class InputMethodActivity extends FragmentActivity {
protected abstract void onInputMethodPicked();
@Override
protected void onCreate(Bundle savedInstanceState) {
mState = NONE;
super.onCreate(savedInstanceState);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(mState == PICKING) {
mState = CHOSEN;
}
else if(mState == CHOSEN) {
onInputMethodPicked();
}
}
private static final int NONE = 0;
private static final int PICKING = 1;
private static final int CHOSEN = 2;
private int mState;
protected final void pickInput() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
mState = PICKING;
}
}
Simple you can know by using buildin function:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
isMyInputMethodEnabled();// write what ever you want to do after default keyboard selected
}
public void isMyInputMethodEnabled() {
String imId = Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
if (imId.contains(getPackageName())) {
startActivity(new Intent(this, Main_uk.class));
finish();
}
}