2015-01-20 2 views
0

У меня есть EditText, и появляется ли мягкая клавиатура, когда пользователь нажимает на нее, кажется, меняется, и я не понимаю, почему.Проблема с мягкой клавиатурой не появляется, когда EditText получает фокус

Первоначально мой макет был таким, как показано ниже, и клавиатура выглядела так, как ожидалось. Пользователь будет щелкать по EditText, содержимое будет выделено, клавиатура будет отображаться, и также будет запущен какой-то пользовательский код. Однако, поскольку я пытаюсь изменить макет и, в частности, меняя LinearLayout с горизонтальной на вертикальную ориентацию, это перестало работать. Теперь, когда пользователь нажимает на EditText, содержимое по-прежнему подсвечивается, но клавиатура не отображается.

Вот XML, в котором работает код. Простое изменение ориентации на «вертикаль» и изменение высоты/ширины и удаление веса достаточно, чтобы остановить отображение клавиатуры. Я изначально добавил focusable/focusableintouchmode к родительскому RelativeLayout, потому что у меня возникла проблема с EditText, которая сразу же начала фокусироваться при запуске Activity, и это решило проблему.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ocrmain_group_select_parent" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:focusable="true" android:focusableInTouchMode="true" > 

<LinearLayout android:id="@+id/ocrmain_group_select_costholder" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" > 

    <ImageView android:id="@+id/ocrmain_group_select_item" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="15" 
     android:layout_gravity="left" /> 

    <EditText android:id="@+id/ocrmain_group_select_cost" 
     android:focusable="true" android:focusableInTouchMode="true" 
     android:layout_weight="5" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:selectAllOnFocus="true" 
     android:imeOptions="actionDone" 
     android:inputType="numberDecimal" /> 

</LinearLayout> 

По существу я пытаюсь изменить его к этому:

<LinearLayout android:id="@+id/ocrmain_group_select_costholder" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" > 

    <ImageView android:id="@+id/ocrmain_group_select_item" 
     android:layout_margin="5dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <EditText android:id="@+id/ocrmain_group_select_cost" 
     android:layout_gravity="end" 
     android:layout_marginTop="5dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="true" android:focusableInTouchMode="true" 
     android:selectAllOnFocus="true" 
     android:imeOptions="actionDone" 
     android:inputType="numberDecimal" /> 

</LinearLayout> 

Вот некоторые из пользовательского кода у меня есть, когда пользователь нажимает на нее.

private class myCostBoxChangedListener implements EditText.OnEditorActionListener { 

    @SuppressLint("NewApi") 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

     //ScrollView sView = (ScrollView) ((RelativeLayout)v.getParent().getParent()).getChildAt(1); 
     //TableLayout tView = (TableLayout) sView.getChildAt(0); 

     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      v.clearFocus(); 
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
      calculateCheckedDialogCosts(); 
     } 
     return false; 
    } 
} 

Я также имею onFocusListener реализован, но он работает код, чья единственная роль для разбора и потенциально изменять содержимое EditText при нажатии на кнопку «Готово».

Вся помощь оценивается!

ответ

1

Я решил свою собственную проблему: я вставил следующий код в мой onFocusChangeList:

private class myCostBoxFocusListener implements View.OnFocusChangeListener { 
    public void onFocusChange(View v, boolean hasFocus) { 

     if (hasFocus) { 
      InputMethodManager imm = (InputMethodManager) getSystemService(android.content.Context.INPUT_METHOD_SERVICE); 
      imm.showSoftInput(v, InputMethodManager.SHOW_FORCED); 

Теперь, когда EditText щелкнули, он одновременно подсвечена и клавиатура подходит для немедленного редактирования. Милая.