アプリにCardView
を実装して、すべてのListView
アイテムがCardView
sになるようにします。 ListView
アイテムXMLをCardView
にカプセル化するのと同じくらい簡単ですか?
はい。 CardView
の下には、単純なFrameLayout
があり、これをListView
(またはRecyclerView
)に展開できます。
以下に例を示します。
<Android.support.v7.widget.CardView
Android:id="@+id/ly_root"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#FEFEFE"
Android:layout_margin="8dp"
app:cardCornerRadius="4dp">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<ImageView
Android:id="@+id/iv_cover"
Android:layout_width="wrap_content"
Android:layout_height="160dp"
Android:scaleType="centerCrop"
Android:src="@drawable/placeholder"/>
...
</LinearLayout>
</Android.support.v7.widget.CardView>
そして、実際に動作している例は次のとおりです。
もちろん、カスタムアダプタを実装してそれらを接続する必要があります。しかし、これはカスタムListView
アイテムと同じです。それについて特別なことは何もありません。
他の誰かがこの質問に出くわした場合、他の答えは正しいですが、CardView
をFrameLayout内に配置し、ListView
の仕切りを透明にする必要があります。 CardView
の内部で使用しない限り、FrameLayout
のエレベーションおよびマージン属性は機能しません。
CardViewをRecyclerViewとともに使用することをお勧めします。以下に例を示します。
activity_main.xml(recyclerviewを含む)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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.support.v7.widget.RecyclerView
Android:id="@+id/recyclerview"
Android:layout_height="match_parent"
Android:layout_width="match_parent"/>
</LinearLayout>
cardview.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.CardView
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
card_view:cardCornerRadius="4dp"
Android:layout_margin="10dp">
<TextView
Android:id="@+id/text_cardview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="20dp" />
</Android.support.v7.widget.CardView>
buid.gradle(Module:app)
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.3.0'
compile 'com.Android.support:cardview-v7:23.0.+'
compile 'com.Android.support:recyclerview-v7:23.0.+'
}
RecyclerViewAdapter.Java
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
public ArrayList<String> myValues;
public RecyclerViewAdapter (ArrayList<String> myValues){
this.myValues= myValues;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View listItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview.xml, parent, false);
return new MyViewHolder(listItem);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.myTextView.setText(myValues.get(position));
}
@Override
public int getItemCount() {
return myValues.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private TextView myTextView;
public MyViewHolder(View itemView) {
super(itemView);
myTextView = (TextView)itemView.findViewById(R.id.text_cardview);
}
}
}
MainActivity.Java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> myValues = new ArrayList<String>();
//Populate the ArrayList with your own values
myValues.add("KitKat");
myValues.add("Lollipop");
myValues.add("Marshmallow");
RecyclerViewAdapter adapter = new RecyclerViewAdapter(myValues);
RecyclerView myView = (RecyclerView)findViewById(R.id.recyclerview);
myView.setHasFixedSize(true);
myView.setAdapter(adapter);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
myView.setLayoutManager(llm);
}
}
詳細については、このチュートリアルを参照してください: ガイドAndroid RecyclerView and CardView
はい、ListViewのリストアイテムにCardView
を使用できます。ただし、ListViewは更新されたバージョンであるため、ListViewの代わりにRecyclerViewを使用することをお勧めします。 CardViewを使用するRecyclerViewの this を確認します。