0

Я разрабатываю пользовательскую клавиатуру для Android. Я хочу иметь свой собственный ярлык для клавиши ENTER для некоторых полей в моем приложении. Я использовал образец проекта SoftKeyboard для разработки моей клавиатуры. То, что я пытался до сих пор: 1 В одном из моей деятельности у меня есть EditText со следующими атрибутами:Невозможно изменить Enter Key label для пользовательской клавиатуры в Android

<EditText 
    android:id="@+id/password" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    android:imeActionId="@+id/action_sign_in" 
    android:imeActionLabel="@string/sign_in" 

    android:inputType="textPassword" /> 

Если я использую Native Android клавиатуры она показывает «Sign In» на мой введите ключ, но если я использовать мои пользовательские клавиатуры он показывает значение по умолчанию, введите ключ в следующем заявлении:

в LatinKeyboard.java

void setImeOptions(Resources res, int options) 
    { 
     if (mEnterKey == null) 
     { 
      return; 
     } 

     switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) 
     { 
      case EditorInfo.IME_ACTION_GO: 
       mEnterKey.iconPreview = null; 
       mEnterKey.icon = null; 
       mEnterKey.label = res.getText(R.string.label_send_key); 
       break; 
      case EditorInfo.IME_ACTION_NEXT: 
       mEnterKey.iconPreview = null; 
       mEnterKey.icon = null; 
       mEnterKey.label = res.getText(R.string.label_next_key); 
       break; 
      case EditorInfo.IME_ACTION_SEARCH: 
       mEnterKey.icon = res.getDrawable(R.drawable.sym_keyboard_search); 
       mEnterKey.label = null; 
       break; 
      case EditorInfo.IME_ACTION_SEND: 
       mEnterKey.iconPreview = null; 
       mEnterKey.icon = null; 
       mEnterKey.label = res.getText(R.string.label_send_key); 
       break; 
      case R.id.action_sign_in: 
       mEnterKey.iconPreview = null; 
       mEnterKey.icon = null; 
       mEnterKey.label = res.getText(R.string.sign_in); 
       break; 
      default: 
       mEnterKey.label = res.getText(R.string.label_send_key); 
       mEnterKey.icon = null; 
       break; 
     } 

    } 
} 

Я был бы признателен, если кто-то может помочь мне решить эту проблему.

ответ

2

Наконец-то я нашел решение. Вместо передачи опций int нам нужно передать атрибут EditorInfo. Проходим его, как пыльник

@Override 
    public void onStartInput(EditorInfo attribute, boolean restarting) 
    { 
     super.onStartInput(attribute, restarting); 
     ... 
     yourSoftKeyboard.setImeOptions(getResources(), attribute); 
} 

Тогда мы реализуем setImeOptions как ниже:

void setImeOptions(Resources res, EditorInfo ei) 
    { 
     if (enterKey == null) 
     { 
      return; 
     } 

     switch (ei.imeOptions & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) 
     { 
      case EditorInfo.IME_ACTION_SEND: 
       enterKey.iconPreview = null; 
       enterKey.icon = null; 
       enterKey.label ="Send"; 
       break; 
      case EditorInfo.IME_ACTION_GO: 
       enterKey.iconPreview = null; 
       enterKey.icon = null; 
       enterKey.label ="Go"; 
       break; 
      case EditorInfo.IME_ACTION_NEXT: 
       enterKey.iconPreview = null; 
       enterKey.icon = null; 
       enterKey.label = "Next"; 
       break; 
      case EditorInfo.IME_ACTION_SEARCH: 
       enterKey.icon = res.getDrawable(R.drawable.sym_keyboard_search); 
       enterKey.label = null; 
       break; 
      default: 
       enterKey.iconPreview = null; 
       enterKey.label = "Enter"; 
       enterKey.icon = null; 
       break; 
     } 

     if (ei.actionLabel != null) 
     { 
      enterKey.iconPreview = null; 
      enterKey.icon = null; 
      enterKey.label = ei.actionLabel; 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^