2014-12-27 5 views
1

Я слежу за отличным руководством 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" /> 

Спасибо за обратную связь!

+0

Ошибка в вашем формате XML, строка 49, а не в коде. Он не может найти класс OctKeyboardView –

+0

Вы правы, я не думаю, что полностью понимаю, как работает тег android.inputmethodservice, но я добавил XML-макет на мой пост. – meco

+0

'OctKeyboardView' не является классом в android.inputmethodservice. Это особый класс, который вы создали? В этом случае поставьте его в свое пространство имен. Или просто используйте EditText? –

ответ

0

Использовать класс как KeyboardView сам по себе не использует три разные структуры до тех пор, пока не будет определено три класса для одного и того же. Как и в случае, если вы использовали HexKeyboardView, OctKeyboardView и DuoKeyboardView как типы услуг, вам нужно будет определить три класса для каждого из них. Вместо этого, поскольку вы вызываете один и тот же конструктор для определения CustomKeyboards, как в примере в Maarten Penning. Просто разместите следующую структуру в качестве замены вашего xml. Я думаю, что это должно сделать трюк.

 <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/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.KeyboardView 
      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.KeyboardView 
      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" /> 
</LinearLayout> 
Смежные вопросы