我想在TextView中反转选取框的方向。默认情况下,文本从右向左移动,我希望它从左向右移动。我怎么能这样做?
答案 0 :(得分:9)
我想出了一个非常简单易行的方法。根据我们的选择,我做了两个方向移动的选框效果。所以,这是诀窍:
我在HorizontalScrollView中使用了TextView。我以编程方式控制其滚动。我使用了以下文字:
scroll_pos = (int)myTextView.getLayout().getLineWidth(0);
然后我使用Handler并递归调用它直到达到滚动限制。在这个处理程序中,我使我的HorizontalScrollView滚动到某个位置:
Handler hHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
hScroll.scrollTo(scroll_pos, 0);
scroll_pos--;
if(scroll_pos >= 0)
hHandler.sendEmptyMessage(0);
}
};
在这里,从左到右是一个平滑的选框。干杯!
答案 1 :(得分:6)
另一种简单的方法是使用HTML,您也可以轻松改变方向direction="Left"
<html><body><FONT COLOR="#000000" ><marquee id="mrqSlogan" direction="Left" style="width: auto;" >text your</marquee></FONT></body></html>
并传递给WebView
webView.loadDataWithBaseURL(null, yourhtmltext, "text/html" , null, null);
答案 2 :(得分:6)
最后我在这里找到了最佳解决方案: https://github.com/Torob/MarqueeView
感谢torob.ir(这是一个波斯最优价格搜索引擎)
使用此库:
将你的TextView放在其中 MarqueeView像这样:
<your.packagename.MarqueeView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/horizontalScrollView"
android:scrollbars="none"
android:visibility="visible"
android:clickable="false">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test"
android:id="@+id/scrollingtext"
android:singleLine="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:paddingRight="25dp"
android:paddingLeft="25dp" />
</your.packagename.MarqueeView>
答案 3 :(得分:1)
您正在寻找的功能目前似乎不可用。
您可以在TextView.java中从源创建自己的反向选框文本视图,但其中有很多引用“选取框”。我数了50多,所以可能需要一些时间来反转滚动方向。
我认为一些双向语言支持可能允许您将textview从左向右滚动,但Android似乎不能很好地支持RTL语言。
现在,您唯一的选择是接受选框的方向或创建支持您的功能的TextView类。
我会从第3810行 - 第3815行看这一部分
if (mMarquee != null && mMarquee.isRunning()) {
canvas.translate(-mMarquee.mScroll, 0.0f);
}
在mMarquee之前删除减号:
if (mMarquee != null && mMarquee.isRunning()) {
canvas.translate(mMarquee.mScroll, 0.0f);
}
显然你需要做出额外的改变,但这会指出你正确的方向(字面意思)。
答案 4 :(得分:1)
我建议您使用此行为创建自己的组件。
像这样: ViewFlipper与单个TextView一样(显示您的文本)。
flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.marquee_out));
Marquee in:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:duration="1500"/>
</set>
Marquee out:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%p"
android:toXDelta="0%p"
android:duration="1500"/>
</set>
你必须稍微调整持续时间,使它看起来像一个“原生”动画。 : - )
答案 5 :(得分:0)
以下是解决方案:
在布局文件中设置:
<TextView
android:id="@+id/textId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#337700"
android:textSize="20px"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:textStyle="bold"
android:text="Download Form for Different Vehiecle Purposes ....!!!">
</TextView>
并将其设置为活动:
tv = (TextView) findViewById(R.id.textId);
tv.setSelected(true);
在我的情况下,这是从右向左移动文本。
答案 6 :(得分:0)
对于每个人使用的从右到左的文本: 试试这个:
TextView tv = (TextView) findViewById(R.id.txt);
Rect bounds = new Rect();
Paint textPaint = tv.getPaint();
String text = tv.getText().toString();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int width = bounds.width();
LinearLayout.LayoutParams lp = (LayoutParams) tv.getLayoutParams();
lp.width = width + 100;
int startX = 300;
TranslateAnimation ta = new TranslateAnimation(startX, lp.width, 0, 0);
ta.setDuration(20000);
ta.setRepeatCount(-1);
tv.setAnimation(ta);
答案 7 :(得分:0)
设置布局方向 android:layoutDirection =“ rtl” android:textDirection =“ rtl”
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_weight="1"
android:layoutDirection="rtl"
android:textDirection="rtl"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text=" ......... گپ دوستان بیسیبییبب "
android:textColor="@color/colorPrimaryDark"
android:textSize="@dimen/font_size_xlarge" />