Я слежу за отличным руководством Maarten Pennings на пользовательских клавиатурах Android http://www.fampennings.nl/maarten/android/09keyboard/index.htm и может успешно использовать пользовательскую клавиатуру для редактирования одного или нескольких EditTexts. Моя проблема возникает, когда я пытаюсь использовать несколько настраиваемых клавиатур в одном действии. Возьмите пример шестнадцатеричной клавиатуры Маартен, если вместо edittext0, edittext3 и edittext4 все с использованием специальной шестнадцатеричной клавиатуры, что, если я хочу, чтобы edittext0 использовал шестнадцатеричную клавиатуру, edittext3, чтобы использовать собственную восьмеричную клавиатуру, которую я построил, и edittext4, чтобы использовать пользовательская клавиатура с двенадцатиместной клавиатурой. Я попытался следующие в моем MainActivity.java:Несколько пользовательских клавиатур для нескольких EditTexts
CustomKeyboard mHexKeyboard;
CustomKeyboard mOctKeybaord;
CustomKeyboard mDuoKeybaord;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHexKeyboard= new CustomKeyboard(this, R.id.hexkeyboardview, R.xml.hexkbd);
mOctKeyboard= new CustomKeyboard(this, R.id.octkeyboardview, R.xml.octkbd);
mHexKeyboard= new CustomKeyboard(this, R.id.duokeyboardview, R.xml.duokbd);
mHexKeyboard.registerEditText(R.id.edittext0);
mOctKeyboard.registerEditText(R.id.edittext3);
mKeyboard.registerEditText(R.id.edittext4);
}
Ошибка я получаю:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.username.hexoctduo/com.example.username.hexoctduo.MainActivity}: android.view.InflateException: Binary XML file line #49: Error inflating class android.inputmethodservice.OctKeyboardView
Оказывается, моя проблема в том, что я изо всех сил, чтобы понять, как работает макет XML. Ниже моя попытка, и из прокомментированного кода вы можете видеть, что еще я пытался сделать.
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText android:id="@+id/hex_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<EditText android:id="@+id/oct_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<EditText android:id="@+id/duo_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!--
<android.inputmethodservice.KeyboardView
android:id="@+id/keyboardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone" />
-->
<android.inputmethodservice.HexKeyboardView
android:id="@+id/hexkeyboardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone" />
<android.inputmethodservice.OctKeyboardView
android:id="@+id/octkeyboardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone" />
<android.inputmethodservice.DuoKeyboardView
android:id="@+id/duokeyboardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone" />
Спасибо за обратную связь!
Ошибка в вашем формате XML, строка 49, а не в коде. Он не может найти класс OctKeyboardView –
Вы правы, я не думаю, что полностью понимаю, как работает тег android.inputmethodservice, но я добавил XML-макет на мой пост. – meco
'OctKeyboardView' не является классом в android.inputmethodservice. Это особый класс, который вы создали? В этом случае поставьте его в свое пространство имен. Или просто используйте EditText? –