34

昨日、開発者向けの Android M Preview がリリースされました。いつものように、多くの驚くべき新機能が導入されています。その一つであることに気が付きSnackbarました。

についてのドキュメントを読んSnackbarだところ、Snackbar が Android Design Support Library のライブラリにあり、その絶対パスが であることがわかりましたandroid.support.design.widget.Snackbar

そしてドキュメントには次のように書かれています。

スナックバーは、操作に関する簡単なフィードバックを提供します。モバイルでは画面の下部に、大型のデバイスでは左下に短いメッセージが表示されます。スナックバーは画面上の他のすべての要素の上に表示され、一度に表示できるのは 1 つだけです。

タイムアウトの後、または画面上の他の場所でのユーザー操作の後、特に新しいサーフェスまたはアクティビティを呼び出す操作の後、それらは自動的に消えます。スナックバーは画面外にスワイプできます。

では、またはのSnackbarように動作しますか? Snackbars をレイアウト ファイルで使用できますか? プログラムでどのように使用できますか?ToastDialog

PS:

  • Snackbar の使用に関するサンプルを歓迎します。
  • Android Design Support Library は新しいサポート ライブラリです。誰かこのライブラリの詳細を教えてもらえますか?
4

8 に答える 8

54

新しいものは Android-M を必要としませんSnackbar

これは新しい設計サポート ライブラリ内にあり、すぐに使用できます。

SDK を更新して、コードにこの依存関係を追加するだけです。

compile 'com.android.support:design:22.2.0'

次のようなコードを使用できます。

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", null)
        .show();

トーストのようなものです。

ここに画像の説明を入力

アクションを割り当てるには、を設定する必要がありますOnClickListener

Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG)
        .setAction("Action", myOnClickListener)
        .show();

背景色を変更したい場合は、次のようなものを使用できます。

 Snackbar snackbar = Snackbar.make(view, "Here's a Snackbar",       
                   Snackbar.LENGTH_LONG);
 View snackBarView = snackbar.getView();
 snackBarView.setBackgroundColor(colorId);
 snackbar.show();

ここに画像の説明を入力

スワイプして閉じるジェスチャーや、FAB がスナックバーを上にスクロールするなどの組み込み機能が必要な場合は、単にCoordinatorLayoutビュー階層に を追加します。

于 2015-05-29T06:45:58.490 に答える
20

についてはSnackbar、 のように動作しますToastが、 とは異なりToastます。スナックバーは画面の下部に表示され、オプションの単一アクションのテキストが含まれています。指定した時間が経過すると、アニメーションが画面から消えて自動的にタイムアウトします。さらに、ユーザーはタイムアウト前にそれらをスワイプして消すことができます。これは、もう 1 つの軽量なフィードバック メカニズムであるトーストよりもはるかに強力です。

次のようにプログラムで使用できます。

Snackbar snackbar = Snackbar
  .make(parentLayout, R.string.snackbar_text, Snackbar.LENGTH_LONG)
  .setAction(R.string.snackbar_action, myOnClickListener);
snackbar.setActionTextColor(Color.CYAN);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.YELLOW);//change Snackbar's background color;
TextView textView = (TextView)snackbarView .findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLUE);//change Snackbar's text color;
snackbar.show(); // Don’t forget to show!

make()-のメソッドでビューを使用すると、ビューがSnackbarその下部に固定されていることを確認しようとすることに注意してください。

さらに、Android Design Support LibraryAndroid 2.1+ (API 7+)に使用され、ナビゲーション ドロワー ビューテキスト編集用のフローティング ラベルフローティング アクション ボタンスナックバータブなどを備えています。

ナビゲーション ビュー

ナビゲーション ドロワーは、アプリ内のアイデンティティとナビゲーションの重要な焦点になる可能性があり、ここでのデザインの一貫性は、特に初めてのユーザーにとって、アプリの操作のしやすさに大きな違いをもたらす可能性があります。NavigationViewでは、ナビゲーション ドロワーに必要なフレームワークと、メニュー リソースを介してナビゲーション アイテムを拡張する機能を提供することで、これを容易にします。

次のように使用できます。

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    <!-- your content layout -->
    <android.support.design.widget.NavigationView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/drawer_header"
            app:menu="@menu/drawer"/>
</android.support.v4.widget.DrawerLayout>

引き出しメニューに関しては、次のようになります。

<group android:checkableBehavior="single">
    <item
        android:id="@+id/navigation_item_1"
        android:checked="true"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_item_1"/>
    <item
        android:id="@+id/navigation_item_2"
        android:icon="@drawable/ic_android"
        android:title="@string/navigation_item_2"/>
</group>

また:

<item
    android:id="@+id/navigation_subheader"
    android:title="@string/navigation_subheader">
    <menu>
        <item
            android:id="@+id/navigation_sub_item_1"
            android:icon="@drawable/ic_android"
            android:title="@string/navigation_sub_item_1"/>
        <item
            android:id="@+id/navigation_sub_item_2"
            android:icon="@drawable/ic_android"
            android:title="@string/navigation_sub_item_2"/>
    </menu>
</item>

setNavigationItemSelectedListener() を使用して OnNavigationItemSelectedListener を設定することにより、選択したアイテムのコールバックを取得します。これにより、クリックされた MenuItem が提供され、選択イベントの処理、チェック済みステータスの変更、新しいコンテンツのロード、プログラムによるドロワーのクローズ、または必要なその他のアクションが可能になります。

テキスト編集用のフローティング ラベル

謙虚な人でも、EditTextマテリアル デザインには改善の余地があります。をEditText単独で使用すると、最初の文字が入力された後にヒント テキストが非表示になりますが、 でラップできるようになりましたTextInputLayout。これにより、ヒント テキストが の上のフローティング ラベルEditTextになり、ユーザーが入力内容のコンテキストを失うことがなくなります。ヒントを表示するだけでなく、EditTextを呼び出して の下にエラー メッセージを表示することもできますsetError()

フローティング アクション ボタン

フローティング アクション ボタンは、インターフェイスの主要なアクションを示す丸いボタンです。Design ライブラリは、テーマFloatingActionButtonの を使用してデフォルトで色付けされた、単一の一貫した実装を提供します。colorAccent

FloatingActionButtonextendsとして、または内に表示されるアイコンを制御するなどの方法のいずれかをImageView使用します。android:srcsetImageDrawable()FloatingActionButton

タブ

トップ レベルのナビゲーション パターンは、コンテンツのさまざまなグループを整理するために一般的に使用されます。Design ライブラリTabLayoutは、ビューの幅がすべてのタブ間で均等に分割される固定タブと、タブが均一なサイズではなく、水平方向にスクロールできるスクロール可能なタブの両方を実装しています。

タブはプログラムで追加できます。

TabLayout tabLayout = ...;
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));

タブ間の水平ページングに を使用する場合はViewPager、 から直接タブを作成し、 をPagerAdapter’s getPageTitle()使用して 2 つを接続できますsetupWithViewPager()。これにより、タブ選択イベントViewPagerによって が更新され、ページ変更によって選択されたタブが更新されます。

CoordinatorLayout とアプリ バー

デザイン ライブラリはCoordinatorLayout、子ビュー間のタッチ イベントに対する追加レベルの制御を提供するレイアウトである を導入します。これは、デザイン ライブラリの多くのコンポーネントが利用するものです。AppBarLayout を使用してみると、ScrollingViewBehaviorでマークされた兄弟ビューのスクロール イベントに、自分Toolbarのビューと他のビュー (によって提供されるタブなど) が反応できるようになります。TabLayoutしたがって、次のようなレイアウトを作成できます。

<android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

     <! -- Your Scrollable View -->
    <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
   <android.support.v7.widget.Toolbar
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">

        <android.support.design.widget.TabLayout
                  ...
                  app:layout_scrollFlags="scroll|enterAlways">
     </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

これで、ユーザーが をスクロールするRecyclerViewと、AppBarLayoutは子のスクロール フラグを使用してこれらのイベントに応答し、子の開始 (画面上でのスクロール) および終了 (画面外へのスクロール) 方法を制御できます。

デザイン ライブラリ、AppCompat、およびすべての Android サポート ライブラリは、すべてをゼロから構築することなく、モダンで見栄えの良い Android アプリを構築するために必要なビルディング ブロックを提供する重要なツールです。

于 2015-05-31T03:32:22.257 に答える
0

スナックバーはアイコンも表示できます。

例: ネットワークがない場合、このようにスナックバーを表示できます (Gmail と同じように)。

SpannableStringBuilder builder = new SpannableStringBuilder();
    builder.append(" ").setSpan(new ImageSpan(this, R.drawable.snackbar_icon), 0, 1, 0);
    builder.append(" No Network Available");
    Snackbar snackBar = Snackbar.make(findViewById(R.id.co_ordinate), builder, Snackbar.LENGTH_LONG);
    snackBar.setAction("RETRY", new View.OnClickListener() {
        @Override
        public void onClick(View v) { //Retry Code here 

        }
    });
    snackBar.show();
于 2016-04-13T14:34:25.737 に答える
0

コーディングを設定しました

Snackbar snackbar = Snackbar
        .make(getView(), text, Snackbar.LENGTH_INDEFINITE);

View sbView = Global.alert.getView();
sbView.setBackgroundColor(0xFF000000);

TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.WHITE);
textView.setTextSize(30);

Global.alert.show();
于 2015-11-26T05:36:30.717 に答える
0

スナックバーのテキストの色と背景を変更することもできます

 Snackbar snackbar = Snackbar.make(view, "Text",
                            Snackbar.LENGTH_LONG);
                    View snackBarView = snackbar.getView();
                    TextView tv = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text);
                    tv.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.colorAccent));
                    snackBarView.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimaryDark));
                    snackbar.show();
于 2016-07-22T08:36:41.100 に答える