Commit 283a867e authored by zhang_z's avatar zhang_z

提交代码;

parent 5bd4bd46
...@@ -58,8 +58,9 @@ public class C { ...@@ -58,8 +58,9 @@ public class C {
} }
public static final class URL { public static final class URL {
// public static final String BASE_URL = "http://192.168.254.96:8080/";
public static final String BASE_URL = "http://demo.51zzd.cn:8080/"; public static final String BASE_URL = "http://demo.51zzd.cn:8080/";
public static final String TEMP_PAY_URL = "http://demo.51zzd.cn/";
private static final String PKG = "/tk/"; private static final String PKG = "/tk/";
public final class SYNCHRONOUS { public final class SYNCHRONOUS {
...@@ -407,6 +408,9 @@ public class C { ...@@ -407,6 +408,9 @@ public class C {
public static final String query = ROOT_URL + "query"; public static final String query = ROOT_URL + "query";
} }
public final class TEMP_PAY {
public static final String pay = "pay/payc/pay";
}
} }
......
...@@ -2,6 +2,7 @@ package com.xingdata.zzdpos.api; ...@@ -2,6 +2,7 @@ package com.xingdata.zzdpos.api;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.xingdata.zzdpos.C;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -16,7 +17,6 @@ import okhttp3.OkHttpClient; ...@@ -16,7 +17,6 @@ import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import com.xingdata.zzdpos.C;
/** /**
...@@ -87,6 +87,4 @@ class Api { ...@@ -87,6 +87,4 @@ class Api {
service = retrofit.create(ApiService.class); service = retrofit.create(ApiService.class);
} }
} }
...@@ -21,7 +21,7 @@ import retrofit2.Retrofit; ...@@ -21,7 +21,7 @@ import retrofit2.Retrofit;
public class ConverterFactory extends Converter.Factory { public class ConverterFactory extends Converter.Factory {
static ConverterFactory create() { public static ConverterFactory create() {
return new ConverterFactory(); return new ConverterFactory();
} }
......
package com.xingdata.zzdpos.api;
import android.support.annotation.NonNull;
import com.xingdata.zzdpos.C;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
public class Jni {
JniService service;
private static class JniHolder {
private static final Jni INSTANCE = new Jni();
}
static Jni getInstance() {
return Jni.JniHolder.INSTANCE;
}
private Jni() {
//LOG
HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor();
logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//HEAD
Interceptor headInterceptor = (chain) -> chain.proceed(
chain.request().newBuilder()
.addHeader("User-Agent", C.HEAD.USER_AGENT)
.addHeader("Connection", C.HEAD.CONNECTION)
.addHeader("Content-Type", C.HEAD.CONTENT_TYPE)
.addHeader("Content-Language", C.HEAD.CONTENT_LANGUAGE)
.addHeader("Cache-Control", C.HEAD.CACHE_CONTROL)
.build());
//COOKIE
CookieJar cookieJar = new CookieJar() {
private HashMap<String, Cookie> cookieMap = new HashMap<>();
@Override
public void saveFromResponse(@NonNull HttpUrl url, @NonNull List<Cookie> cookies) {
for (int i = 0; i < cookies.size(); i++) {
cookieMap.put(cookies.get(i).name(), cookies.get(i));
}
}
@Override
public List<Cookie> loadForRequest(@NonNull HttpUrl url) {
return new ArrayList<>(cookieMap.values());
}
};
//Client
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(C.API_BUILDER.READ_TIMEOUT, TimeUnit.MILLISECONDS)
.connectTimeout(C.API_BUILDER.CONNECT_TIMEOUT, TimeUnit.MILLISECONDS)
.addInterceptor(headInterceptor)
.addInterceptor(logInterceptor)
.cookieJar(cookieJar)
.build();
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ConverterFactory.create())
.baseUrl(C.URL.TEMP_PAY_URL)
.build();
service = retrofit.create(JniService.class);
}
}
package com.xingdata.zzdpos.api;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class JniFactory {
public static class Settle {
public static Observable<Pay.Response> pay(String str) {
return Jni.getInstance().service.pay(str)
.onErrorReturn(new ErrorFilter<>())
.map(new ResultFilter<>())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}
}
package com.xingdata.zzdpos.api;
import com.xingdata.zzdpos.C;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
interface JniService {
@GET(C.URL.TEMP_PAY.pay)
Observable<HttpMessage<Pay.Response>> pay(@Query("para") String str);
}
package com.xingdata.zzdpos.api;
import com.alibaba.fastjson.annotation.JSONField;
public class Pay {
public static class Request {
private String OrderType;
private String PayChannelType;
private String DeviceType;
private String Agent_id;
private String Mch_id;
private String Ter_id;
private String OrderNo;
private String PosTrace;
private String OrderDateTime;
private String CurrencyType;
private String OrderAmt;
private String OrderName;
private String ChannelAuthCode;
private String Key;
private String NotifyUrl;
@JSONField(name = "OrderType")
public String getOrderType() {
return OrderType;
}
@JSONField(name = "OrderType")
public void setOrderType(String orderType) {
OrderType = orderType;
}
@JSONField(name = "PayChannelType")
public String getPayChannelType() {
return PayChannelType;
}
@JSONField(name = "PayChannelType")
public void setPayChannelType(String payChannelType) {
PayChannelType = payChannelType;
}
@JSONField(name = "DeviceType")
public String getDeviceType() {
return DeviceType;
}
@JSONField(name = "DeviceType")
public void setDeviceType(String deviceType) {
DeviceType = deviceType;
}
@JSONField(name = "Agent_id")
public String getAgent_id() {
return Agent_id;
}
@JSONField(name = "Agent_id")
public void setAgent_id(String agent_id) {
Agent_id = agent_id;
}
@JSONField(name = "Mch_id")
public String getMch_id() {
return Mch_id;
}
@JSONField(name = "Mch_id")
public void setMch_id(String mch_id) {
Mch_id = mch_id;
}
@JSONField(name = "Ter_id")
public String getTer_id() {
return Ter_id;
}
@JSONField(name = "Ter_id")
public void setTer_id(String ter_id) {
Ter_id = ter_id;
}
@JSONField(name = "OrderNo")
public String getOrderNo() {
return OrderNo;
}
@JSONField(name = "OrderNo")
public void setOrderNo(String orderNo) {
OrderNo = orderNo;
}
@JSONField(name = "PosTrace")
public String getPosTrace() {
return PosTrace;
}
@JSONField(name = "PosTrace")
public void setPosTrace(String posTrace) {
PosTrace = posTrace;
}
@JSONField(name = "OrderDateTime")
public String getOrderDateTime() {
return OrderDateTime;
}
@JSONField(name = "OrderDateTime")
public void setOrderDateTime(String orderDateTime) {
OrderDateTime = orderDateTime;
}
@JSONField(name = "CurrencyType")
public String getCurrencyType() {
return CurrencyType;
}
@JSONField(name = "CurrencyType")
public void setCurrencyType(String currencyType) {
CurrencyType = currencyType;
}
@JSONField(name = "OrderAmt")
public String getOrderAmt() {
return OrderAmt;
}
@JSONField(name = "OrderAmt")
public void setOrderAmt(String orderAmt) {
OrderAmt = orderAmt;
}
@JSONField(name = "OrderName")
public String getOrderName() {
return OrderName;
}
@JSONField(name = "OrderName")
public void setOrderName(String orderName) {
OrderName = orderName;
}
@JSONField(name = "ChannelAuthCode")
public String getChannelAuthCode() {
return ChannelAuthCode;
}
@JSONField(name = "ChannelAuthCode")
public void setChannelAuthCode(String channelAuthCode) {
ChannelAuthCode = channelAuthCode;
}
@JSONField(name = "Key")
public String getKey() {
return Key;
}
@JSONField(name = "Key")
public void setKey(String key) {
Key = key;
}
@JSONField(name = "NotifyUrl")
public String getNotifyUrl() {
return NotifyUrl;
}
@JSONField(name = "NotifyUrl")
public void setNotifyUrl(String notifyUrl) {
NotifyUrl = notifyUrl;
}
}
public class Response {
private int OrderType;
private String ResponseCode;
private String ResponseMsg;
private String TradeStatus;
private String Mch_id;
private String Ter_id;
private String OrderNo;
private String tn;
private String paySign;
public int getOrderType() {
return OrderType;
}
public void setOrderType(int orderType) {
OrderType = orderType;
}
public String getResponseCode() {
return ResponseCode;
}
public void setResponseCode(String responseCode) {
ResponseCode = responseCode;
}
public String getResponseMsg() {
return ResponseMsg;
}
public void setResponseMsg(String responseMsg) {
ResponseMsg = responseMsg;
}
public String getTradeStatus() {
return TradeStatus;
}
public void setTradeStatus(String tradeStatus) {
TradeStatus = tradeStatus;
}
public String getMch_id() {
return Mch_id;
}
public void setMch_id(String mch_id) {
Mch_id = mch_id;
}
public String getTer_id() {
return Ter_id;
}
public void setTer_id(String ter_id) {
Ter_id = ter_id;
}
public String getOrderNo() {
return OrderNo;
}
public void setOrderNo(String orderNo) {
OrderNo = orderNo;
}
public String getTn() {
return tn;
}
public void setTn(String tn) {
this.tn = tn;
}
public String getPaySign() {
return paySign;
}
public void setPaySign(String paySign) {
this.paySign = paySign;
}
}
}
...@@ -14,6 +14,7 @@ import com.xingdata.zzdpos.model.Sskugrp; ...@@ -14,6 +14,7 @@ import com.xingdata.zzdpos.model.Sskugrp;
import com.xingdata.zzdpos.model.Sssku; import com.xingdata.zzdpos.model.Sssku;
import com.xingdata.zzdpos.model.Ussku; import com.xingdata.zzdpos.model.Ussku;
import com.xingdata.zzdpos.ui.main.MainPresenter; import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.ui.marketing.ms.MsPresenter;
import com.xingdata.zzdpos.ui.settle.SettlePresenter; import com.xingdata.zzdpos.ui.settle.SettlePresenter;
import com.xingdata.zzdpos.ui.store.StorePresenter; import com.xingdata.zzdpos.ui.store.StorePresenter;
import com.xingdata.zzdpos.ui.vip.VipPresenter; import com.xingdata.zzdpos.ui.vip.VipPresenter;
...@@ -241,10 +242,23 @@ public class DBFactory { ...@@ -241,10 +242,23 @@ public class DBFactory {
public static class Marketing { public static class Marketing {
public static class Ms { public static class Ms {
public static Observable<List<Level>> queryLevel() { public static Observable<List<Level>> queryLevel() {
return Observable.just(DB.getInstance().get(MainPresenter.class).where(Level return Observable.just(DB.getInstance().get(MsPresenter.class).where(Level
.class).findAll()) .class).findAll())
.flatMap(levels -> Observable.just(getList(levels))); .flatMap(levels -> Observable.just(getList(levels)));
} }
/**
* 查询商品名称
*
* @param skuId 商品Id
* @return 商品名称
*/
public static String querySpuNameBySkuId(Long skuId) {
List<Sssku> ssskus = getList(DB.getInstance().get(MsPresenter.class).where(Sssku
.class).equalTo("skuId", skuId).findAll());
if (ssskus.size() > 0) return ssskus.get(0).getSpuName();
else return null;
}
} }
} }
......
package com.xingdata.zzdpos.jni;
public class Pay {
static {
System.loadLibrary("jsonpay");
}
public static native String allpay(String inStr);
}
...@@ -27,6 +27,7 @@ public class MsPresenter<Sku extends BaseSku> extends MsContract.Presenter<Sku> ...@@ -27,6 +27,7 @@ public class MsPresenter<Sku extends BaseSku> extends MsContract.Presenter<Sku>
@Override @Override
public void onAttached() { public void onAttached() {
this.initRealm();
} }
@Override @Override
......
...@@ -2,11 +2,14 @@ package com.xingdata.zzdpos.ui.marketing.ms.adapter; ...@@ -2,11 +2,14 @@ package com.xingdata.zzdpos.ui.marketing.ms.adapter;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import com.blankj.utilcode.util.StringUtils;
import com.xingdata.zzdpos.C; import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.R; import com.xingdata.zzdpos.R;
import com.xingdata.zzdpos.base.BaseAdapter; import com.xingdata.zzdpos.base.BaseAdapter;
import com.xingdata.zzdpos.databinding.ItemMsBinding; import com.xingdata.zzdpos.databinding.ItemMsBinding;
import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.model.Ms; import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -40,6 +43,8 @@ public class MsAdapter extends BaseAdapter<Ms, ItemMsBinding> { ...@@ -40,6 +43,8 @@ public class MsAdapter extends BaseAdapter<Ms, ItemMsBinding> {
} }
mViewBinding.tvInfo.setText(getMsDescription(item));
StringBuilder sbDateBegin = new StringBuilder(item.getMsDateBegin().toString()); StringBuilder sbDateBegin = new StringBuilder(item.getMsDateBegin().toString());
StringBuilder sbDateEnd = new StringBuilder(item.getMsDateEnd().toString()); StringBuilder sbDateEnd = new StringBuilder(item.getMsDateEnd().toString());
sbDateBegin.insert(6, "-"); sbDateBegin.insert(6, "-");
...@@ -48,4 +53,49 @@ public class MsAdapter extends BaseAdapter<Ms, ItemMsBinding> { ...@@ -48,4 +53,49 @@ public class MsAdapter extends BaseAdapter<Ms, ItemMsBinding> {
sbDateEnd.insert(4, "-"); sbDateEnd.insert(4, "-");
mViewBinding.tvDate.setText(sbDateBegin.toString() + "~" + sbDateEnd.toString()); mViewBinding.tvDate.setText(sbDateBegin.toString() + "~" + sbDateEnd.toString());
} }
/**
* 获取营销计划的文字描述
*
* @param ms 营销计划
* @return 文字描述
*/
private String getMsDescription(Ms ms) {
String strGroup = "", strType = "";
switch (ms.getMsTouchTag2()) {
case C.MS_GROUP.ALL:
strGroup = mContext.getResources().getString(R.string.ms_group_all_info);
break;
case C.MS_GROUP.BRAND:
strGroup = mContext.getResources().getString(R.string.ms_group_all_info);
break;
case C.MS_GROUP.CATE:
strGroup = mContext.getResources().getString(R.string.ms_group_cate_info, ms.getCateName());
break;
case C.MS_GROUP.SKU:
String spuName = DBFactory.Marketing.Ms.querySpuNameBySkuId(ms.getSkuId());
strGroup = mContext.getResources().getString(R.string.ms_group_sku_info, !StringUtils.isEmpty(spuName) ? spuName : ms.getSkuId());
break;
}
switch (ms.getMsTools()) {
case C.MS_TYPE.DIS:
strType = mContext.getResources().getString(R.string.ms_type_dis_info, String.valueOf(Double.valueOf(ms.getPriceDiscount()) / 10));
break;
case C.MS_TYPE.PROMOTION:
strType = mContext.getResources().getString(R.string.ms_type_promotion_info);
break;
case C.MS_TYPE.SECOND:
strType = mContext.getResources().getString(R.string.ms_type_second_info, String.valueOf(Double.valueOf(ms.getPriceDiscount()) / 10));
break;
case C.MS_TYPE.MONEY_OFF:
strType = mContext.getResources().getString(R.string.ms_type_money_off_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftOffAmt()));
break;
case C.MS_TYPE.GIFT:
strType = mContext.getResources().getString(R.string.ms_type_gift_info, ConvertUtil.fenToYuan(ms.getPayAmt()), ConvertUtil.fenToYuan(ms.getGiftSkuPrice()), ms.getGiftSkuName());
break;
}
return strGroup + strType;
}
} }
package com.xingdata.zzdpos.ui.settle; package com.xingdata.zzdpos.ui.settle;
import com.alibaba.fastjson.JSON;
import com.blankj.utilcode.util.StringUtils; import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.TimeUtils;
import com.xingdata.api.print.ZX_PrintPOS; import com.xingdata.api.print.ZX_PrintPOS;
import com.xingdata.zzdpos.C; import com.xingdata.zzdpos.C;
import com.xingdata.zzdpos.api.ApiFactory; import com.xingdata.zzdpos.api.ApiFactory;
import com.xingdata.zzdpos.api.JniFactory;
import com.xingdata.zzdpos.api.Pay;
import com.xingdata.zzdpos.db.DBFactory; import com.xingdata.zzdpos.db.DBFactory;
import com.xingdata.zzdpos.jni.Pay;
import com.xingdata.zzdpos.model.HandoverInfo; import com.xingdata.zzdpos.model.HandoverInfo;
import com.xingdata.zzdpos.model.Ms; import com.xingdata.zzdpos.model.Ms;
import com.xingdata.zzdpos.model.Saledetail; import com.xingdata.zzdpos.model.Saledetail;
...@@ -15,9 +18,12 @@ import com.xingdata.zzdpos.model.Ticket; ...@@ -15,9 +18,12 @@ import com.xingdata.zzdpos.model.Ticket;
import com.xingdata.zzdpos.model.Vip; import com.xingdata.zzdpos.model.Vip;
import com.xingdata.zzdpos.ui.main.MainActivity; import com.xingdata.zzdpos.ui.main.MainActivity;
import com.xingdata.zzdpos.ui.main.MainPresenter; import com.xingdata.zzdpos.ui.main.MainPresenter;
import com.xingdata.zzdpos.util.ConvertUtil;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import io.reactivex.Observable; import io.reactivex.Observable;
...@@ -223,7 +229,26 @@ public class SettlePresenter extends SettleContract.Presenter { ...@@ -223,7 +229,26 @@ public class SettlePresenter extends SettleContract.Presenter {
@Override @Override
public void payInAli(String payCode) { public void payInAli(String payCode) {
Pay.allpay("payCode = " + payCode); Pay.Request q = new Pay.Request();
q.setOrderType("1");
q.setPayChannelType("3");
q.setDeviceType("2");
q.setMch_id("11");
q.setTer_id("11");
q.setOrderDateTime(TimeUtils.getNowString(new SimpleDateFormat("yyyymmddHHMMSS", Locale.getDefault())));
q.setCurrencyType("156");
q.setOrderAmt(ConvertUtil.longToString(mSaleorder.getOrderPayAmt()));
q.setOrderName("测试");
q.setChannelAuthCode(payCode);
q.setKey("Key");
q.setNotifyUrl("setNotifyUrl");
subscribePay(commitOrder().flatMap(s -> {
q.setOrderNo(s);
return JniFactory.Settle.pay(JSON.toJSONString(q));
}).flatMap(response -> ApiFactory.Saleorder.addOrderPayMis(mSaleorder.pay(q.getOrderNo(), C.PAY_CHANNEL.CASH))));
} }
@Override @Override
......
...@@ -2,57 +2,66 @@ ...@@ -2,57 +2,66 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android" <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.constraint.ConstraintLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="130dp" android:layout_height="wrap_content"
android:background="@drawable/shape_orange_b1" android:background="@mipmap/bg_marketing"
android:foreground="?android:attr/selectableItemBackground"> android:foreground="?android:attr/selectableItemBackground"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_margin"
android:layout_marginTop="@dimen/all_margin_big"
android:layout_weight="1"
android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_sub_title_size" />
<ImageView <ImageView
android:id="@+id/iv_type" android:id="@+id/iv_type"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_spacing" android:layout_marginEnd="@dimen/all_margin"
android:layout_marginTop="@dimen/all_spacing" android:layout_marginTop="@dimen/all_margin_big"
android:contentDescription="@null" android:contentDescription="@null"
android:src="@mipmap/icon_buy01" android:src="@mipmap/icon_buy01" />
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView <TextView
android:id="@+id/tv_name" android:id="@+id/tv_info"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/all_margin"
android:layout_marginTop="@dimen/all_margin"
android:textColor="@color/black_baozheng" android:textColor="@color/black_baozheng"
android:textSize="@dimen/all_sub_title_size" android:textSize="@dimen/all_text_size" />
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/tv_date"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/tv_date" android:id="@+id/tv_date"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/all_margin"
android:layout_marginEnd="@dimen/all_margin"
android:layout_marginStart="@dimen/all_margin" android:layout_marginStart="@dimen/all_margin"
android:background="@drawable/shape_orange_r2" android:layout_marginTop="@dimen/all_spacing"
android:drawableStart="@mipmap/icon_time" android:textColor="@color/black_baozheng"
android:gravity="center" android:textSize="@dimen/all_caption_size" />
android:paddingBottom="@dimen/view_line_L2" </LinearLayout>
android:paddingEnd="@dimen/all_spacing" </LinearLayout>
android:paddingStart="@dimen/all_spacing"
android:paddingTop="@dimen/view_line_L2"
android:textColor="@color/white_caocao"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout> </layout>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment