Good day to all.

I am writing an application for android in which you need to use 3 custom keyboards. There are 3 EditText fields. 1 Cyrillic 2 Latin 3 transcription

public class WordsListActivity extends Activity { public static final String LOG_TAG = "WordsListActivity"; protected RecyclerView mRecyclerView; protected Button btnAddWord; protected WordViewAdapter mAdapter; protected RecyclerView.LayoutManager mLayoutManager; protected WordsListActivity.LayoutManagerType mCurrentLayoutManagerType; protected List<Word> wordsList; protected int categoryId; protected CustomKeyboard mCustomKeyboardEN, mCustomKeyboardRU, mCustomKeyboardTrancroption; protected ForegroundLinearLayout addWordLyout; protected Button okButton, cancelButton; protected EditText etWordOrigin, etWordTranslate, etWordTranscription; private enum LayoutManagerType { GRID_LAYOUT_MANAGER, LINEAR_LAYOUT_MANAGER } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_words_list); Intent intent = getIntent(); categoryId = (int) intent.getLongExtra("categoryId",0); View rootView = getLayoutInflater().inflate(R.layout.content_main, null).getRootView(); mRecyclerView = (RecyclerView)findViewById(R.id.wrodsRecyclerView); btnAddWord = (Button)findViewById(R.id.btnAddNewWord); mLayoutManager = new LinearLayoutManager(this); mCurrentLayoutManagerType = WordsListActivity.LayoutManagerType.LINEAR_LAYOUT_MANAGER; setRecyclerViewLayoutManager(mCurrentLayoutManagerType); addWordLyout =(ForegroundLinearLayout)findViewById(R.id.inputWordLayout); addWordLyout.setVisibility(View.INVISIBLE); etWordOrigin = (EditText)findViewById(R.id.etWordOrigin); etWordTranslate = (EditText)findViewById(R.id.etWordTranslate); etWordTranscription = (EditText)findViewById(R.id.etWordTrancription); okButton = (Button) findViewById(R.id.addButton); cancelButton = (Button) findViewById(R.id.cancelButton); /* тут создаю 3 экземпляра класса кастомной клавиатуры */ mCustomKeyboardRU = new CustomKeyboard(this, R.id.keyboardviewWords, R.xml.kbd_ru); mCustomKeyboardRU.registerEditText(R.id.etWordOrigin); mCustomKeyboardEN = new CustomKeyboard(this, R.id.keyboardviewWords, R.xml.kbd_en); mCustomKeyboardEN.registerEditText(R.id.etWordTranslate); mCustomKeyboardTrancroption = new CustomKeyboard(this, R.id.keyboardviewWords, R.xml.kbd_transcription); mCustomKeyboardTrancroption.registerEditText(R.id.etWordTrancription); btnAddWord.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addWordLyout.setVisibility(View.VISIBLE); } }); } @Override public void onBackPressed() { // NOTE Trap the back key: when the CustomKeyboard is still visible hide it, only when it is invisible, finish activity if( mCustomKeyboardRU.isCustomKeyboardVisible() ) mCustomKeyboardRU.hideCustomKeyboard(); else this.finish(); } public void setRecyclerViewLayoutManager(WordsListActivity.LayoutManagerType layoutManagerType) { /* mLayoutManager = new GridLayoutManager(this, SPAN_COUNT); mCurrentLayoutManagerType = LayoutManagerType.GRID_LAYOUT_MANAGER;*/ mLayoutManager = new LinearLayoutManager(this); mCurrentLayoutManagerType = WordsListActivity.LayoutManagerType.LINEAR_LAYOUT_MANAGER; mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.scrollToPosition(0); initDataset(); } private void initDataset() { wordsList = new DataBase(this).getWordsList(categoryId); mAdapter = new WordViewAdapter(wordsList, this); mRecyclerView.setAdapter(mAdapter); if(wordsList.size()==0){ Toast.makeText(this, "nothing to Show", Toast.LENGTH_LONG).show(); } } } 

I create 3 copies of a class. But in the end only the last one works. those. all 3 fields open the keyboard with transcription. And I would like to have each field had its own

And there is also an honestly copied custom keyboard class:

  public class CustomKeyboard { /** A link to the KeyboardView that is used to render this CustomKeyboard. */ private KeyboardView mKeyboardView; /** A link to the activity that hosts the {@link #mKeyboardView}. */ private Activity mHostActivity; /** The key (code) handler. */ private OnKeyboardActionListener mOnKeyboardActionListener = new OnKeyboardActionListener() { public final static int CodeDelete = -5; // Keyboard.KEYCODE_DELETE public final static int CodeCancel = -3; // Keyboard.KEYCODE_CANCEL public final static int CodePrev = 55000; public final static int CodeAllLeft = 55001; public final static int CodeLeft = 55002; public final static int CodeRight = 55003; public final static int CodeAllRight = 55004; public final static int CodeNext = 55005; public final static int CodeClear = 55006; @Override public void onKey(int primaryCode, int[] keyCodes) { // NOTE We can say '<Key android:codes="49,50" ... >' in the xml file; all codes come in keyCodes, the first in this list in primaryCode // Get the EditText and its Editable View focusCurrent = mHostActivity.getWindow().getCurrentFocus(); if( focusCurrent==null || focusCurrent.getClass()!=EditText.class ) return; EditText edittext = (EditText) focusCurrent; Editable editable = edittext.getText(); int start = edittext.getSelectionStart(); // Apply the key to the edittext if( primaryCode==CodeCancel ) { hideCustomKeyboard(); } else if( primaryCode==CodeDelete ) { if( editable!=null && start>0 ) editable.delete(start - 1, start); } else if( primaryCode==CodeClear ) { if( editable!=null ) editable.clear(); } else if( primaryCode==CodeLeft ) { if( start>0 ) edittext.setSelection(start - 1); } else if( primaryCode==CodeRight ) { if (start < edittext.length()) edittext.setSelection(start + 1); } else if( primaryCode==CodeAllLeft ) { edittext.setSelection(0); } else if( primaryCode==CodeAllRight ) { edittext.setSelection(edittext.length()); } else if( primaryCode==CodePrev ) { View focusNew= edittext.focusSearch(View.FOCUS_BACKWARD); if( focusNew!=null ) focusNew.requestFocus(); } else if( primaryCode==CodeNext ) { View focusNew= edittext.focusSearch(View.FOCUS_FORWARD); if( focusNew!=null ) focusNew.requestFocus(); } else { // insert character editable.insert(start, Character.toString((char) primaryCode)); } } @Override public void onPress(int arg0) { } @Override public void onRelease(int primaryCode) { } @Override public void onText(CharSequence text) { } @Override public void swipeDown() { } @Override public void swipeLeft() { } @Override public void swipeRight() { } @Override public void swipeUp() { } }; /** * Create a custom keyboard, that uses the KeyboardView (with resource id <var>viewid</var>) of the <var>host</var> activity, * and load the keyboard layout from xml file <var>layoutid</var> (see {@link Keyboard} for description). * Note that the <var>host</var> activity must have a <var>KeyboardView</var> in its layout (typically aligned with the bottom of the activity). * Note that the keyboard layout xml file may include key codes for navigation; see the constants in this class for their values. * Note that to enable EditText's to use this custom keyboard, call the {@link #registerEditText(int)}. * * @param host The hosting activity. * @param viewid The id of the KeyboardView. * @param layoutid The id of the xml file containing the keyboard layout. */ public CustomKeyboard(Activity host, int viewid, int layoutid) { mHostActivity= host; mKeyboardView= (KeyboardView)mHostActivity.findViewById(viewid); mKeyboardView.setKeyboard(new Keyboard(mHostActivity, layoutid)); mKeyboardView.setPreviewEnabled(false); // NOTE Do not show the preview balloons mKeyboardView.setOnKeyboardActionListener(mOnKeyboardActionListener); // Hide the standard keyboard initially mHostActivity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); } /** Returns whether the CustomKeyboard is visible. */ public boolean isCustomKeyboardVisible() { return mKeyboardView.getVisibility() == View.VISIBLE; } /** Make the CustomKeyboard visible, and hide the system keyboard for view v. */ public void showCustomKeyboard( View v ) { mKeyboardView.setVisibility(View.VISIBLE); mKeyboardView.setEnabled(true); if( v!=null ) ((InputMethodManager)mHostActivity.getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0); } /** Make the CustomKeyboard invisible. */ public void hideCustomKeyboard() { mKeyboardView.setVisibility(View.GONE); mKeyboardView.setEnabled(false); } /** * Register <var>EditText<var> with resource id <var>resid</var> (on the hosting activity) for using this custom keyboard. * * @param resid The resource id of the EditText that registers to the custom keyboard. */ public void registerEditText(int resid) { // Find the EditText 'resid' //TextInputEditText edittext= (TextInputEditText)mHostActivity.findViewById(resid); EditText edittext= (EditText)mHostActivity.findViewById(resid); // Make the custom keyboard appear edittext.setOnFocusChangeListener(new OnFocusChangeListener() { // NOTE By setting the on focus listener, we can show the custom keyboard when the edit box gets focus, but also hide it when the edit box loses focus @Override public void onFocusChange(View v, boolean hasFocus) { if( hasFocus ) showCustomKeyboard(v); else hideCustomKeyboard(); } }); edittext.setOnClickListener(new OnClickListener() { // NOTE By setting the on click listener, we can show the custom keyboard again, by tapping on an edit box that already had focus (but that had the keyboard hidden). @Override public void onClick(View v) { showCustomKeyboard(v); } }); // Disable standard keyboard hard way // NOTE There is also an easy way: 'edittext.setInputType(InputType.TYPE_NULL)' (but you will not have a cursor, and no 'edittext.setCursorVisible(true)' doesn't work ) edittext.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { EditText edittext = (EditText) v; int inType = edittext.getInputType(); // Backup the input type edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard edittext.onTouchEvent(event); // Call native handler edittext.setInputType(inType); // Restore input type return true; // Consume touch event } }); // Disable spell check (hex strings look like words to Android) edittext.setInputType(edittext.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); } } 

    0