对齐文本语音气泡内的时间

sha*_*han 5 xml user-interface android whatsapp

我想实现此功能,如Android中的 WhatsApp 中所示。

\n\n

2个泡泡

\n\n

在这里,为了实现这一点,我对文本和时间使用了单独的TextView 放置相对布局内。

\n\n

我的问题是,WhatsApp 如何决定何时在换行符中移动时间,何时不移动。

\n\n

以下是 WhatsApp 的纵向和横向屏幕截图。

\n\n

纵向视图

\n\n

景观

\n\n

直觉是,代码一定是这样的。

\n\n
if(width_of_last_line_of_textview > some_fixed_value)\n    move time_textview to new-line;\nelse\n    make time_textview in-line;\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我想知道这是否可以使用 xml 来完成(使用一些属性权重等)

\n\n

WhatsApp bubble 会根据每种屏幕尺寸进行自我调整,无论屏幕是横向还是纵向。

\n\n
\n\n

附件是 WhatsApp 用于文本气泡的布局。

\n\n

conversation_row_text_right.xml

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<merge xmlns:android="http://schemas.android.com/apk/res/android" >\n\n<com.whatsapp.DividerView\n    android:id="@id/date_divider"\n    style="@style/DateDivider" />\n\n<LinearLayout\n    android:id="@id/main_layout"\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content"\n    android:layout_alignParentRight="true"\n    android:layout_below="@id/date_divider"\n    android:layout_marginLeft="40.0dip"\n    android:minHeight="30.0dip"\n    android:orientation="vertical" >\n\n    <FrameLayout\n        android:id="@id/web_page_preview_holder"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:paddingBottom="4.0dip"\n        android:paddingLeft="8.0dip"\n        android:paddingRight="8.0dip"\n        android:paddingTop="8.0dip" />\n\n    <view\n        android:id="@id/text_content_layout"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        class="com.whatsapp.TextAndDateLayout"\n        android:paddingBottom="2.0dip"\n        android:paddingRight="2.0dip" >\n\n        <com.whatsapp.TextEmojiLabel\n            android:id="@id/message_text"\n            android:layout_width="wrap_content"\n            android:layout_height="wrap_content"\n            android:layout_gravity="left"\n            android:paddingBottom="3.0dip"\n            android:paddingLeft="8.0dip"\n            android:paddingRight="8.0dip"\n            android:paddingTop="2.0dip"\n            android:textColor="#ff000000"\n            android:textSize="@dimen/conversation_text_row_tv" />\n\n        <LinearLayout\n            android:id="@id/date_wrapper"\n            android:layout_width="wrap_content"\n            android:layout_height="wrap_content"\n            android:layout_gravity="bottom|center|right"\n            android:orientation="horizontal"\n            android:paddingBottom="1.0dip"\n            android:paddingRight="5.0dip" >\n\n            <TextView\n                android:id="@id/date"\n                style="@style/ConversationDate"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_gravity="bottom|center|right"\n                android:gravity="right" />\n\n            <ImageView\n                android:id="@id/status"\n                android:layout_width="wrap_content"\n                android:layout_height="wrap_content"\n                android:layout_gravity="bottom|center|right"\n                android:paddingBottom="3.0dip"\n                android:paddingLeft="4.0dip" />\n        </LinearLayout>\n    </view>\n</LinearLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

WhatsApp 使用LinearLayout来显示日期,它包含 TextView (用于日期,即3:48 PM)和 ImageView (用于图标,即\xe2\x9c\x94

\n