答案 0 :(得分:252)
答案 1 :(得分:83)
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);
答案 2 :(得分:23)
这些属性必须包含在textview
标记中才能滚动。
其他一切都是可选的。
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:ellipsize="marquee"
答案 3 :(得分:12)
非常简单的工作代码:
无限滚动文字
<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);
答案 4 :(得分:9)
我遇到过textview marquee无效的情况。但请遵循这一点,我相信它会奏效。 :)
<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"/>
并以编程方式添加这两行...
tvMarquee.setHorizontallyScrolling(true);
tvMarquee.setSelected(true);
如果视图中的任何一个已经被聚焦并且setSelected将使其工作,则需要tvMarquee.setSelected(true)。 无需使用。
android:singleLine="true"
不推荐使用,以上代码可以使用。
答案 5 :(得分:8)
<TextView
android:ellipsize="marquee"
android:singleLine="true"
.../>
必须调用代码
textView.setSelected(true);
答案 6 :(得分:8)
工作代码:
<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 :(得分:7)
我正在使用minSDK = 14,并且好奇这些变体可以起作用。我最终得到了:
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
除了其他格式化的东西。我不需要scrollHoriontally,focusable或focusableInTouchMode。
此套装需要调用
setSelected(true)
我觉得有趣的是,singleLine据称已被弃用,建议用maxLines = 1替换它。除非 - 当我这样做时,单独的更改会阻止文本滚动。人们希望当singleLine最终咬住灰尘时,maxLines会触发它的所有当前行为......
答案 8 :(得分:7)
我遇到了同样的问题。 Amith 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是一个示例包名称,应该用您自己的包名替换。
希望这会对你有所帮助。干杯!
答案 9 :(得分:5)
只需添加上述内容:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
和!!你必须在你的java代码中使用TextView.setSelected(true)。
本文中没有与某些人合作的原因,如果你有一个带有EditText的输入表单(这是一个输入),EditText将是默认情况下在表单中具有焦点和选择的那个。现在,如果你强制它通过TextView.setSelected(true),TextView最终会做任何选择。
因此,整个想法是使TextView小部件集中并选择以进行选框工作。
答案 10 :(得分:4)
您必须将这些强制性的属性添加到选框
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
答案 11 :(得分:3)
在代码中使用以下行:
TextView.setSelected(true);
答案 12 :(得分:3)
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;
}
}
此代码正常工作,但如果您的屏幕尺寸未填写此文本,则不会移动尝试放置空白文本结尾
答案 13 :(得分:2)
是的, marquee_forever 也适用于 TextView的固定宽度。 (例如android:layout_width =“120dp”)
必填属性包括:
工作代码:
<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!" />
答案 14 :(得分:2)
只需将这些参数放入TextView即可。它有效:)
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
`
答案 15 :(得分:2)
我创建了一个自定义类 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);
}
}
你可以在欲望时启动马.. ..比如
//textView.setSelected(true); No need of Selection..
textview.setAlwaysMarquee(true);
答案 16 :(得分:2)
要拥有自己的滚动速度和灵活性来自定义选取框属性,请使用以下命令:
<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);
}
答案 17 :(得分:0)
机器人:可聚焦=&#34;真&#34;和android:focusableInTouchMode =&#34; true&#34;是必不可少的......
因为我测试了没有这些线条的所有其他人,结果是没有选框。当我添加这些时,它开始变形...
答案 18 :(得分:0)
if (obj instanceof Person){
}
如需更多参考,请点击此处http://androiddhina.blogspot.in/2015/10/marquee-effect-in-android-textview.html
答案 19 :(得分:0)
大多数答案都是相同的,
但是请注意,在某些情况下,如果没有指定容器的倾角宽度,则选框将无法工作
例如,如果您在父容器中使用重量
android:layout_width="0dp"
android:layout_weight="0.5"
选框可能不起作用。