一个复杂的消息布局

时间:2018-01-23 14:28:46

标签: android layout kotlin

我有一个非常有趣的问题。我应该为电报中的文本消息制作布局,但只能使用文本。所以如果消息文本超过1行,我应该将时间戳稍微调低一点。 我用2个textViews做了布局(一个用于单行消息,另一个用于多行,你可以在附加中看到我的布局)

我的问题是,当我为多行情况显示时间戳时,所有列表都有一点跳跃(因为视图高度变化) 这里是我的viewHolder中的代码(我使用kotlin,但它仍然非常明显)。 主要问题是 - 如何在渲染之前在textView中计算行数?

   val date = stamp.toString(Constants.DEFAULT_TIME_FORMAT)
   textViewItemMessageText.text = text
   textViewItemMessageTimeForSingleLine.show()
   textViewItemMessageTime.hide()
   textViewItemMessageTimeForSingleLine.text = date
   textViewItemMessageText.post {
   if (textViewItemMessageText.lineCount > 1) {
       textViewItemMessageTimeForSingleLine.hide()
       textViewItemMessageTime.show()
       textViewItemMessageTime.text = date
   }




<android.support.v7.widget.CardView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|center_vertical"
    android:layout_marginBottom="4dp"
    android:layout_marginLeft="60dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="4dp"
    app:cardBackgroundColor="@color/thin_green"
    app:cardCornerRadius="4dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textViewItemMessageText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="sans-serif"
                android:textColor="@color/black_light_87"
                android:textSize="14sp"
                android:textStyle="normal"
                tools:text="My generation"/>

            <TextView
                android:id="@+id/textViewItemMessageTimeForSingleLine"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:drawableLeft="@drawable/ic_read"
                android:fontFamily="sans-serif"
                android:gravity="center_vertical"
                android:textColor="@color/grass_two_54"
                android:textSize="12sp"
                android:textStyle="normal"
                tools:text="16:20"/>

        </LinearLayout>

        <TextView
            android:id="@+id/textViewItemMessageTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:layout_marginLeft="4dp"
            android:layout_marginTop="2dp"
            android:drawableLeft="@drawable/ic_read"
            android:fontFamily="sans-serif"
            android:textColor="@color/grass_two_54"
            android:textSize="12sp"
            android:textStyle="normal"
            tools:text="16:20"/>

    </LinearLayout>

</android.support.v7.widget.CardView>

0 个答案:

没有答案