关于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);//添加到系统窗口中

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值