Шатер текст в Android
Как я могу использовать текст шатра в приложении для android?
15 ответов:
вот пример:
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-файл с textview:
<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>
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);
чтобы заставить это работать, мне пришлось использовать все три вещи (ellipsize, selected и singleLine), упомянутые выше:
TextView tv = (TextView)findViewById(R.id.someTextView); tv.setSelected(true); tv.setEllipsize(TruncateAt.MARQUEE); tv.setSingleLine(true):
Xml-код
<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");
просто поместите эти параметры в свой 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);
приветы, Кристофер
Я нашел проблему с marquee, что он не может быть использован для коротких строк(так как его функция только для отображения длинных строк).
Я предлагаю использовать Webview, если вы хотите переместить короткие строки по горизонтали. основная деятельность.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>
а также настройки XML, определенные droidgren, мои тесты показали, что если текст, который вы хотите отобразить, короче ширины textview, то шатер не будет прокручиваться вообще. Возможные решения-установить ширину представления на размер меньше длины текста или связать строку с собой в 2 или 3 раза, возможно, с соответствующими пробелами между ними, чтобы прокрутка выглядела нормально.
добавить ниже код в 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);
Я пробовал все вышеперечисленное, но для меня это не сработало. Когда я добавляю
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"
используйте это, чтобы установить марку:
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-файл. Шатер будет работать даже без этого.
в XML-файле вам нужно добавить следующие дополнительные атрибуты в TextView, чтобы получить функцию marquee like:
android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true"
В MainActivity.java-файл, вы можете получить ссылку на этот TextView с помощью findViewById () и вы можете установить следующее свойство для этого TextView, чтобы он выглядел как текст шатра:
setSelected(true);
Это все, что вам нужно.
Вы можете использовать TextView или пользовательский 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.образец.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; } }
надеюсь, что это будет полезно для вас. Ура!
с приведенным выше ответом вы не можете установить скорость или иметь гибкость для настройки функциональности текстового представления. Чтобы иметь собственную скорость прокрутки и гибкость для настройки свойств шатра, используйте следующее:
<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); }