Android中的选取框文字

我如何使用android应用程序中的选取框文本?

这里是一个例子:

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

带有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> 
 android:ellipsize="marquee" 

这只有当你的TextView具有焦点时才起作用。

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

问候,克里斯托弗

我发现一个问题与字幕,它不能用于短的string(因为它的function只是显示长string)。

我build议使用Webview如果你想水平移动短的string。 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> 

除了droidgren标识的XML设置外,我的testing还显示,如果要显示的文本比textview的宽度短,那么选取框将不会滚动。 可能的解决scheme是将视图的宽度设置为小于文本长度的大小,或者将string连接到自身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" 

用这个来设置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."); 

你不需要在xml文件中使用“ android:marqueeRepeatLimit =”marquee_forever “。即使没有这个,Marquee也可以工作。

这将相当于“结束”:

 where = TruncateAt.END 

您可以使用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.example.myapplication是一个示例包名称,应该由您自己的包名称replace。

那么在使用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); tanim.setInterpolator(new LinearInterpolator()); tanim.setRepeatCount(Animation.INFINITE); tanim.setRepeatMode(Animation.ABSOLUTE); textView.startAnimation(tanim); }