Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道TextView中是否有可用空间?_Android_Textview_Whatsapp - Fatal编程技术网

Android 如何知道TextView中是否有可用空间?

Android 如何知道TextView中是否有可用空间?,android,textview,whatsapp,Android,Textview,Whatsapp,因为我想做同样的事情,就像Whatsapp一样,它把信息和时间放在同一行 或者在另一行 有时有空间,Whatsapp把时间排在同一行。然而,有时没有空间,Whatsapp将时间排在另一行 里面还是外面 有什么想法吗?我想你可以试试textView.getLayout().getLineWidth(lineNum)(lineNum显然是最后一行)。 然后将其与父布局宽度进行比较,如果差异大于timestamp.getWidth()加上一些额外的填充,则将其显示在同一行上 public stati

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

或者在另一行

有时有空间,Whatsapp把时间排在同一行。然而,有时没有空间,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;

}
两种公共方法

  • 公共摘要int()
返回此布局中的文本行数

  • 公共整数(整数行)

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

我没有尝试过此方法,因此没有将其放入答案中。我希望把时间用一个正确对齐的跨度来包装,这样才能工作。如果没有空间,它将在新行上右对齐,否则它将在同一行中右对齐。