Android snackbar Action 在平板电脑上不正确对齐

标签 android tablet android-snackbar snackbar

注意:我已经看到标题为“Align Snackbar's Action on the right”的现有问题,但这并没有解决我的特定问题。

根据 Material 设计规范, snackbar 中的操作应右/端对齐。较小屏幕上的默认行为似乎按预期工作(全屏宽度, Action 与屏幕右侧对齐),但在平板电脑上我看到 Action 紧挨着描述/标题文本并带有一些填充。这里的例子:

Snackbar action position example

我在真实的 Nexus 9 (api 25) 和 3 个模拟器(api 22、23 和 24)上看到过纵向和横向的情况。

Android 源代码 (design_layout_snackbar_include.xml) 中 snackbar 内容的布局 xml 似乎建议操作按钮应该右/端对齐所以我有点困惑为什么我没有看到这个。

我第一次看到这种情况发生在我公司正在开发的一个应用程序中,现在我制作了一个测试应用程序来重现这个问题(我用它来生成前面链接的示例图像)。该应用程序所做的只是显示“Hello World!”在一个 Activity 中,当按下后退按钮时,会显示一个 snackbar 以确认该操作。我的测试 Activity 如下所示:

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 也没有任何区别。

所以我的问题是,我是否以某种方式错误地使用了 snackbar,这是 Android 中的错误,还是设计规范只是留给开发人员使用自定义 snackbar 布局来完全实现?

如有任何帮助或澄清,我们将不胜感激!

最佳答案

这是 25.1.0 支持库引入的错误。恢复到 25.0.1 会导致正确的行为。原来这里已经提交了错误报告:

Issue 231850: Snackbar Action Text Not Right-Aligned in 25.1.0

感谢 ianhanniballake 建议将其作为支持库更新中的回归。

关于Android snackbar Action 在平板电脑上不正确对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667745/

相关文章:

android - Flutter:Web View 安全来源

android - 适用于手机和平板电脑的应用程序

asp.net - asp.net中平板电脑的设计考虑

android - Activity 启动时如何显示 Snackbar?

Android JNI - 如何从共享对象导入函数

android - 多行 TextView

java - 调色板颜色缓存的单例实例

javascript - 使用平板电脑/手机触发电话字段中的 "continue"按钮

覆盖 Google Pixel 中控制按钮的 Android Snackbar

java - 无法设置 SnackBar 底部边距