5

押された状態のリップルをスピナーで動作させることができないようです。個々のドロップダウン項目にはリップルがありますが、スピナー自体はありません。これは予期された動作ではないかと思いましたが、マテリアル デザイン ガイドラインのこのアニメーションは、オプション ドロップダウンが表示される前に、押された状態の波紋のあるスピナーを明確に示しています。

https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0B3321sZLoP_HTS1LdnhrTl9TRzg/components-buttons-otherbuttons-060203_MobileDropdowns_xhdpi_006.webm

4

6 に答える 6

2

で新規作成しましたSpinnerが、ごActivity説明のとおり、v7 互換ライブラリRippleDrawableの使用や Android 5.0 以降には適用されません。Spinnerこれは私にとって驚くべきことではありません。Google は独自の設計を実装できないことがよくあります。

影響を与えるためにRippleDrawable、 res/values-v21/ にを作成し、それSpinnerを usingの背景に設定するだけでしたspinner.setBackgroundResource(R.drawable.spinner_background);。これをテーマに設定することもできると思います。

于 2015-11-03T05:47:33.553 に答える
0

これらの Spinner プロパティを xml で設定します

android:background="@drawable/ripple_effect"
android:dropDownSelector="@drawable/ripple_effect"

ripple_effect.xml は次のようになります

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight" >

    <item android:id="@android:id/mask">
        <shape android:shape="rectangle" >
           <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>
于 2015-11-03T06:55:25.137 に答える
0

Github にMaterial Ripple Layoutというライブラリがあります。このライブラリは、Lollipop 以前のデバイスと Lollipop デバイスをサポートしています。また、波紋の独自の色を作成することもできます。使用法は次のとおりです。

Spinner spinner = (Spinner) findViewById(R.id.spinner);
MaterialRippleLayout.on(spinner)
       .rippleColor(Color.BLACK)
       .create();

しかし、私はそのライブラリを使用しません。Spinnerサポート ライブラリ rev 23.0.1 で導入された のデフォルトの ripple を使用してcompile 'com.android.support:appcompat-v7:23.0.1'build.gradleますapp

したがって、Spinnerレイアウトの完全なコードは次のとおりです。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:dropDownVerticalOffset="@dimen/dropDown_spinner"
        style="@style/SpinnerStyle"/> <!-- apply the ripple style -->

</RelativeLayout>

スタイルは次のように定義されていres/values/styles.xmlます。

<style name="SpinnerStyle" parent="Widget.AppCompat.Light.Spinner.DropDown.ActionBar">
    <item name="android:background">?android:selectableItemBackground</item>
    <item name="android:dropDownSelector">?android:selectableItemBackground</item>
    <item name="android:divider">@null</item>
    <item name="overlapAnchor">true</item>
</style>

その後、波及効果は期待どおりに機能するはずです。

于 2015-11-03T07:17:07.853 に答える
0

以下のコードがスピナーのリップル効果に何らかの意味を与えることを願っています.

ripple_spinner.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <ripple android:color="?android:attr/colorControlHighlight">
            <item>
                <shape>
                    <solid android:color="@android:color/white" />
                </shape>
            </item>
        </ripple>
    </item>

あなたの XML :-

あなたのアクティビティ.xml

<Spinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:dropDownSelector="@drawable/ripple_spinner"
    android:popupBackground="@drawable/popup_spinner_item_background"
    />

以下は、ドロップダウンの背景を変更します。

popup_spinner_item_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
    <corners android:radius="2dp" />
    <solid android:color="@android:color/white" />
</shape>

res/values/styles.xml で:-

スタイル.xml

<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!--Workaround for the Android bug-->
        <item name="android:dropDownListViewStyle">@style/Theme.MyListView</item>
    </style>

    <style name="Theme.MyListView" parent="@android:style/Widget.Material.ListView.DropDown">
        <item name="android:listSelector">@drawable/spinner_ripple</item>
    </style>
</resources>

それがあなたを助けることを願っています。

于 2015-11-04T11:09:51.503 に答える
0

背景はリップル可能ではないため、Spinner にはリップルはありません。レイアウトで次のようにしselectableItemBackgroundBorderlessます(https://developer.android.com/training/material/animations.html#Touch):

  1. a 0-width Spinner、下向きの矢印の背景を削除します (使用し@nullても問題ありません)。通常のスピナーの背景を削除しても、リッパーがないため、Google カレンダーのように TextView と ImageView を使用します。

  2. a TextView+ ImageView(下向き矢印)

ユーザーが TextView/ImageView をクリックすると、リップル アニメーションが表示され、Spinner が呼び出されます。performClick. そして、私はそれを通常のドロップダウンにしたいので、スピナーが呼び出さないので、0幅のスピナーを作ります。goneonItemSelected

非表示のアダプターの場合、次のようになります。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    ((TextView) view).setText("");
    return view;
}

レイアウト クリック リスナー:

layout.setOnClickListener(() -> {
    spinner.performClick();
});

スピナー アイテム リスナーの場合:

spinner.setOnItemSelectedListener(() -> {
    // this requires spinner's visiblity is not gone
});
于 2016-07-24T12:28:42.697 に答える
0

このクールなライブラリを使用して、いくつかのビューに波及効果を適用しています。XML ファイルで任意のビューをラップでき、波及効果が適用されるため、気に入っています。

https://github.com/balysv/material-ripple

それが役に立てば幸い。

于 2015-11-03T17:15:35.353 に答える