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