2017-01-16 5 views
2

注:「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のバグですか、またはカスタム仕様のスナップバーレイアウトを完全に実装するための設計仕様です。

これに関する助力や説明があれば幸いです。

+0

デザインサポートライブラリにバグがある場合、それは[マテリアルコンポーネントGithubリポジトリ](https://github.com/material-components/material-components-android)に提出する必要があります。私はこれがサポートライブラリのバージョン25.1.0での最近の回帰だと思う。 – ianhanniballake

+0

あなたは正しいと思います。サポートライブラリを25.0.1に戻したときに予想される動作が見られます。バグがhttps://code.google.com/p/android/issues/listに報告されたと思いますか? – phil44

+0

readmeはかなり明確です: "Android用のMaterial ComponentsはAndroidのDesign Supportライブラリ(DesignLib)に基づいており、これはAndroid SDKの一部としてリリースされ続けます.GitHub上で開発が行われ、安定版はAndroidのSDKに同期されますSDKのリリーススケジュール " – ianhanniballake

答えて

2

これは、25.1.0サポートライブラリで導入されたバグです。 25.0.1に戻すと、正しく動作します。判明バグレポートは、すでにここに提出されていました:

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

おかげで、それはサポートライブラリの更新で回帰という提案のためianhanniballake。

関連する問題