如何知道TextView中是否有可用的space?

How to know if there is available space in TextView?

因为我想做同样的事情,就像Whatsapp一样,它把消息和时间放在同一行

或在另一行。

有时 space Whatsapp 会将小时放在同一行。但是有时没有 space 并且 Whatsapp 将小时放在另一行。

内部还是外部...

有什么想法吗?

我想你可以试试 textView.getLayout().getLineWidth(lineNum)lineNum 显然是最后一行)。 然后将其与父布局宽度进行比较,如果差异大于 timestamp.getWidth() 加上一些额外的填充,则将其显示在同一行上。

public static final String TAG = "MainActivity";
private TextView mText;
private RelativeLayout relativeLayout;
private Boolean mFirstTime = true;
private static final int WIDH_HOUR = 382;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final int width = getScreensWidh();

    mText = (TextView) findViewById(R.id.activity_main_text);
    relativeLayout = (RelativeLayout) findViewById(R.id.activity_main_relative);

    mText.setText("aaaaa dfsafsa afdsfa fdsafas adfas fdasf adfsa dsa aaaa dfsafsa afdsfa fdsafas adfas fdasf adfsa");

    ViewTreeObserver vto = mText.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (mFirstTime) {
                Layout layout = mText.getLayout();
                int lines = layout.getLineCount();

                int offset = layout.layout.getLineWidth(lines - 1);
                int freeSpace = width - offset;

                TextView hour = new TextView(MainActivity.this);
                hour.setText("12:20");
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                if (freeSpace > WIDH_HOUR) {
                    params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.activity_main_text);
                } else {
                    params.addRule(RelativeLayout.BELOW, R.id.activity_main_text);
                }
                hour.setLayoutParams(params);
                relativeLayout.addView(hour);
                Log.d(TAG, String.valueOf(freeSpace));
                mFirstTime = false;
            }

        }
    });


}

public int getScreensWidh() {
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return size.x;

}

两种Public方法

Return 此布局中的文本行数。

获取指定行的无符号水平范围,包括前导空白缩进和尾随空白。