Android-закусочная на планшетах не выровнена
Примечание: я видел существующий вопрос, озаглавленный "Align Snackbar's Action справа", но это не относится к моему конкретному вопросу.
В соответствии со спецификацией дизайна материала действие в закусочной должно быть выровнено по правому краю. Поведение по умолчанию на меньших экранах, кажется, работает должным образом (полная ширина экрана, действие выравнивается по правому краю экрана), но на планшетах я вижу действие рядом с текстом описания / заголовка с некоторыми отступами. Пример здесь:
Пример положения действия Snackbar
Я видел это на настоящем Nexus 9 (api 25) и 3 эмуляторах (api 22, 23 и 24) как в портретной, так и в альбомной ориентации.
XML-макет для содержимого панели "Снэкбар" в источнике Android ( design_layout_snackbar_include.xml), по-видимому, предполагает, что кнопка действия должна быть выровнена по правому краю, поэтому я немного сбит с толку, почему я этого не вижу.
Я впервые увидел, что это происходит в одном из приложений, которые разрабатывает моя компания, и теперь я создал тестовое приложение, чтобы воспроизвести проблему (которую я использовал для создания примера изображения, связанного ранее). Все, что делает приложение, это отображает "Hello World!" в упражнении, и когда нажата кнопка "Назад", отображается закусочная для подтверждения действия. Моя тестовая активность выглядит так:
package au.com.test.snackbartest;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
}
@Override
public void onBackPressed()
{
Snackbar snackbar = Snackbar.make( findViewById( R.id.activity_main ), "Exit?", Snackbar.LENGTH_LONG );
snackbar.setAction( "EXIT", new View.OnClickListener()
{
@Override
public void onClick( View v )
{
finish();
}
} );
snackbar.show();
}
}
Макет XML выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="au.com.test.snackbartest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
</RelativeLayout>
Использование координатного макета вместо относительного макета не влияет на это поведение. Кроме того, расширение Activity вместо AppCompatActivity также не имеет значения.
Итак, мой вопрос: я как-то неправильно использую снэк-бар, это ошибка в Android, или разработчик просто оставляет за разработчиком полную реализацию с пользовательским макетом снэк-бара?
Любая помощь или разъяснения по этому вопросу будет принята с благодарностью!
1 ответ
Это ошибка, появившаяся в библиотеке поддержки 25.1.0. Возвращение к 25.0.1 приводит к правильному поведению. Оказывается, сообщение об ошибке уже было подано здесь:
Ошибка 231850: текст действия Snackbar не выровнен по правому краю в 25.1.0
Спасибо ianhanniballake за предложение регрессии в обновлении библиотеки поддержки.