首页 > 代码库 > 关于TextView走马灯问题
关于TextView走马灯问题
最近一客户因走马灯问题找我,当字符在25个以上的时候就不走了,后来我把问题复现了下,发现问题如下:
问题1.字符在25个以内都可以走的。
问题2.字符超过25个,而小于屏幕宽度,就不走了
问题3.字符超过屏幕宽度可以走的。
查看各种资料,发现如下原因导致,但无法解释问题1.
显示跑马灯效果的前提条件就是你的文本内容要比显示文本的外部组件长,即外部组件无法完整的显示内部的文本内容。
因此要实现跑马灯效果有两种设置方式:
1、layout_width=”"设置为成比文本内容短的固定值,最好不要写成wrap_content或者fill_parent。
2、如果layout_width=”"设置wrap_content或者fill_parent,那么可以增加上 android:paddingLeft="15dip",android:paddingRight="15dip"使两端的距离加大而无法全部显示文本内容,但是这有一个缺陷就是在手机的屏幕变大时,距离没有变大,外部组件又可以正常显示内部文本,于是又无法显示跑马灯效果,因此建议第一种设置为佳。
修正代码如下:
if(wm !=null && mMainPanel != null){
try {
wm.removeView(mMainPanel);
wm = null;
mMainPanel = null;
} catch (Exception e) {
e.printStackTrace();
}
}
wm = (WindowManager)context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
//设置窗口布局居于所有之上
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
//使窗口失去焦点
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//背景透明
params.format = PixelFormat.RGBA_8888;
params.alpha = 0.7f;//透明度
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.x = 0;
params.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
isNeedShow = true;
mMainPanel = (LinearLayout) inflater.inflate(R.layout.notify_message_bottom, null);
mLinearLayout = (LinearLayout)mMainPanel.findViewById(R.id.no_button_layout);
mLinearLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cancelDialog();
}
});
titleText = (TextView) mMainPanel.findViewById(R.id.bottem_text);
DisplayMetrics dm = new DisplayMetrics();
dm = context.getResources().getDisplayMetrics();
// titleText.setWidth(dm.widthPixels);
titleText.setMarqueeRepeatLimit(-1);
//次数减一才是真正的次数
Log.d(TAG, "scrollCount: "+(scrollCount-1));
// titleText.setMarqueeRepeatLimit(scrollCount-1);
String content = mArgs.getTitle()+":"+mArgs.getContent();
TextPaint paint = titleText.getPaint();
float len = paint.measureText(content);
//1280
Log.d(TAG, "len: "+len+" ,dm.widthPixels: "+dm.widthPixels);
for (int i = 0; (len < dm.widthPixels); i++) {
len = paint.measureText(content);
content = content + " ";
}
//tcl对接添加了这个,设置长度必须短于文本,否则不滚动。1288
Log.d(TAG, "content: "+content);
Log.d(TAG, "new content: "+paint.measureText(content));
titleText.setWidth((int)paint.measureText(content)-50);
titleText.setText(content);
// titleText.setMovementMethod(ScrollingMovementMethod.getInstance());
wm.addView(mMainPanel, params);//添加到系统窗口中