2016-02-21 3 views
1

Я пытаюсь создать калькулятор. Я работаю в последней Android-студии. Как и в калькуляторах, все новые токи (числа, операторы) должны быть показаны справа, и если поле больше, чем на дисплее, оно должно прокручиваться до последнего токена. Я уже просматривал и нашел способ сделать то же самое.
Код то же:Горизонтальная прокрутка Просмотр неожиданно

private void scrollRight() { 
    horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView); 
    ViewTreeObserver viewTreeObserver = horizontalScrollView.getViewTreeObserver(); 
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      horizontalScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      horizontalScrollView.scrollTo(entry.getWidth(), 0); 
     } 
    }); 
} 

scrollRight вызывается событие OnClick, который проверяет, если маркер будет введен, и называет это.

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

GIF, чтобы показать проблему:
http://i.stack.imgur.com/gukRy.gif

Пожалуйста, помогите!

ответ

2

Попробуйте

horizontalScrollView.post(new Runnable() { 
      @Override 
      public void run() { 
       horizontalScrollView.fullScroll(View.FOCUS_RIGHT); 
      } 
     }); 

И позвони findViewById только один раз в OnCreate.

+0

Это выглядит лучше, чем метод ViewTreeObserver, и я собираюсь реализовать это. Теперь для каждого токена полоса прокрутки перемещается слева направо и для следующего токена, она перемещается справа налево. Снова это инициируется только при попытке прокрутки вручную. Кроме того, я использовал 'findViewById' только один раз в 'onCreate'. Это было задним числом с моей стороны! –

+0

попробуйте обновленный ответ, пожалуйста) –

+0

Да! Метод fullscroll работает. Не знаю, почему метод scrollTo не работает. Во всяком случае, спасибо за быстрый ответ. –

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