TextView字幕不工作
我试图使用字幕,而不是在这里工作是我的代码,请让我知道哪里会出错
<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
现在工作:)代码如下
<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">
编辑(代表Adil Hussain):
需要在代码中设置textView.setSelected(true)
才能工作。
android:singleLine="true" android:ellipsize="marquee"
是唯一必需的属性,甚至可以使用layout_width=0dp
定义的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);
这些属性必须包含在textview
标签中,以允许滚动。
其他一切都是可选的。
android:focusable="true" android:focusableInTouchMode="true" android:layout_width="fill_parent" android:ellipsize="marquee"
我面临同样的问题,这个讨论帮助我,我只是取代这条线
android:maxLines="1"
用xml中的这一行
android:singleLine="true"
它工作的行txtView.setSelected(true);
也在我的活动中
非常简单的工作代码:
为无限滚动文字
<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);
工作代码:
<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" />
我正在使用minSDK = 14,并且很好奇这些变化会起什么作用。 我结束了:
android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true"
除了其他格式的东西。 我不需要scrollHoriontally,focusable或focusableInTouchMode。
这组确实需要打电话给
setSelected(true)
我觉得有趣的是singleLine据说已经被弃用了,build议用maxLines = 1来取代它。除了 – 当我这样做的时候,单独的变化就阻止了文本的滚动。 人们会希望当singleline最终咬住灰尘,它的所有当前行为将由maxLines触发…
只要添加如上所述的那些:
android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever"
和!! 你必须在你的java代码中使用TextView.setSelected(true)。
如果你有一个EditText(这是一个input)的input窗体,EditText将是默认情况下在窗体中具有焦点和select的EditText。 现在,如果你强制通过TextView.setSelected(true),TextView将最终做无论如何选框。
所以整个想法是使TextView小部件集中和select,使选框工作。
我遇到了同样的问题。 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是一个示例包名称,应该由您自己的包名称replace。
希望这会帮助你。 干杯!
我经历了textview字幕不工作的情况。 但按照这一点,我相信它会工作。 🙂
<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"
它被弃用,上面的代码工作。
在你的代码中使用以下行:
TextView.setSelected(true);
您必须将这些属性强制添加到选取框
android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine="true" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true"
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; } }
此代码正常工作,但如果你的屏幕尺寸不填充此文本,它不会移动尝试到文本的空白结尾
是的, marquee_forever也适用于TextView固定宽度的情况。 (例如android:layout_width =“120dp”)
必须属性是:
- 机器人:可聚焦=“真”
- 机器人:focusableInTouchMode = “真”
- android:singleLine =“true”//如果缺less文本出现在多行。
工作代码:
<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!" />
只要把这些参数在你的TextView中。 有用 :)
android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit ="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true"
`
我创build了一个自定义类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);
<TextView android:ellipsize="marquee" android:singleLine="true" .../>
必须在代码中调用
textView.setSelected(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); tanim.setInterpolator(new LinearInterpolator()); tanim.setRepeatCount(Animation.INFINITE); tanim.setRepeatMode(Animation.ABSOLUTE); textView.startAnimation(tanim); }
android:focusable =“true”和android:focusableInTouchMode =“true”是必不可less的….
因为我没有这些线testing所有其他人,结果是没有选框。 当我添加这些,它开始marquee ..
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
大部分的答案是相同的,
但也注意到,在某些情况下,如果没有为容器指定宽度,选框不起作用。
例如,如果您在父容器中使用重量
android:layout_width="0dp" android:layout_weight="0.5"
字幕可能无法正常工作。