Как я могу использовать текст marquee в приложении Android?
Текст маркировки на 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"
с вашим просмотром текста.
Но не забудьте сосредоточиться на желаемом текстовом просмотре.