时间:2010-07-26 07:19:55

标签: android textview

20 个答案:

答案 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”)

必填属性包括:

  1. android:focusable =“true”
  2. 机器人:focusableInTouchMode = “真”
  3. android:singleLine =“true”//如果缺少的文字出现在多行中。
  4. 工作代码:

    <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)

enter image description here

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"

选框可能不起作用。