2013-10-25 3 views
0

У меня есть TextView, содержащийся в HorizontalScrollView, и я хочу, чтобы текст по центру, когда не прокручивать, но когда он достаточно велик, чтобы быть прокручивать мне нужно изменить серьезность TextView быть Gravity.LEFT, иначе HorizontalScrollView покажет текст неправильный, так как в нем будет отрезана большая часть текста, и в конце будет пустое пространство, если текст останется центрированным. Вот мой текущий код справиться с этим:Правильно обновлять гравитацию TextView программно?

//make horizontal scroll text center and work 
final HorizontalScrollView toTextScrollView = (HorizontalScrollView)parentView.findViewById(R.id.horizScroll); 

toTextScrollView.addOnLayoutChangeListener(new OnLayoutChangeListener(){ 

    @Override 
    public void onLayoutChange(View v, int left, int top, 
         int right, int bottom, int oldLeft, int oldTop, 
         int oldRight, int oldBottom) { 
     //if scrollable, change toNumber layout_gravity to left, else keep it at center 
     FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
         LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

     if(canScroll(toTextScrollView)) 
      params.gravity=Gravity.LEFT; 
     else 
      params.gravity=Gravity.CENTER; 


     Toast.makeText(getActivity(), "Can scroll: " + canScroll(toTextScrollView), Toast.LENGTH_LONG).show(); 
     toNumber.setLayoutParams(params); 
    } 

}); 

Моя функция canScroll() работает должным образом, как он обновляет в Toast правильно, так что это не проблема. Проблема в том, что я чувствую, что TextView нуждается в «обновлении» после установки макета. Это связано с тем, что, когда первое число добавляется к TextView, что делает его прокручиваемым, Toast возвращает его теперь прокручиваемым, но Gravity остается центрированным, и поэтому первая часть числа вырезается при прокрутке влево, например:

enter image description here

Однако всякий раз, когда добавляется следующий номер, он обновляет надлежащим образом, сила тяжести устанавливается в Gravity.LEFT, и поэтому ни один из текста не обрезается в окне прокрутки. Как правильно обновить гравитацию TextView, чтобы это произошло мгновенно?

ответ

0

Попробуйте позвонить view.invalidate после того, как вы изменили гравитацию текста.

+0

Я пробовал как toNumber.invalidate(), так и toTextScrollView.invalidate(), ни один из них не работал. – AggieDev

+0

@AggieDev Хорошо. Мне жаль, что мой ответ не помог – superuser

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