添加点到的TextView [英] Add dots to TextView

查看:113
本文介绍了添加点到的TextView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要实现类似的财产以后检查(检查)的信息,例如:
啤酒......................................... 20
牛奶.......................................... 10
饼干,果酱..................... 15
智能手机10GB 3GHz的
1GB内存NFC 10MPx
相机.................................. 400

I want to implement somthing like check(cheque) info, e.g.:
Beer ......................................... 20
Milk .......................................... 10
Cookies with jam ..................... 15
Smartphone 10GB 3GHz
1GB RAM NFC 10MPx
camera .................................. 400

说明: 检查信息(啤酒,牛奶),我认为这是768,16一个TextView,这是我需要填充点。
钱(20,10)是另一种的TextView其中768,16对准的ViewGroup的右侧。

Description: Check info (Beer, Milk) I think it shoud be a TextView, which I need to fill with dots.
Money (20, 10) is another TextView which shoud be aligned to the right of ViewGroup.

任何想法如何做到这一点?也许我需要从TextView的继承和覆盖的OnDraw()什么的?
许多感谢建议!!!

Any ideas how to do this? Maybe I need inherited from TextView and override onDraw() or something?
Many thank for advices!!!

推荐答案

我有解决方案。也许这将帮助别人。

  1. 文件check_info_item.xml:

  1. File check_info_item.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="horizontal">
<RelativeLayout android:layout_width="match_parent"
          android:layout_height="wrap_content">

<TextView android:layout_height="wrap_content"
          android:layout_width="wrap_content"
          android:id="@+id/txt_fake_value"
          android:textSize="18dp"
          android:textColor="@android:color/transparent"
          android:layout_alignParentRight="true"/>
<example.com.CheckInfoTextView android:layout_height="wrap_content"
          android:layout_width="match_parent"
          android:id="@+id/txt_fake_info"
          android:textSize="18dp"
          android:textColor="@android:color/transparent"
          android:layout_alignParentLeft="true"
          android:layout_toLeftOf="@id/txt_fake_value"/>
<TextView android:layout_height="wrap_content"
          android:layout_width="wrap_content"
          android:id="@+id/txt_check_info_value"
          android:text=""
          android:textSize="18dp"
          android:textColor="#000"
          android:layout_alignParentRight="true"
          android:layout_alignBottom="@id/txt_fake_info"/>
<example.com.CheckInfoTextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:textSize="18dp"
        android:textColor="#000"
        android:id="@+id/txt_check_info"
        android:text=""
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/txt_check_info_value"/>
</RelativeLayout>
</LinearLayout>

  • $ C $三来一补的信息字段(活动):

  • Code to fill the info fields (in the Activity):

        View row = getLayoutInflater().inflate(R.layout.check_info_item, null);
        //Fake fields needed to align base fields in the xml file
        TextView txtFakeValue = (TextView) row.findViewById(R.id.txt_fake_value);
        txtFakeValue.setText(String.valueOf(pair.second));
    
        TextView txtFake = (TextView) row.findViewById(R.id.txt_fake_info);
        txtFake.setText(pair.first);
    
        TextView txtValue = (TextView) row.findViewById(R.id.txt_check_info_value);
        txtValue.setText(String.valueOf(pair.second));
    
        TextView txtTitle = (TextView) row.findViewById(R.id.txt_check_info);
        txtTitle.setText(pair.first);
    

  • 而CheckInfoTextView:

  • And the CheckInfoTextView:

    public class CheckInfoTextView extends TextView {
    
    
    public CheckInfoTextView(Context context) {
        super(context);
    }
    
    public CheckInfoTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public CheckInfoTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if(!hasWindowFocus) return;
    
    int requiredDots = getRequiredDotsNumber();
    if(requiredDots == 0) {
        String text = getText().toString();
        StringBuilder result = new StringBuilder();
        result.append(text.substring(0, text.lastIndexOf(' ')));
        result.append("\n");
        result.append(text.substring(text.lastIndexOf(' ') + 1));
        setText(result.toString());
    
        requiredDots = getRequiredDotsNumber();
    }
    String dots = "";
    for (int i = 0; i < requiredDots; ++i) {
        dots += " .";
        }
        setText(getText() + dots);
    }
    
    private int getRequiredDotsNumber() {
        final int width = getWidth();
        final int lastLineWidth = (int) getLayout().getLineWidth(getLineCount() - 1);
        final int availableWidthForDots = width - lastLineWidth;
        final int widthOfOneDot = getWidthOfOneDot();
        final int widthOfTwoDotsWithSpace = getWidthOfTwoDotsWithSpace();
        final int widthOfSpace = widthOfTwoDotsWithSpace - (widthOfOneDot * 2);
        final int widthOfDotWithSpace = widthOfSpace + widthOfOneDot;
        int numberOfDots = availableWidthForDots / widthOfDotWithSpace;
        return numberOfDots;
    }
    
    private int getWidthOfTwoDotsWithSpace() {
       return getStringWidth(". .");
    }
    
    private int getWidthOfOneDot() {
       return getStringWidth(".");
    }
    
    private int getStringWidth(String text) {
        Rect dotBounds = new Rect();
        getPaint().getTextBounds(text,0,text.length(),dotBounds);
        return dotBounds.width();
    }
    }
    

  • 这篇关于添加点到的TextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆