Android, сделать прокручиваемое представление переполнением слева, а не справа?
Мне рекомендовали использовать родительское представление, чтобы получить горизонтальную прокрутку прямо в моем TextView:
<HorizontalScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollHorizontally="true"
android:gravity="center|right"
android:text="123456789"/>
</HorizontalScrollView>
Горизонтальная прокрутка работает отлично, но делает переполнение содержимого справа, когда оно становится длиннее его родительской ширины:
-------
|123456|7
-------
Однако я работаю над текстовым представлением, содержащим числа, и поскольку числа обычно выравниваются вправо, мне нужно, чтобы textview переходил на противоположную сторону. (вам нужно прокрутить влево, чтобы увидеть начало строки).
------
1|4567|
------
Я попробовал несколько комбинаций силы тяжести = "право" и ширины, но я не могу этого сделать. Как я могу выровнять текст вправо и сделать его переполнением влево?
EDIT:
Я пытался сделать это, когда пользователь набирает:
calc.setText( newNumber );
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv);
hsv.scrollTo(hsv.getRight(), hsv.getTop());
Это число прокручивается вправо каждый раз, когда пользователь вводит число, однако последнее число всегда остается вне экрана (он как бы прокручивается, а THEN добавляет номер).
Ответы
Ответ 1
Я проверил код. Итак, есть два способа обойти эту проблему
Первый с ScrollBars
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv1);
hsv.scrollTo(hsv.getRight(), hsv.getTop());
}
},100L);
Второй - без scrollBars
<TextView
android:ellipsize="start" //add this line
...
/>
Ответ 2
Вдохновленный этим
Вы можете создать собственный класс, полученный из HorizontalScrollView
public class RightAlignedHorizontalScrollView extends HorizontalScrollView {
public RightAlignedHorizontalScrollView(Context context) {
super(context);
}
public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
scrollTo(getChildAt(0).getMeasuredWidth(), 0);
}
}
Я опубликовал полный простой проект там
Ответ 3
<HorizontalScrollView
android:id="@+id/hsv1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scrollHorizontally="true"
android:gravity="center|right"
android:text="123456789"/>
</HorizontalScrollView>
Добавлен id в HorizontalScrollView
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv1);
hsv.scrollTo(hsv.getRight(), hsv.getTop());
Это непроверено, поскольку я сделал это на лету. Расскажите мне, как это происходит.
Ответ 4
Я думаю, вы должны использовать свойство android:fillViewport="true"
для прокрутки-просмотра
Проверить это и This
Пройдите через учебное пособие
<ScrollView
android:fillViewport="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/scrollView"/>
Сомнение: где ваш макет контейнера для просмотра прокрутки?
Ответ 5
Пробовал ли вы назначить параметр эллипсиса вашему текстуру?
android:singleLine="true"
android:ellipsize="start"
Я надеюсь, что это решит вашу проблему.
Для установки силы тяжести текста, когда он не переполнен, попробуйте установить
android:gravity="center_vertical|right"
Ответ 6
попробуйте это, это будет работать правильно и не даст вам никаких задержек при переходе между потоками
hor = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
hor.postDelayed(new Runnable() {
public void run() {
hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
}, 1L);
Ответ 7
Я довольно поздно в этом, но здесь простой и легкий подход с использованием поворота взглядов.
horizontal_layout_id.setRotationY(180f)
Приведенный выше код инвертирует всю горизонтальную разметку по горизонтали, поэтому текст начинается справа, а не слева. ОДНАКО, это также инвертирует текст внутри textview
, что явно нехорошо.
textview_inside_horizontal_layout_id.setRotationY(180f)
Итак, мы снова инвертируем само текстовое представление, это снова зеркально отражает зеркальный текст! Таким образом, у вас будет что-то вроде this-
![enter image description here]()
Это приведет к переполнению текста вправо, а не влево!