我正在显示文本的TextView,似乎太长,以适合
在一个屏幕上。我需要使我的TextView可滚动。我该怎么办
了吗?
代码如下:
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
对于一个垂直或水平滚动的TextView,其他一些答案的帮助,但我需要能够滚动两种方式。
什么最后工作是一个ScrollView与一个HorizontalScrollView里面,和一个TextView里面的HSV。它非常光滑,可以很容易地从一边到另一边或从上到下在一个滑动。它还只允许在一个方向上滚动,所以在向上或向下滚动时不会从一边跳到另一边。
禁用编辑和光标的EditText可以工作,但感觉很糟糕。每次滚动都会移动光标,甚至在100行的文件中也需要多次滑动才能从上到下或从一边到另一边。
使用setHorizontallyScrolling(true)可以工作,但没有类似的方法来允许垂直滚动,而且据我所知,它在ScrollView内部不起作用(尽管只是学习,可能是错误的)。
如果你想在textview中滚动文本,那么你可以遵循以下步骤:
首先,你应该子类textview。
然后用它。
下面是一个子类化的textview的例子。
public class AutoScrollableTextView extends TextView {
public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context) {
super(context);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
@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;
}
}
现在,你必须在XML中这样使用它:
<com.yourpackagename.AutoScrollableTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is very very long text to be scrolled"
/>
就是这样。