Макет уведомления по умолчанию
Основная проблема с этой идеей многострочного текста с макетом уведомлений по умолчанию состоит в том, что в базовом исходном коде для TextView есть следующий xml:
<com.android.internal.widget.ImageFloatingTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginTop="@dimen/notification_text_margin_top"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:gravity="top"
<!-- Reason why a new line character won't work -->
android:singleLine="true"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Material.Notification"
/>
Большой текстовый стиль
Как вы можете видеть, представление по умолчанию жестко закодировано в одну строку. Таким образом, с учетом сказанного, если вы используете BigTextStyle
, как указано в ответе выше, он будет работать, поскольку базовый xml использует следующую компоновку:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:tag="bigText"
>
<include layout="@layout/notification_template_header" />
<LinearLayout
android:id="@+id/notification_action_list_margin_target"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"
android:layout_marginTop="@dimen/notification_content_margin_top"
android:layout_marginBottom="@dimen/notification_action_list_height"
android:clipToPadding="false"
android:orientation="vertical">
<LinearLayout
android:id="@+id/notification_main_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingStart="@dimen/notification_content_margin_start"
android:paddingEnd="@dimen/notification_content_margin_end"
android:clipToPadding="false"
android:minHeight="@dimen/notification_min_content_height"
android:orientation="vertical"
>
<include layout="@layout/notification_template_part_line1" />
<include layout="@layout/notification_template_progress"
android:layout_width="match_parent"
android:layout_height="@dimen/notification_progress_bar_height"
android:layout_marginTop="@dimen/notification_progress_margin_top"
android:layout_marginBottom="6dp"/>
<com.android.internal.widget.ImageFloatingTextView
android:id="@+id/big_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/notification_text_margin_top"
android:paddingBottom="@dimen/notification_content_margin_bottom"
android:textAppearance="@style/TextAppearance.Material.Notification"
<!-- Reason why it works here -->
android:singleLine="false"
android:gravity="top"
android:visibility="gone"
android:textAlignment="viewStart"
/>
</LinearLayout>
<ViewStub android:layout="@layout/notification_material_reply_text"
android:id="@+id/notification_material_reply_container"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<include layout="@layout/notification_material_action_list" />
<include layout="@layout/notification_template_right_icon" />
</FrameLayout>
Таким образом, как вы можете видеть, внутреннее представление задает android:singleLine="true"
в случае макета уведомления по умолчанию и android:singleLine="false"
при использовании BigTextStyle.
Простейшим способом решения вашей задачи было бы использование BigTextStyle, но вы можете иметь гораздо больший контроль над макетом, если вы используете свой собственный TextView внутри файла макета и вызываете:
builder.setCustomContentView(RemoteViews remoteViews)
Хорошая статья GDE здесь , объясняющая, как использовать RemoteViews, если вы того пожелаете, довольно проста.
Удачи и счастливого кодирования!