Подтвердить что ты не робот

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 добавляет номер).

4b9b3361

Ответ 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

Это приведет к переполнению текста вправо, а не влево!