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 за предложение регрессии в обновлении библиотеки поддержки.

Другие вопросы по тегам