У меня есть требование добавить некоторые отзывы пользователей, используя стандартную Snackbar в Android.
Я заметил, что если мой текст слишком длинный, тогда вся текстовая строка исчезает. Вместо того, чтобы иметь эллипсы...
Более конкретно; в эмуляторе Pixel 2 исчезает следующая строка:
"Вы не в сети. Проверьте соединение и попробуйте снова". - это ушло
но если я удаляю последний символ, то он показывает:
"Вы находитесь в автономном режиме. Проверьте подключение и попробуйте снова" - это показывает
Еще хуже то, что на устройстве с меньшим экраном длина отображаемого текста уменьшается, например, на эмуляторе Nexus 5:
"Вы не в сети. Проверьте соединение и попробуйте снова" - теперь это не отображается
но если я укороту его дальше:
"Вы находитесь в автономном режиме. Проверьте подключение" - это показывает
Это похоже на ошибку для меня.
Я понимаю, что Snackbar должен быть для очень короткого текста, но тем не менее он не должен произвольно удалять текст. Это должно по крайней мере показать некоторый текст или эллипсы или стать многострочным.
Кто-нибудь еще заметил это или может подсказать, если это ошибка или я что-то упустил?
Пример кода:
Snackbar.make(findViewById(R.id.placeSnackBar),
"You're offline. Check your connection and try again.",
Snackbar.LENGTH_INDEFINITE)
.setAction("X", View.OnClickListener { }).show()
Я также попробовал:
val sb = Snackbar.make(this, message, Snackbar.LENGTH_INDEFINITE)
.setActionTextColor(Color.parseColor("#666666"))
.setAction("X", View.OnClickListener { })
sb.view.setBackgroundColor(Color.WHITE)
sb.view.findViewById<TextView>(android.support.design.R.id.snackbar_text)
//.setTextColor(Color.parseColor("#F44336"))
.setTextColor(Color.parseColor("#000000"))
sb.view.findViewById<TextView>(android.support.design.R.id.snackbar_text)
.singleLine = false
sb.view.findViewById<TextView>(android.support.design.R.id.snackbar_text)
.maxLines = 2
sb.show()
XML для разметки Coordinator, которая показывает снэк-бар над плавающей разметкой нижнего колонтитула
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/message_bar_container"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_above="@+id/llFooter" />
<LinearLayout
android:id="@+id/llFooter"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_alignParentBottom="true"
android:background="@drawable/footer_background"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:id="@+id/login_forgot_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
...
/>
<Button
android:id="@+id/btn_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
...
/>
</LinearLayout>
</RelativeLayout>
Как это выглядит с полной строкой:
и если я укорачиваю строку на 1 символ:
Установите линии TextView
на 2, открыв его TextView
:
val message = "You're offline. Check your connection and try again.";
val sb = Snackbar.make(
findViewById(R.id.newLinearLayout),
"You're offline. Check your connection and try again.",
Snackbar.LENGTH_INDEFINITE)
.setAction("X") {}
val view = sb.view
val textView = view.findViewById<View>(android.support.design.R.id.snackbar_text) as TextView
textView.maxLines = 2
sb.show()