Текст маркировки на Android

Как я могу использовать текст marquee в приложении Android?

Ответ 1

Вот пример:

public class TextViewMarquee extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) this.findViewById(R.id.mywidget);  
        tv.setSelected(true);  // Set focus to the textview
    }
}

Файл xml с текстом:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/mywidget"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:maxLines="1"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:textColor="#ff4500"
        android:text="Simple application that shows how to use marquee, with a long text" />
</RelativeLayout>

Ответ 2

TextView textView = (TextView) this.findViewById(R.id.textview_marquee);  
textView.setEllipsize(TruncateAt.MARQUEE);
textView.setText("General Information... general information... General Information");
textView.setSelected(true);
textView.setSingleLine(true);

Ответ 3

android:ellipsize="marquee"

Это работает, только когда ваш TextView имеет фокус.

Ответ 4

Чтобы это сработало, мне пришлось использовать ВСЕ три вещи (эллипсис, выбранный и одиночный), упомянутые уже:

TextView tv = (TextView)findViewById(R.id.someTextView);
tv.setSelected(true);
tv.setEllipsize(TruncateAt.MARQUEE);
tv.setSingleLine(true):

Ответ 5

Xml code

 <TextView
            android:id="@+id/txtTicker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:freezesText="true"
            android:gravity="center_horizontal"
            android:marqueeRepeatLimit="marquee_forever"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:scrollHorizontally="true"
            android:shadowColor="#FF0000"
            android:shadowDx="1.5"
            android:shadowDy="1.3"
            android:shadowRadius="1.6"
            android:singleLine="true"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:textStyle="bold" >
        </TextView>

Java

txtEventName.setSelected(true);

если текст невелик, добавьте пробел до и после текста

txtEventName.setText("\t \t \t \t \t \t"+eventName+"\t \t \t \t \t \t");

Ответ 6

Просто поместите эти параметры в свой TextView - он работает: D

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"

И вам также нужно setSelected(true):

my_TextView.setSelected(true);

Привет, Кристофер

Ответ 7

Я обнаружил проблему с выделенной областью, что ее нельзя использовать для коротких строк (поскольку ее функция состоит только в том, чтобы показывать длинные строки).

Я предлагаю использовать Webview. Если вы хотите перемещать короткие строки по горизонтали. Main_Activity.java Код: `

        WebView webView;

        webView = (WebView)findViewById(R.id.web);


        String summary = "<html><FONT color='#fdb728' FACE='courier'><marquee behavior='scroll' direction='left' scrollamount=10>"
                + "Hello Droid" + "</marquee></FONT></html>";

        webView.loadData(summary, "text/html", "utf-8"); // Set focus to the textview
`

main_activity.xml код:

<WebView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/web"
        ></WebView>

Ответ 8

Как и параметры XML, идентифицированные droidgren, мои тесты показали, что если текст, который вы хотите отобразить, короче, чем ширина текстового поля, тогда область выделения не будет прокручиваться вообще. Возможные решения - установить ширину представления на размер, меньший, чем длина текста, или связать строку с самим собой 2 или 3 раза, с подходящим промежутком между пробелами, чтобы прокрутка выглядела нормально.

Ответ 9

Добавить код ниже в XML

    <TextView
    android:text="Shops NearBy textdf fsdgsdgsdg dsgtsgsdgsdgsg"
    android:id="@+id/txtEventName"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit ="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:scrollHorizontally="true"
    android:singleLine="true"/>

В Java добавьте следующий код:

    TextView txtEventName=(TextView)findViewById(R.id.txtEventName);
    txtEventName.setSelected(true);

Ответ 10

В XML файле вам нужно добавить следующие дополнительные атрибуты в TextView, чтобы получить функцию, похожую на выделение:

android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"

В файле MainActivity.java вы можете получить ссылку на этот TextView, используя findViewById(), и вы можете установить следующее свойство для этого TextView, чтобы он выглядел как текст выделенного текста:

setSelected(true);

Это все, что вам нужно.

Ответ 11

Я пробовал все вышеперечисленное, но для меня это не сработало. Когда я добавляю

android:clickable="true"

тогда он отлично работал у меня. Я не знаю почему. Но я рад его проработать.

Вот мой полный ответ.

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"

android:clickable="true"

Ответ 12

Используйте это, чтобы установить Marque:

    final TextView tx = (TextView) findViewById(R.id.textView1);
    tx.setEllipsize(TruncateAt.MARQUEE);
    tx.setSelected(true);
    tx.setSingleLine(true);
    tx.setText("Marquee needs only three things to make it run and these three things are mentioned above.");

Вам не нужно использовать " android: marqueeRepeatLimit =" marquee_forever "в xml файле. Marquee будет работать даже без этого.

Ответ 13

Это будет эквивалентно "концу":

where = TruncateAt.END

Ответ 14

Вы можете использовать TextView или свой собственный TextView. Последнее - когда текстовое изображение не может постоянно фокусироваться.

Во-первых, вы можете использовать TextView или пользовательский TextView в качестве прокручиваемого текстового вида в вашем файле .xml макета, например:

<com.example.myapplication.CustomTextView
            android:id="@+id/tvScrollingMessage"
            android:text="@string/scrolling_message_main_wish_list"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit ="marquee_forever"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:scrollHorizontally="true"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/black"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="15dp"
            android:freezesText="true"/>

ПРИМЕЧАНИЕ: в приведенном выше фрагменте кода com.example.myapplication является примером имени пакета и его следует заменить на собственное имя пакета.

Затем в случае использования CustomTextView вы должны определить класс CustomTextView:

public class CustomTextView extends TextView {
        public CustomTextView(Context context) {
            super(context);
        }
        public CustomTextView(Context context, AttributeSet attrs) {
            super(context, attrs);

        }

        public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);

        }


        @Override
        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
            if(focused)
                super.onFocusChanged(focused, direction, previouslyFocusedRect);
        }

        @Override
        public void onWindowFocusChanged(boolean focused) {
            if(focused)
                super.onWindowFocusChanged(focused);
        }


        @Override
        public boolean isFocused() {
            return true;
        }
    }

Надеюсь, это будет полезно для вас. Ура!

Ответ 15

С ответом выше, вы не можете установить скорость или иметь гибкость для настройки функциональности представления текста. Чтобы иметь собственную скорость прокрутки и гибкость для настройки свойств выделения, используйте следующее:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:fadingEdge="horizontal"
    android:lines="1"
    android:id="@+id/myTextView"
    android:padding="4dp"
    android:scrollHorizontally="true"
    android:singleLine="true"
    android:text="Simple application that shows how to use marquee, with a long text" />

В вашей деятельности:

private void setTranslation() {
        TranslateAnimation tanim = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, -1.0f * screenWidth,
                TranslateAnimation.ABSOLUTE, 0.0f,
                TranslateAnimation.ABSOLUTE, 0.0f);
        tanim.setDuration(1000);//set the duration
        tanim.setInterpolator(new LinearInterpolator());
        tanim.setRepeatCount(Animation.INFINITE);
        tanim.setRepeatMode(Animation.ABSOLUTE);

        textView.startAnimation(tanim);
    } 

Ответ 16

Это мой xml customTextView Object, здесь вы можете просто использовать TextView для замены на тег.

 <com.wedoapps.crickethisabkitab.utils.view.montserrat.CustomTextView
                android:id="@+id/lblRateUsPlayStore"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/_10sdp"
                android:layout_marginBottom="@dimen/_10sdp"
                android:layout_marginStart="@dimen/_5sdp"
                android:layout_marginEnd="@dimen/_5sdp"
                android:text="@string/please_rate_us_5_star_on_play_store"
                android:textAllCaps="false"
                android:textColor="@color/green"
                android:textSize="@dimen/_25ssp"
                android:textStyle="bold"
                android:visibility="visible"
                android:linksClickable="true"
                android:autoLink="web|phone"/>

А вот и код моего файла Java. Я установил свой HTML-текст на сервере, просто замените ваш текст на объекте textview. Я поставил этот код в виде выделенного тега с кликабельными ссылками, если какие-либо ссылки на это текстовое представление открывают для мобильного или веб-браузера.

CustomTextView lblRateUsPlayStore = findViewById(R.id.lblRateUsPlayStore);
lblRateUsPlayStore.setMovementMethod(LinkMovementMethod.getInstance());
                        lblRateUsPlayStore.setText( Html.fromHtml(documentSnapshot.getString("DisplayText")));
                        TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(lblRateUsPlayStore, 12, 20, 2, 1);

                        lblRateUsPlayStore.setEllipsize(TextUtils.TruncateAt.MARQUEE);

                        // Set marquee repeat limit (unlimited)
                        lblRateUsPlayStore.setMarqueeRepeatLimit(-1);
                        lblRateUsPlayStore.setHorizontallyScrolling(true);
                        lblRateUsPlayStore.setSelected(true);
                        lblRateUsPlayStore.setLinksClickable(true);
                        lblRateUsPlayStore.setFocusableInTouchMode(true);
                        lblRateUsPlayStore.setFocusable(true);

Ответ 17

Во многих ответах правильно указано, что требуется вызов textView.setSelected(true). Однако, если вы предпочитаете делать это только через XML, одним из вариантов может быть использование Binding Adapters при работе с Binding Data.

Итак, просто создайте новый адаптер, похожий на:

@BindingAdapter("app:autoStartMarquee")
fun setAutoStartMarquee(textView: TextView, autoStartMarquee: Boolean) {
    textView.isSelected = autoStartMarquee
}

Затем вы можете просто использовать его в XML следующим образом:

...
<TextView
    ...
    android:ellipsize="marquee"
    android:singleLine="true"
    app:autoStartMarquee="@{true}"/>
...

Больше не нужно вызывать его из кода.

Ответ 18

Вы можете использовать

android:ellipsize="marquee"

с вашим просмотром текста.

Но не забудьте сосредоточиться на желаемом текстовом просмотре.