TextView Marquee не работает
Я попытался использовать шатер и его не работает
вот мой код, пожалуйста, дайте мне знать, где я ошибаюсь
<TextView
android:text="lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00"
android:id="@+id/TextView02"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
android:singleLine="true"
android:focusable="true"
android:inputType="text"
android:maxLines="1">
</TextView>
Я использую android SDK 2.0.1
Ответы
Ответ 1
работает сейчас:)
Приведенный ниже код
<TextView
android:text="START | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | lunch 20.00 | Dinner 60.00 | Travel 60.00 | Doctor 5000.00 | END"
android:id="@+id/MarqueeText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true">
Изменить (от имени Адиля Хуссейна):
textView.setSelected(true)
необходимо установить код, чтобы это работало.
Ответ 2
android:singleLine="true"
android:ellipsize="marquee"
являются единственными требуемыми атрибутами, а прокрутка работает даже с layout_weight
, определенной с помощью layout_width=0dp
вот пример кода:
<TextView
android:id="@+id/scroller"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFF"
android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
android:layout_marginLeft="4dp"
android:layout_weight="3"
android:layout_width="0dp"
android:layout_height="wrap_content"
/>
Но самое главное - неявно или явно TextView
следует выбрать.
Вы можете сделать это с помощью
TextView txtView=(TextView) findViewById(R.id.scroller);
txtView.setSelected(true);
Ответ 3
Эти атрибуты должны быть включены в тег textview
, чтобы разрешить прокрутку.
Все остальное необязательно.
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"
Ответ 4
Я столкнулся с той же проблемой, и это обсуждение помогло мне просто заменить эту строку
android:maxLines="1"
с этой строкой в xml
android:singleLine="true"
и он работает
строка txtView.setSelected(true);
также был в моей деятельности.
Ответ 5
Очень простой рабочий код:
Для бесконечно прокручиваемого текста
<TextView
android:id="@+id/textView_News_HeadLine"
style="@style/black_extra_large_heading_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="8dp"
android:ellipsize="marquee"
android:marqueeRepeatLimit="-1"
android:singleLine="true"
android:text="HeadLine: Banglawash To be Continued" />
& вы должны написать из своей деятельности
textView.setSelected(true);
Ответ 6
Рабочий код:
<TextView
android:id="@+id/scroller"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="Some veryyyyy long text with all the characters that cannot fit in screen, it so sad :( that I will not scroll"
android:textAppearance="?android:attr/textAppearanceLarge" />
Ответ 7
Я работаю с minSDK = 14, и мне было любопытно, какой набор этих вариантов будет работать. Я закончил с:
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
в дополнение к другим материалам форматирования. Мне не нужно было прокручиватьHoriontally, focusable или focusableInTouchMode.
Для этого набора потребовался вызов
setSelected(true)
Интересным является то, что singleLine предположительно устарел, с рекомендацией заменить его maxLines = 1. За исключением - когда я это делаю, это изменение останавливает текст от прокрутки. Можно было бы надеяться, что когда SingleLine в конечном итоге укусит пыль, все ее текущее поведение будет вызвано maxLines...
Ответ 8
Просто добавьте те, что указаны выше:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
И!! вы должны использовать TextView.setSelected(true) внутри вашего java-кода.
Причина того, что marquee не работает с некоторыми из парней в этой статье. Если у вас есть форма ввода с помощью EditText (который является вводом), The EditText будет тем, у кого есть фокус и выбор по умолчанию в форме. Теперь, если вы вынудите его через TextView.setSelected(true), TextView в конечном итоге сделает шатер независимо от того, что.
Итак, вся идея состоит в том, чтобы сделать виджет TextView сфокусированным и выбранным, чтобы сделать работу выделения.
Ответ 9
Я столкнулся с той же проблемой. Ответ Амита GC (первый ответ проверен как принятый) прав, но иногда textview.setSelected(true); не работает, когда текстовое представление не может получить фокус все время. Итак, чтобы обеспечить работу TextView Marquee, мне пришлось использовать пользовательский TextView.
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;
}
}
И затем вы можете использовать пользовательский 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 является примером имени пакета и его следует заменить на собственное имя пакета.
Надеюсь, это поможет вам. Ура!
Ответ 10
Я пережил эту ситуацию, когда область текста не работала. Однако следуйте этому, и я уверен, что он сработает.:)
<TextView
android:id="@+id/tv_marquee"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:freezesText="true"
android:maxLines="1"
android:scrollHorizontally="true"
android:text="This is a sample code of marquee and it works"/>
и программно добавить эти 2 строки...
tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);
tvMarquee.setSelected(true) требуется, если какой-либо из просмотров уже сфокусирован и setSelected заставит его работать.
Не нужно использовать.
android:singleLine="true"
он устарел и над кодами работает.
Ответ 11
package com.app.relativejavawindow;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.text.TextUtils.TruncateAt;
import android.view.Menu;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final RelativeLayout relativeLayout = new RelativeLayout(this);
final RelativeLayout relativeLayoutbotombar = new RelativeLayout(this);
textView = new TextView(this);
textView.setId(1);
RelativeLayout.LayoutParams relativlayparamter = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
RelativeLayout.LayoutParams relativlaybottombar = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
relativeLayoutbotombar.setLayoutParams(relativlaybottombar);
textView.setText("Simple application that shows how to use marquee, with a long ");
textView.setEllipsize(TruncateAt.MARQUEE);
textView.setSelected(true);
textView.setSingleLine(true);
relativeLayout.addView(relativeLayoutbotombar);
relativeLayoutbotombar.addView(textView);
//relativeLayoutbotombar.setBackgroundColor(Color.BLACK);
setContentView(relativeLayout, relativlayparamter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
этот код работает правильно, но если размер экрана ur не заполняет этот текст, он не будет перемещаться, пытаясь отобразить пробел в конце текста
Ответ 12
Используйте следующую строку в коде:
TextView.setSelected(true);
Ответ 13
Вы должны добавить эти атрибуты, которые являются обязательными для выделения.
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
Ответ 14
Да, marquee_forever также работают в случае фиксированной ширины для TextView. (например, android: layout_width = "120dp" )
Обязательные атрибуты:
- android: focusable = "true"
- Android: focusableInTouchMode = "истинный"
- android: singleLine = "true" // если текст отсутствует в нескольких строках.
Рабочий код:
<TextView
android:id="@+id/mediaTitleTV"
android:layout_width="220dp"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="Try Marquee, it works with fixed size textview smoothly!" />
Ответ 15
Просто поместите эти параметры в свой TextView. Он работает:)
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
`
Ответ 16
<TextView
android:ellipsize="marquee"
android:singleLine="true"
.../>
должен вызывать код
textView.setSelected(true);
Ответ 17
Я создал собственный класс AlwaysMarqueTextView
public class AlwaysMarqueeTextView extends TextView
{
protected boolean a;
public AlwaysMarqueeTextView(Context context)
{
super(context);
a = false;
}
public AlwaysMarqueeTextView(Context context, AttributeSet attributeset)
{
super(context, attributeset);
a = false;
}
public AlwaysMarqueeTextView(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
a = false;
}
public boolean isFocused()
{
return a || super.isFocused();
}
public void setAlwaysMarquee(boolean flag)
{
setSelected(flag);
setSingleLine(flag);
if(flag)
setEllipsize(TruncateAt.MARQUEE);
a = flag;
}
@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);
}
}
И вы можете начатьMarquee, когда желание.. как
//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true);
Ответ 18
Чтобы иметь собственную скорость прокрутки и гибкость для настройки свойств выделения, используйте следующее:
<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);
tanim.setInterpolator(new LinearInterpolator());
tanim.setRepeatCount(Animation.INFINITE);
tanim.setRepeatMode(Animation.ABSOLUTE);
textView.startAnimation(tanim);
}
Ответ 19
android: focusable = "true" и android: focusableInTouchMode = "true" необходимы...
Потому что я тестировал всех остальных без этих строк, и результат не был выделен. Когда я добавляю их, он начинает выделяться.
Ответ 20
![введите описание изображения здесь]()
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils.TruncateAt;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView) this.findViewById(R.id.textview);
textview.setSelected(true);
textview.setEllipsize(TruncateAt.MARQUEE);
textview.setSingleLine(true);
}
}
для получения дополнительной справки нажмите здесь http://androiddhina.blogspot.in/2015/10/marquee-effect-in-android-textview.html
Ответ 21
Большинство ответов идентичны,
но также обратите внимание, что в некоторых случаях шатер не будет работать без указания ширины в провалах для контейнера.
Например, если вы используете вес в родительском контейнере
android:layout_width="0dp"
android:layout_weight="0.5"
может не работать.