これをNexus 5で実行しています。CardViewのコードの一部は次のとおりです。
CardView cardView = new CardView(getActivity());
cardView.setRadius(4);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 400);
lp.setMargins(32, 16, 32, 16);
cardView.setLayoutParams(lp);
cardView.setContentPadding(50, 50, 50, 50);
...
cardView.setForeground(selectedItemDrawable);
そして、selectedItemDrawable を取得する方法は次のとおりです。
int[] attrs = new int[] { R.attr.selectableItemBackground };
TypedArray ta = getActivity().obtainStyledAttributes(attrs);
selectedItemDrawable = ta.getDrawable(0);
ta.recycle();
カードをタップすると、selectedItemDrawable に付属するはずのリップルが表示されません (フォアグラウンド セットがない場合とまったく同じように見えます)。私は 5.0 を実行しているので、これは奇妙に思えます。appcompat のドキュメントでは、Lollipop 以前のデバイスでは動作しないとしか書かれていません。なぜこれが事実なのか誰か知っていますか?最小 API レベルは 16 で、ターゲットは 21 です。