From d5ebebf5ceb123c4c1bea7d7112d914a1d3200b7 Mon Sep 17 00:00:00 2001 From: Hung Le Date: Wed, 30 Dec 2020 13:54:43 +0100 Subject: [PATCH] add checked option for list item --- .../bottomsheet/example/ListAcitivty.java | 197 +++++++++++------- example/src/main/res/menu/list.xml | 27 ++- .../com/cocosw/bottomsheet/BottomSheet.java | 6 + library/src/main/res/drawable/bs_ic_check.xml | 9 + library/src/main/res/layout/bs_grid_entry.xml | 2 +- library/src/main/res/layout/bs_list_entry.xml | 27 ++- library/src/main/res/values/attrs.xml | 3 +- library/src/main/res/values/colors.xml | 5 +- library/src/main/res/values/ids.xml | 3 +- library/src/main/res/values/styles.xml | 13 +- 10 files changed, 204 insertions(+), 88 deletions(-) create mode 100644 library/src/main/res/drawable/bs_ic_check.xml diff --git a/example/src/main/java/com/cocosw/bottomsheet/example/ListAcitivty.java b/example/src/main/java/com/cocosw/bottomsheet/example/ListAcitivty.java index fe53b34..467af12 100644 --- a/example/src/main/java/com/cocosw/bottomsheet/example/ListAcitivty.java +++ b/example/src/main/java/com/cocosw/bottomsheet/example/ListAcitivty.java @@ -13,15 +13,15 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; +import com.cocosw.bottomsheet.BottomSheet; +import com.cocosw.bottomsheet.BottomSheetHelper; +import com.cocosw.query.CocoQuery; + import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.drawable.RoundedBitmapDrawable; import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; -import com.cocosw.bottomsheet.BottomSheet; -import com.cocosw.bottomsheet.BottomSheetHelper; -import com.cocosw.query.CocoQuery; - /** * Project: gradle * Created by LiaoKai(soarcn) on 2014/9/22. @@ -45,17 +45,28 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setDisplayShowHomeEnabled(true); q = new CocoQuery(this); setTitle(getIntent().getStringExtra("title")); - String[] items = new String[]{"Janet Perkins", "Mary Johnson", "Peter Carlsson", "Trevor Hansen", "Aaron Bennett"}; + String[] items = new String[]{ + "Janet Perkins", + "Mary Johnson", + "Peter Carlsson", + "Trevor Hansen", + "Aaron Bennett" + }; q.id(R.id.listView) - .adapter(adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, items)) + .adapter(adapter = new ArrayAdapter<>( + this, + android.R.layout.simple_list_item_1, + android.R.id.text1, + items)) .itemClicked(this); } @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == android.R.id.home) + if (item.getItemId() == android.R.id.home) { finish(); + } return super.onOptionsItemSelected(item); } @@ -69,11 +80,23 @@ private Drawable getRoundedBitmap(int imageId) { Bitmap src = BitmapFactory.decodeResource(getResources(), imageId); Bitmap dst; if (src.getWidth() >= src.getHeight()) { - dst = Bitmap.createBitmap(src, src.getWidth() / 2 - src.getHeight() / 2, 0, src.getHeight(), src.getHeight()); + dst = Bitmap.createBitmap( + src, + src.getWidth() / 2 - src.getHeight() / 2, + 0, + src.getHeight(), + src.getHeight()); } else { - dst = Bitmap.createBitmap(src, 0, src.getHeight() / 2 - src.getWidth() / 2, src.getWidth(), src.getWidth()); + dst = Bitmap.createBitmap( + src, + 0, + src.getHeight() / 2 - src.getWidth() / 2, + src.getWidth(), + src.getWidth()); } - RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), dst); + RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create( + getResources(), + dst); roundedBitmapDrawable.setCornerRadius(dst.getWidth() / 2); roundedBitmapDrawable.setAntiAlias(true); return roundedBitmapDrawable; @@ -85,73 +108,103 @@ private Drawable getRoundedBitmap(int imageId) { protected Dialog onCreateDialog(final int position, Bundle args) { switch (action) { case 0: - sheet = new BottomSheet.Builder(this).icon(getRoundedBitmap(R.drawable.icon)).title("To " + adapter.getItem(position)).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder(this).icon(getRoundedBitmap(R.drawable.icon)) + .title("To " + adapter.getItem(position)) + .sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); break; case 1: - sheet = new BottomSheet.Builder(this).sheet(R.menu.noicon).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder(this).sheet(R.menu.noicon) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); break; case 2: - sheet = new BottomSheet.Builder(this).darkTheme().title("To " + adapter.getItem(position)).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder(this).darkTheme() + .title("To " + adapter.getItem(position)) + .sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); break; case 3: - sheet = new BottomSheet.Builder(this).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).grid().build(); + sheet = new BottomSheet.Builder(this).sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .grid() + .build(); break; case 4: - sheet = new BottomSheet.Builder(this, R.style.BottomSheet_StyleDialog).title("To " + adapter.getItem(position)).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder( + this, + R.style.BottomSheet_StyleDialog).title("To " + adapter.getItem(position)) + .sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); break; case 5: - sheet = new BottomSheet.Builder(this).title("To " + adapter.getItem(position)).sheet(R.menu.longlist).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).limit(R.integer.bs_initial_list_row).build(); + sheet = new BottomSheet.Builder(this).title("To " + adapter.getItem(position)) + .sheet(R.menu.longlist) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .limit(R.integer.bs_initial_list_row) + .build(); break; case 6: - sheet = getShareActions("Hello " + adapter.getItem(position)).title("Share To " + adapter.getItem(position)).limit(R.integer.no_limit).build(); + sheet = getShareActions("Hello " + adapter.getItem(position)).title("Share To " + adapter.getItem( + position)).limit(R.integer.no_limit).build(); break; case 7: - sheet = getShareActions("Hello " + adapter.getItem(position)).title("Share To " + adapter.getItem(position)).build(); + sheet = getShareActions("Hello " + adapter.getItem(position)).title("Share To " + adapter.getItem( + position)).build(); break; case 8: - sheet = new BottomSheet.Builder(this).icon(getRoundedBitmap(R.drawable.icon)).title("To " + adapter.getItem(position)).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder(this).icon(getRoundedBitmap(R.drawable.icon)) + .title("To " + adapter.getItem(position)) + .sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); final Menu menu = sheet.getMenu(); menu.getItem(0).setTitle("MenuClickListener"); menu.getItem(0).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - q.alert("OnMenuItemClickListener", "You can set OnMenuItemClickListener for each item"); + q.alert( + "OnMenuItemClickListener", + "You can set OnMenuItemClickListener for each item"); return true; } }); @@ -159,22 +212,27 @@ public boolean onMenuItemClick(MenuItem item) { menu.getItem(2).setEnabled(false); menu.add(Menu.NONE, 23, Menu.NONE, "Fresh meal!"); menu.findItem(23).setIcon(R.drawable.perm_group_user_dictionary); - menu.findItem(23).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - q.toast("Hello"); - return true; - } - }); - menu.setGroupVisible(android.R.id.empty,false); + menu.findItem(23) + .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + q.toast("Hello"); + return true; + } + }); + menu.setGroupVisible(android.R.id.empty, false); break; case 9: - sheet = new BottomSheet.Builder(this, R.style.BottomSheet_CustomizedDialog).grid().title("To " + adapter.getItem(position)).sheet(R.menu.list).listener(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ListAcitivty.this.onClick(adapter.getItem(position), which); - } - }).build(); + sheet = new BottomSheet.Builder(this, R.style.BottomSheet_CustomizedDialog).grid() + .title("To " + adapter.getItem(position)) + .sheet(R.menu.list) + .listener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ListAcitivty.this.onClick(adapter.getItem(position), which); + } + }) + .build(); sheet.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { @@ -188,7 +246,6 @@ public void onDismiss(DialogInterface dialog) { } }); break; - } return sheet; } diff --git a/example/src/main/res/menu/list.xml b/example/src/main/res/menu/list.xml index f260dcc..a85240a 100644 --- a/example/src/main/res/menu/list.xml +++ b/example/src/main/res/menu/list.xml @@ -1,10 +1,25 @@ - - - - - + + + + + - \ No newline at end of file + diff --git a/library/src/main/java/com/cocosw/bottomsheet/BottomSheet.java b/library/src/main/java/com/cocosw/bottomsheet/BottomSheet.java index b534b64..806403b 100755 --- a/library/src/main/java/com/cocosw/bottomsheet/BottomSheet.java +++ b/library/src/main/java/com/cocosw/bottomsheet/BottomSheet.java @@ -280,6 +280,7 @@ public View getView(int position, View convertView, ViewGroup parent) { holder = new ViewHolder(); holder.title = convertView.findViewById(R.id.bs_list_title); holder.image = convertView.findViewById(R.id.bs_list_image); + holder.check = convertView.findViewById(R.id.bs_list_check); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); @@ -303,12 +304,17 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.image.setEnabled(item.isEnabled()); holder.title.setEnabled(item.isEnabled()); + if (holder.check != null) { + holder.check.setVisibility(item.isChecked() ? View.VISIBLE : View.GONE); + } + return convertView; } class ViewHolder { private TextView title; private ImageView image; + private ImageView check; } }; diff --git a/library/src/main/res/drawable/bs_ic_check.xml b/library/src/main/res/drawable/bs_ic_check.xml new file mode 100644 index 0000000..dfc1727 --- /dev/null +++ b/library/src/main/res/drawable/bs_ic_check.xml @@ -0,0 +1,9 @@ + + + + diff --git a/library/src/main/res/layout/bs_grid_entry.xml b/library/src/main/res/layout/bs_grid_entry.xml index 77883fd..5f5d641 100644 --- a/library/src/main/res/layout/bs_grid_entry.xml +++ b/library/src/main/res/layout/bs_grid_entry.xml @@ -17,4 +17,4 @@ android:layout_height="wrap_content" style="@style/BottomSheet.GridItemTitle" android:id="@+id/bs_list_title" /> - \ No newline at end of file + diff --git a/library/src/main/res/layout/bs_list_entry.xml b/library/src/main/res/layout/bs_list_entry.xml index 194fc28..8888380 100644 --- a/library/src/main/res/layout/bs_list_entry.xml +++ b/library/src/main/res/layout/bs_list_entry.xml @@ -1,19 +1,34 @@ - - + + - \ No newline at end of file + android:layout_centerVertical="true" + android:layout_toRightOf="@id/bs_list_image" + android:layout_toLeftOf="@id/bs_list_check" + android:layout_alignWithParentIfMissing="true" + style="@style/BottomSheet.ListItemTitle" + tools:text="Title"/> + + + diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index d552d39..ca11e79 100755 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -6,6 +6,7 @@ + @@ -19,4 +20,4 @@ - \ No newline at end of file + diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml index c9cfaa2..80e67b4 100644 --- a/library/src/main/res/values/colors.xml +++ b/library/src/main/res/values/colors.xml @@ -3,4 +3,7 @@ #1f000000 #1fffffff - \ No newline at end of file + #DD000000 + #DDffffff + + diff --git a/library/src/main/res/values/ids.xml b/library/src/main/res/values/ids.xml index 5db74b5..2cf6034 100644 --- a/library/src/main/res/values/ids.xml +++ b/library/src/main/res/values/ids.xml @@ -2,7 +2,8 @@ + - \ No newline at end of file + diff --git a/library/src/main/res/values/styles.xml b/library/src/main/res/values/styles.xml index bdeb5ce..d971534 100755 --- a/library/src/main/res/values/styles.xml +++ b/library/src/main/res/values/styles.xml @@ -20,6 +20,7 @@ #42000000 @android:color/background_light @color/bs_divider_color + @color/bs_check_color @integer/bs_grid_colum @style/Text.Headline @style/Text.Title @@ -40,6 +41,7 @@ #42ffffff @android:color/background_dark @color/bs_dark_divider_color + @color/bs_dark_check_color @style/BottomSheet.List.Dark @drawable/bs_ic_clear @drawable/bs_ic_more @@ -108,7 +110,6 @@ @@ -144,6 +145,14 @@ 0dp + + - \ No newline at end of file +