У меня есть 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 остается центрированным, и поэтому первая часть числа вырезается при прокрутке влево, например:
Однако всякий раз, когда добавляется следующий номер, он обновляет надлежащим образом, сила тяжести устанавливается в Gravity.LEFT, и поэтому ни один из текста не обрезается в окне прокрутки. Как правильно обновить гравитацию TextView, чтобы это произошло мгновенно?
Я пробовал как toNumber.invalidate(), так и toTextScrollView.invalidate(), ни один из них не работал. – AggieDev
@AggieDev Хорошо. Мне жаль, что мой ответ не помог – superuser