注:「Snackbarの動作を右揃えにする」という既存の質問を見たことがありますが、これは特に問題にはなりません。タブレットでAndroidスナックバーの動作が正しく調整されていない
材料設計仕様によれば、スナックバー内の動作は、右端/端揃えにする必要があります。小さな画面でのデフォルトの動作は期待通りに機能するようです(画面の全幅、アクションは画面の右側に揃えられます)。しかし、タブレットでは、パッディングのある説明/タイトルテキストのすぐ隣にアクションが表示されます。ここでは例:
Snackbar action position example
私は、縦向きと横向きの両方で本当のNexus 9の(API 25)、および3つのエミュレータ(API 22、23、および24)でこれを見てきました。
Androidソース(design_layout_snackbar_include.xml)のsnackbarコンテンツのレイアウトxmlは、アクションボタンが右揃えであることを示唆しているようですが、なぜ私はこれを見ていないのか困惑しています。
私は、私の会社が開発しているアプリケーションの1つでこれが最初に起こったことを知りました。私は今問題を再現するテストアプリを作成しました。すべてのアプリは、 "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>
この動作には影響を与えません相対レイアウトの代わりに、コーディネーターのレイアウトを使用します。また、AppCompatActivityの代わりにActivityを拡張することでも違いはありません。
私はスナックバーをどういう形で使っているのですか?これはAndroidのバグですか、またはカスタム仕様のスナップバーレイアウトを完全に実装するための設計仕様です。
これに関する助力や説明があれば幸いです。
デザインサポートライブラリにバグがある場合、それは[マテリアルコンポーネントGithubリポジトリ](https://github.com/material-components/material-components-android)に提出する必要があります。私はこれがサポートライブラリのバージョン25.1.0での最近の回帰だと思う。 – ianhanniballake
あなたは正しいと思います。サポートライブラリを25.0.1に戻したときに予想される動作が見られます。バグがhttps://code.google.com/p/android/issues/listに報告されたと思いますか? – phil44
readmeはかなり明確です: "Android用のMaterial ComponentsはAndroidのDesign Supportライブラリ(DesignLib)に基づいており、これはAndroid SDKの一部としてリリースされ続けます.GitHub上で開発が行われ、安定版はAndroidのSDKに同期されますSDKのリリーススケジュール " – ianhanniballake