2016-03-07 3 views
1

В настоящее время я разрабатываю свою деятельность, когда вы нажимаете кнопку «Назад», вместо того, чтобы сползать вниз по клавиатуре, она выйдет из действия (обычное поведение кнопки «Назад»). Это хорошо.Change System Back Button Orientation

Теперь проблема я есть, кнопка System Back (на Nexus устройства), когда клавиатура показан направлен вниз вместо точки слева (восходящем активность) enter image description here

Показать пример точки левой клавиатуры ,

enter image description here

Есть ли способ программно контролировать и гарантировать, что не указывает вниз, когда клавиатура вверх?

+0

Это поведение по умолчанию. –

ответ

1

Это на самом деле не очень хорошо. Нормальное поведение кнопки «Назад» на Android, когда клавиатура вверх, - это скрыть клавиатуру. Если я нажму кнопку «Назад» с клавиатурой, чтобы скрыть ее и потерять то, что я делаю, я буду очень злиться и подумать о вашем приложении. На самом деле мое предположение не было бы «они перевернули кнопку« назад », это было бы« неудачное приложение ».

Невозможно программно изменить направление этой кнопки. Стрелка вниз означает, что удар по ней скроет клавиатуру. Если клавиатура не скрыта, потому что ваше приложение нарушает обычные правила, тогда стрелка вниз правильная - следующий удар задней кнопки закроет клавиатуру.

+0

Спасибо. Причина, по которой мы делаем это, должна быть всегда с Keyboard. Следовательно, мы не будем скрывать клавиатуру. Всякий раз, когда клавиатура скрыта, активность бесполезна. Поэтому мы выбираем кнопку «назад» для выхода из этой операции. – Elye

0

Действительно, вы можете переопределить кнопку «Назад» в Android. Это может быть достигнуто путем переопределения функции OnKeyDown следующим образом:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // Hide keyboard and activate previous activity 
     return false; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

(Хотя я признаю, я никогда не испытывал это, чтобы увидеть, если он будет работать в то время как клавиатура открыта ...)

ад, если это не работает, вы можете даже пойти о делать что-то немного «Hacky», как это:

boolean opened = true; 

public void setListenerToRootView(){ 
    final View activityRootView = getWindow().getDecorView().findViewById(android.R.id.content); 
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); 
      if (heightDiff > 100) 
       opened = true; 
      else if(opened == true) 
       opened = false; 
     } 
    }); 
} 

Такой подход, очевидно, может привести к ошибкам, если они имеют плавающую клавиатуру или что-то конкретное, но вы можете обрабатывайте его по мере необходимости.

Примечание: Ничего из этого не означает, что стрелка указывает вниз. Я не думаю, что вы действительно можете изменить это, хотя вы можете хотя бы изменить его поведение, перейдя к предыдущему действию всякий раз, когда клавиатура была удалена.

+0

Извините, что не ясны. Мне удалось вернуть клавиатуру. Единственная оставшаяся вещь - кнопка назад системы, все еще указывающая вниз. Мой вопрос выше, чтобы посмотреть, можно ли это изменить вместо этого. – Elye