首先布局文件
mainactivity的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_above="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--购物车的二级列表-->
<com.dash.a20_net_cart.view.custom.CartExpanableListview
android:id="@+id/expanable_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.dash.a20_net_cart.view.custom.CartExpanableListview>
<!--为你推荐-->
<LinearLayout
android:layout_marginTop="20dp"
android:orientation="vertical"
android:background="#00ff00"
android:layout_width="match_parent"
android:layout_height="500dp">
</LinearLayout>
</LinearLayout>
</ScrollView>
<RelativeLayout
android:visibility="gone"
android:id="@+id/relative_progress"
android:layout_above="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<LinearLayout
android:id="@+id/linear_layout"
android:layout_alignParentBottom="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<CheckBox
android:layout_marginLeft="10dp"
android:button="@null"
android:background="@drawable/check_box_selector"
android:id="@+id/check_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_total"
android:text="合计:¥0.00"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<TextView
android:text="去结算(0)"
android:background="#ff0000"
android:textColor="#ffffff"
android:gravity="center"
android:id="@+id/text_buy"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
</LinearLayout>
</RelativeLayout>
关于购物车的二级列表的布局
父布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:button="@null"
android:background="@drawable/check_box_selector"
android:id="@+id/check_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginLeft="10dp"
android:text="京东自营"
android:id="@+id/text_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
子布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rel"
android:layout_toLeftOf="@+id/text_delete"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:layout_centerVertical="true"
android:id="@+id/check_child"
android:button="@null"
android:background="@drawable/check_box_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_good"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/check_child"
android:layout_marginLeft="10dp"
android:layout_width="80dp"
android:layout_height="80dp" />
<TextView
android:id="@+id/text_title"
android:layout_toRightOf="@+id/image_good"
android:layout_marginLeft="10dp"
android:layout_alignTop="@+id/image_good"
android:maxLines="2"
android:minLines="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_price"
android:layout_toRightOf="@+id/image_good"
android:layout_marginLeft="10dp"
android:layout_alignBottom="@+id/image_good"
android:text="¥99.99"
android:textColor="#ff0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/image_good"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text_jian"
android:text="一"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:id="@+id/text_num"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:id="@+id/text_add"
android:text="十"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
<TextView
android:layout_marginLeft="3dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/rel"
android:layout_alignBottom="@+id/rel"
android:id="@+id/text_delete"
android:background="#ff0000"
android:text="删除"
android:gravity="center"
android:textColor="#ffffff"
android:layout_width="50dp"
android:layout_height="match_parent" />
</RelativeLayout>
activity的代码
public class CartActivity extends AppCompatActivity implements IMainActivity, View.OnClickListener{
private CartExpanableListview expanableListview;
private CartPresenter cartPresenter;
private CheckBox check_all;
private TextView text_total;
private TextView text_buy;
private CartBean cartBean;
private RelativeLayout relative_progress;
private MyAdapter myAdapter;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what == 0){//更改价钱和数量的消息
countPriceBean = (CountPriceBean) msg.obj;
text_total.setText("合计:¥"+ countPriceBean.getPrice());
text_buy.setText("去计算("+ countPriceBean.getCount()+")");
}
}
};
private LinearLayout linear_bottom;
private CountPriceBean countPriceBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cart_activity_layout);
check_all = findViewById(R.id.check_all);
text_total = findViewById(R.id.text_total);
text_buy = findViewById(R.id.text_buy);
expanableListview = findViewById(R.id.expanable_listview);
relative_progress = findViewById(R.id.relative_progress);
linear_bottom = findViewById(R.id.linear_layout);
//去掉默认的指示器
expanableListview.setGroupIndicator(null);
cartPresenter = new CartPresenter(this);
//1.点击全选:选中/未选中...调用适配器中的方法...myAdapter.setIsCheckAll(true);来设置所有的一级和二级是否选中,计算
check_all.setOnClickListener(this);
text_buy.setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
relative_progress.setVisibility(View.VISIBLE);
//请求数据
cartPresenter.getCartData(ApiUtil.cartUrl);
}
@Override
public void getSuccessCartData(CartBean cartBean) {
relative_progress.setVisibility(View.GONE);
this.cartBean = cartBean;
if (cartBean != null){
//显示下面的
linear_bottom.setVisibility(View.VISIBLE);
//初始化数据....根据子条目是否全部选中决定 是否选中组和全选
for (int i= 0;i<cartBean.getData().size();i++){
if (isAllChildInGroupSelected(i)){
cartBean.getData().get(i).setGroupChecked(true);
}
}
//初始化是否全选的数据
changeAllState(isAllGroupChecked());
//设置适配器
myAdapter = new MyAdapter(CartActivity.this, cartBean,handler,relative_progress,cartPresenter);
expanableListview.setAdapter(myAdapter);
//展开
for (int i= 0;i<cartBean.getData().size();i++){
expanableListview.expandGroup(i);
}
//初始化价格
myAdapter.sendPriceAndCount();
}else {
//隐藏下面的全选.... 等
linear_bottom.setVisibility(View.GONE);
//显示去逛逛,,,添加购物车
Toast.makeText(CartActivity.this,"购物车为空,去逛逛",Toast.LENGTH_SHORT).show();
}
}
/**
* 全选是否选中
* @param allGroupChecked
*/
private void changeAllState(boolean allGroupChecked) {
check_all.setChecked(allGroupChecked);
}
/**
* 是否所有的组选中
* @return
*/
private boolean isAllGroupChecked() {
for (int i =0;i<cartBean.getData().size();i++){
if (! cartBean.getData().get(i).isGroupChecked()){//代表一级列表有没选中的
return false;
}
}
return true;
}
/**
* 一个组中所有的子条目是否选中
* @param groupPosition
* @return
*/
private boolean isAllChildInGroupSelected(int groupPosition) {
for (int i= 0;i<cartBean.getData().get(groupPosition).getList().size();i++){
//只要有一个没选中就返回false
if (cartBean.getData().get(groupPosition).getList().get(i).getSelected() ==0){
return false;
}
}
return true;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.check_all:
myAdapter.setAllCheck(check_all.isChecked());
break;
case R.id.text_buy://去结算...试一下创建订单
double price = countPriceBean.getPrice();
Map<String, String> params = new HashMap<>();
params.put("uid","3690");
params.put("price", String.valueOf(price));
OkHttp3Util.doPost(ApiUtil.createCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String json = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(CartActivity.this,json,Toast.LENGTH_SHORT).show();
}
});
}
}
});
break;
}
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IView层下的接口
void getSuccessCartData(CartBean cartBean);
Present中的接口
void getSuccessCartJson(CartBean cartBean);
present层下的中间者
public class CartPresenter implements ICartPresenter {
private final CartModel cartModel;
private IMainActivity iMainActivity;
public CartPresenter(IMainActivity iMainActivity) {
this.iMainActivity = iMainActivity;
cartModel = new CartModel(this);
}
public void getCartData(String cartUrl) {
cartModel.getCartData(cartUrl);
}
@Override
public void getSuccessCartJson(CartBean cartBean) {
//回调给view
iMainActivity.getSuccessCartData(cartBean);
}
}
moudle层
public class CartModel {
private ICartPresenter iCartPresenter;
public CartModel(ICartPresenter iCartPresenter) {
this.iCartPresenter = iCartPresenter;
}
public void getCartData(final String cartUrl) {
//获取数据
OkHttp3Util.doGet(cartUrl, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(cartUrl,e.getLocalizedMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String json = response.body().string();
CommonUtils.runOnUIThread(new Runnable() {
@Override
public void run() {
/*if ("null".equals(json)){
Toast.makeText(DashApplication.getAppContext(),"购物车为空,请添加",Toast.LENGTH_SHORT).show();
}else {*/
Gson gson = new Gson();
CartBean cartBean = gson.fromJson(json, CartBean.class);
//返回数据到主线程
iCartPresenter.getSuccessCartJson(cartBean);
//}
}
});
}
}
});
}
}
Myadapter
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
private CartPresenter cartPresenter;
private RelativeLayout relative_progress;
private Handler handler;
private CartBean cartBean;
private Context context;
private int allSize;
private int ai;
public MyAdapter(Context context, CartBean cartBean, Handler handler, RelativeLayout relative_progress, CartPresenter cartPresenter) {
this.context = context;
this.cartBean = cartBean;
this.handler = handler;
this.relative_progress = relative_progress;
this.cartPresenter = cartPresenter;
}
@Override
public int getGroupCount() {
return cartBean.getData().size();
}
@Override
public int getChildrenCount(int groupPosition) {
return cartBean.getData().get(groupPosition).getList().size();
}
@Override
public Object getGroup(int groupPosition) {
return cartBean.getData().get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return cartBean.getData().get(groupPosition).getList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean b, View view, ViewGroup viewGroup) {
final GroupHolder holder;
if (view == null){
view = View.inflate(context, R.layout.group_item_layout,null);
holder = new GroupHolder();
holder.check_group = view.findViewById(R.id.check_group);
holder.text_group = view.findViewById(R.id.text_group);
view.setTag(holder);
}else {
holder = (GroupHolder) view.getTag();
}
final CartBean.DataBean dataBean = cartBean.getData().get(groupPosition);
//赋值
holder.check_group.setChecked(dataBean.isGroupChecked());
holder.text_group.setText(dataBean.getSellerName());
//点击事件
holder.check_group.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
relative_progress.setVisibility(View.VISIBLE);
size = dataBean.getList().size();//0,1,2
i = 0;
//递归 执行.......根据groupPosition
updateChildInGroup(dataBean,holder.check_group.isChecked());
}
});
return view;
}
/**
* 根据组的状态 更改组中 子条目的状态
* @param dataBean
* @param checked
*/
private int i;
private int size;
private void updateChildInGroup(final CartBean.DataBean dataBean, final boolean checked) {
CartBean.DataBean.ListBean listBean = dataBean.getList().get(i);
//?uid=71&sellerid=1&pid=1&selected=0&num=10
Map<String, String> params = new HashMap<>();
params.put("uid","3690");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(checked? 1:0));
params.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost("https://www.zhaoapi.cn/product/updateCarts", params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
i = i+1;
if (i<size){
updateChildInGroup(dataBean,checked);
}else {
cartPresenter.getCartData(ApiUtil.cartUrl);
}
}
}
});
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
ChildHolder holder;
if (view == null){
view = View.inflate(context, R.layout.child_item_layout,null);
holder = new ChildHolder();
holder.text_add = view.findViewById(R.id.text_add);
holder.text_num = view.findViewById(R.id.text_num);
holder.text_jian = view.findViewById(R.id.text_jian);
holder.text_title = view.findViewById(R.id.text_title);
holder.text_price = view.findViewById(R.id.text_price);
holder.image_good = view.findViewById(R.id.image_good);
holder.check_child = view.findViewById(R.id.check_child);
holder.text_delete = view.findViewById(R.id.text_delete);
view.setTag(holder);
}else {
holder = (ChildHolder) view.getTag();
}
//赋值
final CartBean.DataBean.ListBean listBean = cartBean.getData().get(groupPosition).getList().get(childPosition);
holder.text_num.setText(listBean.getNum()+"");//......注意
holder.text_price.setText("¥"+listBean.getBargainPrice());
holder.text_title.setText(listBean.getTitle());
//listBean.getSelected().....0false,,,1true
//设置checkBox选中状态
holder.check_child.setChecked(listBean.getSelected()==0? false:true);
/*implementation 'com.github.bumptech.glide:glide:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'*/
Glide.with(context).load(listBean.getImages().split("\\|")[0]).into(holder.image_good);
//点击事件
holder.check_child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//点击改变网络上状态,,,,再去请求网络数据,,,刷新界面显示
updateCart(listBean,true,false);
}
});
//加号
holder.text_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
网络加一
updateCart(listBean,false,true);
}
});
//减号
holder.text_jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int num = listBean.getNum();
if (num == 1){
return;
}
//网络减一
updateCart(listBean,false,false);
}
});
//删除
holder.text_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
deleteCart(listBean);
}
});
return view;
}
/**
* 删除购物车
* @param listBean
*/
private void deleteCart(CartBean.DataBean.ListBean listBean) {
relative_progress.setVisibility(View.VISIBLE);
Map<String, String> params = new HashMap<>();
params.put("uid","3690");
params.put("pid", String.valueOf(listBean.getPid()));
OkHttp3Util.doPost(ApiUtil.deleteCartUrl, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
cartPresenter.getCartData(ApiUtil.cartUrl);
}
}
});
}
/**
* 更新购物车的方法.....isUpdateCheck true表示更新选中状态,,,false表示更改数量...isAdd表示数量是否增加,false表示数量减少
* @param listBean
* @param isUpdateCheck
*/
private void updateCart(CartBean.DataBean.ListBean listBean, boolean isUpdateCheck, boolean isAdd) {
relative_progress.setVisibility(View.VISIBLE);
//?uid=71&sellerid=1&pid=1&selected=0&num=10
Map<String, String> params = new HashMap<>();
params.put("uid","3690");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(listBean.getSelected()));
params.put("num", String.valueOf(listBean.getNum()));
if (isUpdateCheck){
//修改....状态
params.put("selected", String.valueOf(listBean.getSelected() == 1?0:1));
}else {
if (isAdd){
params.put("num", String.valueOf(listBean.getNum()+1));
}else {
params.put("num", String.valueOf(listBean.getNum()-1));
}
}
OkHttp3Util.doPost("https://www.zhaoapi.cn/product/updateCarts", params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
//重新请求数据,,,,展示
cartPresenter.getCartData(ApiUtil.cartUrl);
}
}
});
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
/**
* 计算价格
*/
public void sendPriceAndCount() {
double price = 0;
int count = 0;
//通过判断二级列表是否勾选,,,,计算价格数量
for (int i=0;i<cartBean.getData().size();i++){
for (int j = 0;j<cartBean.getData().get(i).getList().size();j++){
if (cartBean.getData().get(i).getList().get(j).getSelected() == 1){
price += cartBean.getData().get(i).getList().get(j).getNum() * cartBean.getData().get(i).getList().get(j).getBargainPrice();
count += cartBean.getData().get(i).getList().get(j).getNum();
}
}
}
CountPriceBean countPriceBean = new CountPriceBean(price, count);
//传给activity进行显示
Message msg = Message.obtain();
msg.what = 0;
msg.obj = countPriceBean;
handler.sendMessage(msg);
}
/**
* 根据全选状态 改变网络上所有的子条目
* @param checked
*/
public void setAllCheck(boolean checked) {
//全部装到一个集合
List<CartBean.DataBean.ListBean> listAll = new ArrayList<>();
for (int i=0;i<cartBean.getData().size();i++){
for (int j = 0;j<cartBean.getData().get(i).getList().size();j++){
listAll.add(cartBean.getData().get(i).getList().get(j));
}
}
//递归 更改每一个子条目
allSize = listAll.size();
ai = 0;
updateAllItem(listAll,checked);
}
/**
* 使用递归 更改所有的子条目状态
* @param list
* @param checked
*/
private void updateAllItem(final List<CartBean.DataBean.ListBean> list, final boolean checked) {
relative_progress.setVisibility(View.VISIBLE);
CartBean.DataBean.ListBean listBean = list.get(ai);
//?uid=71&sellerid=1&pid=1&selected=0&num=10
Map<String, String> params = new HashMap<>();
params.put("uid","3690");
params.put("sellerid", String.valueOf(listBean.getSellerid()));
params.put("pid", String.valueOf(listBean.getPid()));
params.put("selected", String.valueOf(checked ? 1:0));
params.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost("https://www.zhaoapi.cn/product/updateCarts", params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
ai = ai +1;
if (ai <allSize){
updateAllItem(list,checked);
}else {
cartPresenter.getCartData(ApiUtil.cartUrl);
}
}
}
});
}
private class GroupHolder{
CheckBox check_group;
TextView text_group;
}
private class ChildHolder{
CheckBox check_child;
ImageView image_good;
TextView text_title;
TextView text_price;
TextView text_jian;
TextView text_num;
TextView text_add;
TextView text_delete;
}
}
DashApplication
public class DashApplication extends Application {
private static Context context;
private static Handler handler;
private static int mainId;
public static boolean isLoginSuccess;//是否已经登录的状态
@Override
public void onCreate() {
super.onCreate();
//关于context----http://blog.csdn.net/lmj623565791/article/details/40481055
context = getApplicationContext();
//初始化handler
handler = new Handler();
//主线程的id
mainId = Process.myTid();
}
/**
* 对外提供了context
* @return
*/
public static Context getAppContext() {
return context;
}
/**
* 得到全局的handler
* @return
*/
public static Handler getAppHanler() {
return handler;
}
/**
* 获取主线程id
* @return
*/
public static int getMainThreadId() {
return mainId;
}
}
在bean类中加上
public boolean isGroupChecked() {
return isGroupChecked;
}
public void setGroupChecked(boolean groupChecked) {
isGroupChecked = groupChecked;
}
private boolean isGroupChecked;//一级列表是否选中
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class CountPriceBean implements Serializable{
private double price;
private int count;
private List<Integer> integers;
public List<Integer> getIntegers() {
return integers;
}
public void setIntegers(List<Integer> integers) {
this.integers = integers;
}
public CountPriceBean(double price, int count, List<Integer> integers) {
this.price = price;
this.count = count;
this.integers = integers;
}
public CountPriceBean(double price, int count) {
this.price = price;
this.count = count;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
数据接口
public class ApiUtil {
public static final String cartUrl = "https://www.zhaoapi.cn/product/getCarts?uid=3690";
public static final String addCartUrl = "https://www.zhaoapi.cn/product/addCart";//uid,pid
public static final String deleteCartUrl = "https://www.zhaoapi.cn/product/deleteCart";//uid,pid
//?uid=71&sellerid=1&pid=1&selected=0&num=10
public static final String updateCartUrl = "https://www.zhaoapi.cn/product/updateCarts";
public static final String createCartUrl = "https://www.zhaoapi.cn/product/createOrder";
}
CartExpanableListview
public class CartExpanableListview extends ExpandableListView {
public CartExpanableListview(Context context) {
super(context);
}
public CartExpanableListview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CartExpanableListview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
}
一些在drawable中的XML
bian_kuang_line
<solid android:color="#ffffff" />
<stroke
android:width="0.1dp"
android:color="#000000" />
</shape>
check_box_selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/shopping_cart_checked"/>
<item android:state_checked="false" android:drawable="@drawable/shopping_cart_none_check"/>
<item android:drawable="@drawable/shopping_cart_none_check"/>
</selector>