添加发布标讯页面(待完善)

This commit is contained in:
wangyu 2026-01-04 18:58:31 +08:00
parent 5e9e7e3ea5
commit 7cf960a787
36 changed files with 2003 additions and 0 deletions

View File

@ -42,6 +42,8 @@ object EventConstants {
const val JUMP_TO_SUBSCRIBE = "client.jump.to.subscribe" //跳转到订阅
const val JUMP_TO_PUBLISH = "client.jump.to.publish" //跳转到发布
const val JUMP_TO_ABOUT_US = "client.jump.to.about.us" //界面跳转
const val MAIN_CENTER_ENABLE = "client.main.center.enable" //首页跳转个人中心

View File

@ -0,0 +1,4 @@
package com.cheng.bole.event
class BidEvent {
}

View File

@ -0,0 +1,103 @@
package com.cheng.bole.ui.dialog
import android.app.Dialog
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewOutlineProvider
import android.view.ViewTreeObserver
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.DialogFragment
import com.cheng.bole.R
import com.cheng.bole.common.Constants
import com.cheng.bole.common.EventConstants
import com.cheng.bole.databinding.DialogPublishBidBinding
import com.cheng.bole.manager.EventReportManager
import com.cheng.bole.ui.activity.PublicActivity
import com.cheng.bole.ui.fragment.bid.publish.bid.PublishBidMessageFragment
import com.efs.sdk.memleaksdk.monitor.internal.bi
import com.example.base.extensions.onClick
import com.example.base.utils.ScreenUtils
class PublishBidDialog : DialogFragment() {
private lateinit var binding: DialogPublishBidBinding
override fun onStart() {
super.onStart()
val window = dialog?.window
val windowParams = window?.attributes
windowParams?.dimAmount = 0.7f
windowParams?.width = ScreenUtils.getWindowSize().x
windowParams?.gravity = Gravity.BOTTOM
windowParams?.windowAnimations = R.style.dialog_bottom
dialog?.window?.attributes = windowParams
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = layoutInflater.inflate(R.layout.dialog_publish_bid, null)
binding = DialogPublishBidBinding.bind(view)
binding.tvTitle.typeface = Constants.pmzdbt
binding.tvBidTitle.typeface = Constants.almmsht
binding.tvGoodsTitle.typeface = Constants.almmsht
binding.layoutBid.setupWith(binding.root)
.setFrameClearDrawable(binding.layoutBid.background)
.setBlurRadius(5f)
binding.layoutBid.clipToOutline = true
binding.layoutBid.outlineProvider = ViewOutlineProvider.BACKGROUND
binding.layoutGoods.setupWith(binding.root)
.setFrameClearDrawable(binding.layoutBid.background)
.setBlurRadius(5f)
binding.layoutGoods.clipToOutline = true
binding.layoutGoods.outlineProvider = ViewOutlineProvider.BACKGROUND
binding.layoutBid.onClick {
PublicActivity.start(requireActivity(), PublishBidMessageFragment::class.java)
EventReportManager.eventReport(EventConstants.JUMP_TO_PUBLISH, "home", "标讯")
dismiss()
}
binding.layoutGoods.onClick {
// PublicActivity.start(requireActivity(), PublishSupplyMessageFragment::class.java, Pair("from", 1))
EventReportManager.eventReport(EventConstants.JUMP_TO_PUBLISH, "home", "商品")
dismiss()
}
binding.ivClose.onClick { dismiss() }
binding.ivTopBg.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val lp = binding.tvTitle.layoutParams as ConstraintLayout.LayoutParams
lp.topMargin = (binding.ivTopBg.height * 55f / 291f).toInt()
binding.tvTitle.layoutParams = lp
// (binding.tvTitle.layoutParams as ConstraintLayout.LayoutParams).topMargin = (binding.ivTopBg.height * 85f / 291f).toInt()
binding.ivTopBg.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
val dialog = Dialog(requireContext())
dialog.setContentView(view)
return dialog
}
companion object {
fun newInstance(): PublishBidDialog {
val arg = Bundle()
val fragment = PublishBidDialog()
fragment.arguments = arg
return fragment
}
}
}

View File

@ -0,0 +1,119 @@
package com.cheng.bole.ui.dialog
import android.annotation.SuppressLint
import android.app.Dialog
import android.graphics.Color
import android.graphics.Typeface
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.DialogFragment
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.bole.R
import com.cheng.bole.bean.BidTypeBean
import com.cheng.bole.databinding.DialogSelectBidTypeBinding
import com.cheng.bole.manager.UserConfigManager
import com.example.base.extensions.getColor
import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.utils.ScreenUtils
class SelectBidTypeDialog : DialogFragment() {
private val mAdapter by lazy { BidTypeAdapter() }
private var bidType: BidTypeBean? = null
private var mOnBackListener: ((BidTypeBean) -> Unit)? = null //回调事件
private lateinit var binding: DialogSelectBidTypeBinding
override fun onStart() {
super.onStart()
val window = dialog?.window
val windowParams = window?.attributes
windowParams?.dimAmount = 0.7f
windowParams?.width = ScreenUtils.getWindowSize().x
windowParams?.gravity = Gravity.BOTTOM
windowParams?.windowAnimations = R.style.dialog_bottom
dialog?.window?.attributes = windowParams
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
return super.onCreateView(inflater, container, savedInstanceState)
}
@SuppressLint("NotifyDataSetChanged")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view = layoutInflater.inflate(R.layout.dialog_select_bid_type, null)
binding = DialogSelectBidTypeBinding.bind(view)
bidType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
arguments?.getSerializable("type", BidTypeBean::class.java)
} else {
arguments?.getSerializable("type") as? BidTypeBean
}
binding.mRecyclerView.adapter = mAdapter
val typeList = UserConfigManager.getBidTypes()
if (bidType != null) {
typeList.find { it.id == bidType!!.id }?.isChecked = true
}
mAdapter.setList(typeList)
mAdapter.setOnItemClickListener { _, _, i ->
val item = mAdapter.getItem(i)
mAdapter.data.find { it.isChecked }?.isChecked = false
item.isChecked = true
bidType = item
mAdapter.notifyDataSetChanged()
}
binding.btnNext.onClick {
if (bidType == null) {
toast("请选择类别")
return@onClick
}
mOnBackListener?.invoke(bidType!!)
dismiss()
}
binding.ivClose.onClick { dismiss() }
val dialog = Dialog(requireContext())
dialog.setContentView(view)
return dialog
}
fun setOnSelectListener(listener: ((BidTypeBean) -> Unit)) {
mOnBackListener = listener
}
companion object {
fun newInstance(type: BidTypeBean?): SelectBidTypeDialog {
val arg = Bundle()
arg.putSerializable("type", type)
val fragment = SelectBidTypeDialog()
fragment.arguments = arg
return fragment
}
}
class BidTypeAdapter : BaseQuickAdapter<BidTypeBean, BaseViewHolder>(R.layout.listitem_bid_type) {
override fun convert(holder: BaseViewHolder, item: BidTypeBean) {
holder.setText(R.id.tv_name, item.name)
holder.setTextColor(R.id.tv_name, if (item.isChecked) getColor(R.color.color_ff493c) else getColor(R.color.color_666666))
holder.getView<TextView>(R.id.tv_name).typeface = if (item.isChecked) Typeface.DEFAULT_BOLD else Typeface.DEFAULT
holder.itemView.setBackgroundResource(if (item.isChecked) R.drawable.shape_f1f6f_cor4 else 0)
}
}
}

View File

@ -0,0 +1,18 @@
package com.cheng.bole.ui.fragment.bid.publish.bid
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.bole.R
import com.cheng.bole.bean.ContactsInfoBean
class AddBidContactsAdapter: BaseQuickAdapter<ContactsInfoBean, BaseViewHolder>(R.layout.listitem_publish_bid_contacts) {
init {
addChildClickViewIds(R.id.iv_edit)
}
override fun convert(holder: BaseViewHolder, item: ContactsInfoBean) {
holder.setText(R.id.tv_name, item.name)
holder.setText(R.id.tv_phone, item.phone)
}
}

View File

@ -0,0 +1,18 @@
package com.cheng.bole.ui.fragment.bid.publish.bid
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.cheng.bole.R
import com.cheng.bole.bean.AttachmentBean
class AddBidFileAdapter : BaseQuickAdapter<AttachmentBean, BaseViewHolder>(R.layout.listitem_publish_bid_file) {
init {
addChildClickViewIds(R.id.iv_delete)
}
override fun convert(holder: BaseViewHolder, item: AttachmentBean) {
holder.setText(R.id.tv_name, item.title)
}
}

View File

@ -0,0 +1,118 @@
package com.cheng.bole.ui.fragment.bid.publish.bid
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.RoundedCornersTransformation
import com.cheng.bole.R
import com.cheng.bole.bean.UploadFileEntity
import com.example.base.utils.DensityUtils
import org.jetbrains.anko.find
import org.jetbrains.anko.sdk27.listeners.onClick
class AddBidImageAdapter(private val context: Context, val data: MutableList<UploadFileEntity>) : RecyclerView.Adapter<AddBidImageAdapter.ViewHolder>() {
var selectMax = 10
private val TYPE_ADD_IMAGE = 1001
private val TYPE_PICTURE = 1002
companion object {
val TYPE_ADD = 10001
val TYPE_RELOAD = 10002
val TYPE_DELETE = 10003
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val ivImg = view.find<ImageView>(R.id.iv_image)
val ivAddImg = view.find<ImageView>(R.id.iv_add_image)
val ivDeleteImg = view.find<ImageView>(R.id.iv_delete)
}
override fun getItemCount(): Int {
return if (data.size < selectMax) {
data.size + 1
} else {
data.size
}
}
override fun getItemViewType(position: Int): Int {
return if (isAddItem(position)) {
TYPE_ADD_IMAGE
} else {
TYPE_PICTURE
}
}
@SuppressLint("NotifyDataSetChanged")
fun removeAll() {
data.clear()
notifyDataSetChanged()
}
/**
* 删除
*/
fun remove(position: Int) {
try {
if (position != RecyclerView.NO_POSITION && data.size > position) {
data.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, data.size)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
/**
* 创建ViewHolder
*/
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.listitem_add_bid_img, viewGroup, false)
return ViewHolder(view)
}
private fun isAddItem(position: Int): Boolean {
return position == data.size
}
/**
* 设置值
*/
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
if (viewHolder.itemViewType == TYPE_ADD_IMAGE) {
viewHolder.ivDeleteImg.visibility = View.GONE
viewHolder.ivAddImg.visibility = View.VISIBLE
} else {
viewHolder.ivAddImg.visibility = View.GONE
viewHolder.ivDeleteImg.visibility = View.VISIBLE
viewHolder.ivImg.load(data[position].url) {
transformations(RoundedCornersTransformation(DensityUtils.dp2px(8f).toFloat()))
}
}
viewHolder.ivAddImg.onClick {
onItemClick?.invoke(TYPE_ADD, position)
}
viewHolder.ivDeleteImg.onClick {
onItemClick?.invoke(TYPE_DELETE, position)
}
viewHolder.ivImg.onClick {
if (viewHolder.itemViewType == TYPE_PICTURE) {
onItemClick?.invoke(TYPE_RELOAD, position)
}
}
}
private var onItemClick: ((Int, Int) -> Unit)? = null
fun setOnItemClick(onClick: ((Int, Int) -> Unit)?) {
onItemClick = onClick
}
}

View File

@ -0,0 +1,417 @@
package com.cheng.bole.ui.fragment.bid.publish.bid
import android.annotation.SuppressLint
import android.os.Build
import android.text.TextUtils
import androidx.activity.result.contract.ActivityResultContracts
import com.cheng.bole.R
import com.cheng.bole.bean.AreaBean
import com.cheng.bole.bean.AttachmentBean
import com.cheng.bole.bean.BidDetailBean
import com.cheng.bole.bean.BidTypeBean
import com.cheng.bole.bean.UploadFileEntity
import com.cheng.bole.common.Constants
import com.cheng.bole.databinding.FragmentPublishBidMessageBinding
import com.cheng.bole.impl.TextWatcherImpl
import com.cheng.bole.manager.UserConfigManager
import com.cheng.bole.ui.dialog.SelectAreaDialog
import com.cheng.bole.ui.dialog.SelectBidTypeDialog
import com.cheng.bole.utils.FileProviderUtils
import com.cheng.bole.utils.GlideEngine
import com.cheng.bole.utils.PermissionUtils
import com.example.base.extensions.getColor
import com.example.base.extensions.gone
import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.extensions.visible
import com.example.base.ui.BaseFragment
import com.example.base.utils.SpanUtils
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.google.gson.reflect.TypeToken
import com.huantansheng.easyphotos.EasyPhotos
import com.huantansheng.easyphotos.callback.SelectCallback
import com.huantansheng.easyphotos.models.album.entity.Photo
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
class PublishBidMessageFragment : BaseFragment<FragmentPublishBidMessageBinding, PublishBidMessageViewModel>() {
private var bidDetail: BidDetailBean? = null
private val imageAdapter by lazy { AddBidImageAdapter(requireContext(), uploadedImgList) }
private var uploadedImgList: ArrayList<UploadFileEntity> = ArrayList()
private val fileAdapter by lazy { AddBidFileAdapter() }
private val selectedFileList = ArrayList<File>()
private val deletedList = mutableListOf<String>()
private val contactsAdapter by lazy { AddBidContactsAdapter() }
private var contentType: Int = 1 //1 文字 2 图片
private var city: AreaBean? = null
private var bidType: BidTypeBean? = null
private val textWatcher = object : TextWatcherImpl() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
super.onTextChanged(s, start, before, count)
SpanUtils.with(binding.tvTextCount)
.append("${s?.length ?: 0}")
.setForegroundColor(getColor(R.color.color_1a1a1a))
.append("/20000")
.create()
}
}
override fun initView() {
super.initView()
binding.rvImages.adapter = imageAdapter
binding.rvFiles.adapter = fileAdapter
binding.rvContacts.adapter = contactsAdapter
}
override fun initData() {
super.initData()
bidDetail = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
arguments?.getSerializable("item", BidDetailBean::class.java)
} else {
arguments?.getSerializable("item") as? BidDetailBean
}
if (bidDetail != null) {
setData(bidDetail!!)
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initListener() {
super.initListener()
binding.etProjectInfo.addTextChangedListener(textWatcher)
binding.tvProjectType.onClick {
val f = SelectBidTypeDialog.newInstance(bidType)
f.setOnSelectListener {
bidType = it
binding.tvProjectType.text = it.name
}
f.show(childFragmentManager, SelectBidTypeDialog::class.java.simpleName)
}
binding.tvProjectArea.onClick {
val f = SelectAreaDialog.newInstance(if (city != null) listOf(city!!) else emptyList(), true)
f.setOnSelectListener {
city = it[0]
binding.tvProjectArea.text = city!!.name
}
f.show(childFragmentManager, SelectAreaDialog::class.java.simpleName)
}
binding.tvUploadFile.onClick {
fileLauncher.launch("application/pdf")
}
binding.tvAddContacts.onClick {
/*val f = AddContactsDialog.newInstance(null)
f.setOnSelectListener {
contactsAdapter.addData(it)
if (contactsAdapter.data.size == 5) {
binding.tvAddContacts.gone()
}
}
f.show(childFragmentManager, AddContactsDialog::class.java.simpleName)*/
}
binding.rgProjectInfoType.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
R.id.rb1 -> {
contentType = 1
binding.etProjectInfo.visible()
binding.tvTextCount.visible()
binding.tvImageCount.gone()
binding.tvImageLimitTip.gone()
binding.rvImages.gone()
}
R.id.rb2 -> {
contentType = 2
binding.etProjectInfo.gone()
binding.tvTextCount.gone()
binding.tvImageCount.visible()
binding.tvImageLimitTip.visible()
binding.rvImages.visible()
}
}
}
imageAdapter.setOnItemClick { type, position ->
when (type) {
AddBidImageAdapter.TYPE_ADD -> {
PermissionUtils.checkPhotoPermission(requireActivity(), childFragmentManager, true) { isGranted ->
if (isGranted) selectPhoto()
}
}
AddBidImageAdapter.TYPE_DELETE -> {
if (uploadedImgList.isNotEmpty()) {
if (bidDetail == null) {
mViewModel.deleteFile(uploadedImgList[position].id)
}
deletedList.add(uploadedImgList[position].id)
uploadedImgList.removeAt(position)
imageAdapter.notifyDataSetChanged()
SpanUtils.with(binding.tvImageCount)
.append("(")
.append("${uploadedImgList.size}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/10)")
.create()
}
}
}
}
fileAdapter.setOnItemChildClickListener { _, _, i ->
if (bidDetail == null) {
mViewModel.deleteFile(fileAdapter.getItem(i).id)
}
deletedList.add(fileAdapter.getItem(i).id )
fileAdapter.removeAt(i)
SpanUtils.with(binding.tvFileCount)
.append("(")
.append("${fileAdapter.data.size}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/5)")
.create()
}
contactsAdapter.setOnItemChildClickListener { _, _, i ->
/*val f = AddContactsDialog.newInstance(contactsAdapter.getItem(i))
f.setOnSelectListener {
contactsAdapter.removeAt(i)
contactsAdapter.addData(i, it)
}
f.show(childFragmentManager, AddContactsDialog::class.java.simpleName)*/
}
binding.btnNext.onClick {
val name = binding.etProjectName.text.toString().trim()
val price = binding.etProjectPrice.text.toString().trim()
val contentText = binding.etProjectInfo.text.toString().trim()
if (bidType == null) {
toast("请选择项目类型")
return@onClick
}
if (TextUtils.isEmpty(name)) {
toast("请输入项目名称")
return@onClick
}
if (TextUtils.isEmpty(price)) {
toast("请输入项目价格")
return@onClick
}
if (city == null) {
toast("请选择发布地区")
return@onClick
}
if (contentType == 1 && TextUtils.isEmpty(contentText)) {
toast("请输入项目文本信息")
return@onClick
}
if (contentType == 2 && imageAdapter.data.isEmpty()) {
toast("请上传项目图片信息")
return@onClick
}
if (fileAdapter.data.isEmpty()) {
toast("请上传项目文件")
return@onClick
}
if (contactsAdapter.data.isEmpty()) {
toast("请添加联系人")
return@onClick
}
commit()
}
}
@SuppressLint("NotifyDataSetChanged")
override fun initObserve() {
super.initObserve()
mViewModel.addLiveData.observe(this) {
/*toast("提交成功")
RxBus.defaultInstance.post(BidEvent())
PublicActivity.start(requireContext(), MyBiddingDocFragment::class.java)
requireActivity().finish()*/
}
mViewModel.imageLiveData.observe(this) {
uploadedImgList.addAll(it)
imageAdapter.notifyDataSetChanged()
SpanUtils.with(binding.tvImageCount)
.append("(")
.append("${uploadedImgList.size}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/10)")
.create()
}
mViewModel.fileLiveData.observe(this) { list ->
list.forEachIndexed { index, file ->
fileAdapter.addData(AttachmentBean(file.id, file.url, "pdf", selectedFileList[index].name))
}
SpanUtils.with(binding.tvFileCount)
.append("(")
.append("${fileAdapter.data.size}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/5)")
.create()
if (fileAdapter.data.size == 5) {
binding.tvUploadFile.gone()
} else {
binding.tvUploadFile.visible()
}
}
}
private fun commit() {
val name = binding.etProjectName.text.toString().trim()
val price = binding.etProjectPrice.text.toString().trim()
val contentText = binding.etProjectInfo.text.toString().trim()
val jsonObject = JsonObject()
jsonObject.addProperty("origin_title", name)
jsonObject.addProperty("city_id", "${city!!.id}")
jsonObject.addProperty("type_id", bidType!!.id)
jsonObject.addProperty("project_amount", price)
jsonObject.addProperty("content_type", if (contentType == 1) "1" else "2")
if (contentType == 1) {
jsonObject.addProperty("origin_content", contentText)
} else {
val imageArray = JsonArray()
uploadedImgList.forEach {
imageArray.add(it.id)
}
jsonObject.add("origin_content", imageArray)
}
val attachArray = JsonArray()
fileAdapter.data.forEach {
val attachObj = JsonObject()
attachObj.addProperty("title", it.title)
attachObj.addProperty("type", "pdf")
attachObj.addProperty("url", it.url)
attachArray.add(attachObj)
}
jsonObject.add("origin_attachment", attachArray)
val contactArray = JsonArray()
contactsAdapter.data.forEach {
val contactObj = JsonObject()
contactObj.addProperty("name", it.name)
contactObj.addProperty("phone", it.phone)
contactObj.addProperty("job", it.job)
contactArray.add(contactObj)
}
jsonObject.add("contact", contactArray)
if (bidDetail == null) {
mViewModel.addBid(jsonObject.toString().toRequestBody())
} else {
jsonObject.addProperty("id", bidDetail!!.id)
mViewModel.updateBid(jsonObject.toString().toRequestBody())
}
}
@SuppressLint("SetTextI18n", "NotifyDataSetChanged")
private fun setData(detail: BidDetailBean) {
if (detail.status == "3") {
binding.tvReason.text = "理由:${detail.review_remark}"
binding.tvTime.text = detail.review_time
binding.layoutRejectReason.visible()
}
binding.etProjectName.setText(detail.origin_title)
binding.etProjectPrice.setText(detail.project_amount)
city = UserConfigManager.getCityList().find { it.id == detail.city_id.toInt() }
if (city != null) binding.tvProjectArea.text = city!!.name
bidType = UserConfigManager.getBidTypes().find { it.id == detail.type_id }
if (bidType != null) binding.tvProjectType.text = bidType!!.name
if (detail.content_type == "1") {
binding.etProjectInfo.setText(detail.origin_content.toString())
binding.rb1.isChecked = true
} else {
val imageList = Gson().fromJson<List<UploadFileEntity>>(Gson().toJson(detail.origin_content), object : TypeToken<List<UploadFileEntity>>(){}.type)
uploadedImgList.addAll(imageList)
imageAdapter.notifyDataSetChanged()
SpanUtils.with(binding.tvImageCount)
.append("(")
.append("${uploadedImgList.size}")
.setForegroundColor(getColor(R.color.color_ff493c))
.append("/10)")
.create()
binding.rb2.isChecked = true
}
fileAdapter.setList(detail.origin_attachment)
if (fileAdapter.data.size == 5) {
binding.tvUploadFile.gone()
}
contactsAdapter.setList(detail.contact)
if (contactsAdapter.data.size == 5) {
binding.tvAddContacts.gone()
}
}
private val fileLauncher = registerForActivityResult(ActivityResultContracts.GetMultipleContents()) {
if (it.isEmpty()) return@registerForActivityResult
if (fileAdapter.data.size + it.size > 5) {
toast("最多上传5个文件")
return@registerForActivityResult
}
val files = arrayListOf<File>()
it.forEach { uri ->
val path = FileProviderUtils.getFileAbsolutePath(requireContext(), uri)
if (!TextUtils.isEmpty(path)) {
files.add(File(path!!))
}
}
if (files.find { file -> file.length() > 5 * 1024 * 1024 } != null) {
toast("单个文件大小不能超过5M")
return@registerForActivityResult
}
selectedFileList.clear()
selectedFileList.addAll(files)
mViewModel.fileList.clear()
mViewModel.uploadFiles(files)
}
private fun selectPhoto() {
EasyPhotos.createAlbum(this, true, false, GlideEngine.getInstance())
.setFileProviderAuthority(Constants.AppFilter)
.setCount(imageAdapter.selectMax - uploadedImgList.size)
.start(object : SelectCallback() {
@SuppressLint("NotifyDataSetChanged")
override fun onResult(photos: ArrayList<Photo>, isOriginal: Boolean) {
if (photos.find { it.size > 10 * 1024 * 1024 } != null) {
toast("单张图片大小不能超过10M")
return
}
mViewModel.imgList.clear()
mViewModel.uploadImages(requireContext(), photos)
}
override fun onCancel() {
}
})
}
override fun onDestroyView() {
binding.etProjectInfo.removeTextChangedListener(textWatcher)
super.onDestroyView()
}
}

View File

@ -0,0 +1,136 @@
package com.cheng.bole.ui.fragment.bid.publish.bid
import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.cheng.bole.bean.UploadFileEntity
import com.cheng.bole.net.ApiFactory
import com.cheng.bole.utils.BitmapUtils
import com.example.base.extensions.toast
import com.example.base.utils.L
import com.example.base.viewmodel.BaseViewModel
import com.huantansheng.easyphotos.models.album.entity.Photo
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody
import java.io.File
class PublishBidMessageViewModel : BaseViewModel() {
val addLiveData = MutableLiveData<Any>()
val imageLiveData = MutableLiveData<List<UploadFileEntity>>()
val imgList = ArrayList<UploadFileEntity>()
val fileLiveData = MutableLiveData<List<UploadFileEntity>>()
val fileList = ArrayList<UploadFileEntity>()
fun addBid(requestBody: RequestBody) {
showDialog()
launchOnUiTryCatch({
val response = ApiFactory.apiService.addBidInfo(requestBody)
if (response.status) {
addLiveData.postValue(Any())
} else toast(response.message, true)
dismissDialog()
}, {
dismissDialog()
setError(it)
L.d(it)
})
}
fun updateBid(requestBody: RequestBody) {
showDialog()
launchOnUiTryCatch({
val response = ApiFactory.apiService.updateBidInfo(requestBody)
if (response.status) {
addLiveData.postValue(Any())
} else toast(response.message, true)
dismissDialog()
}, {
dismissDialog()
setError(it)
L.d(it)
})
}
//删除文件
fun deleteFile(id: String) {
launchOnUiTryCatch({
ApiFactory.apiService.delUserFile(id)
}, {
L.d(it)
})
}
fun uploadImages(context: Context, list: ArrayList<Photo>) {
showDialog()
list.forEachIndexed { index, photo ->
if (index == 0) {
uploadImg(context, photo) {
list.remove(photo)
if (list.isNotEmpty()) {
uploadImages(context, list)
} else {
imageLiveData.postValue(imgList)
dismissDialog()
}
}
}
}
}
fun uploadFiles(list: ArrayList<File>) {
showDialog()
list.forEachIndexed { index, file ->
if (index == 0) {
uploadFile(file) {
list.remove(file)
if (list.size > 0) {
uploadFiles(list)
} else {
fileLiveData.postValue(fileList)
dismissDialog()
}
}
}
}
}
private fun uploadImg(context: Context, photo: Photo, clickFun: () -> Unit) {
BitmapUtils.compressImg(context, photo.path) {
launchOnUiTryCatch({
val requestFile = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), it)
val filePart = MultipartBody.Part.createFormData("file", it.getName(), requestFile)
val response = ApiFactory.apiService.upload(filePart, "supply")
if (response.status) {
imgList.add(response.data)
clickFun.invoke()
} else {
toast(response.message, true)
dismissDialog()
}
}, {
dismissDialog()
L.d(it)
})
}
}
private fun uploadFile(file: File, clickFun: () -> Unit) {
launchOnUiTryCatch({
val requestFile = RequestBody.create("multipart/form-data".toMediaTypeOrNull(), file)
val filePart = MultipartBody.Part.createFormData("file", file.getName(), requestFile)
val response = ApiFactory.apiService.upload(filePart, "supply")
if (response.status) {
fileList.add(response.data)
clickFun.invoke()
} else {
toast(response.message, true)
dismissDialog()
}
}, {
dismissDialog()
L.d(it)
})
}
}

View File

@ -16,6 +16,7 @@ import com.cheng.bole.manager.UserConfigManager
import com.cheng.bole.ui.activity.LoginActivity
import com.cheng.bole.ui.activity.PublicActivity
import com.cheng.bole.ui.base.BasePageAdapter
import com.cheng.bole.ui.dialog.PublishBidDialog
import com.cheng.bole.ui.dialog.VipLoginTipDialog
import com.cheng.bole.ui.fragment.home.HomeFragment
import com.cheng.bole.ui.fragment.merchant.MerchantFragment
@ -24,6 +25,7 @@ import com.cheng.bole.ui.fragment.mine.coupon.CouponFragment
import com.cheng.bole.ui.fragment.mine.vip.VipFragment
import com.cheng.bole.ui.fragment.push.PushFragment
import com.example.base.common.RxBus
import com.example.base.extensions.onClick
import com.example.base.extensions.toast
import com.example.base.ui.BaseFragment
import com.google.gson.Gson
@ -87,6 +89,10 @@ class MainFragment : BaseFragment<FragmentMainBinding, MainViewModel>() {
EventReportManager.eventReport(EventConstants.HOME_BOTTOM_TAB_CHECK, tabText[currentPosition], "")
}
binding.ivPublish.onClick {
PublishBidDialog().show(childFragmentManager, "")
}
}
override fun initData() {

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_125ffe_cor25" android:state_checked="true"/>
<item android:drawable="@drawable/shape_trans_bg" android:state_checked="false"/>
</selector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_checked="true"/>
<item android:color="@color/color_707a89" android:state_checked="false"/>
</selector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_125ffe"/>
<corners android:radius="@dimen/dp_25"/>
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F1F6FF"/>
<corners android:radius="@dimen/dp_4"/>
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F3F7FF"/>
<corners android:radius="@dimen/dp_25"/>
</shape>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/transparent" />
<corners android:radius="@dimen/dp_10" />
<stroke
android:width="@dimen/dp_1"
android:color="@color/white" />
</shape>

View File

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#F7F9FD"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_top_bg"
android:layout_width="match_parent"
android:layout_height="0dp"
android:src="@mipmap/ic_publish_dialog_top_bg"
app:layout_constraintDimensionRatio="h,1125:873"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_55"
android:text="信息发布"
android:textColor="@color/white"
android:textSize="28sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<eightbitlab.com.blurview.BlurView
android:id="@+id/layout_bid"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_30"
app:blurOverlayColor="#80ffffff"
android:background="@drawable/shape_publish_dialog_option_bg"
app:layout_constraintEnd_toStartOf="@id/layout_goods"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:src="@mipmap/ic_publish_dialog_icon1" />
<TextView
android:id="@+id/tv_bid_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:text="招标信息"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_20" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:text="我是甲方"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:layout_marginBottom="@dimen/dp_26"
android:text="发布招标/采购等信息"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</eightbitlab.com.blurview.BlurView>
<eightbitlab.com.blurview.BlurView
android:id="@+id/layout_goods"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_16"
app:blurOverlayColor="#80ffffff"
android:background="@drawable/shape_publish_dialog_option_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/layout_bid"
app:layout_constraintTop_toBottomOf="@id/tv_title">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:src="@mipmap/ic_publish_dialog_icon1" />
<TextView
android:id="@+id/tv_goods_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:text="合作信息"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_20" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:text="我是已方"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:layout_marginBottom="@dimen/dp_26"
android:text="发布招标/采购等信息"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</eightbitlab.com.blurview.BlurView>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_56"
android:layout_marginBottom="@dimen/dp_40"
android:src="@mipmap/ic_publish_dialog_close"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_bid" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="@drawable/shape_white_top_cor16">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:text="选择类型"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:padding="@dimen/dp_3"
android:src="@mipmap/ic_close"
app:layout_constraintBottom_toBottomOf="@id/tv_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintHeight_max="350dp"
app:layout_constraintTop_toBottomOf="@id/tv_title"
tools:listitem="@layout/listitem_bid_type" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:background="#E8E8E8"
app:layout_constraintTop_toBottomOf="@id/mRecyclerView" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_16"
android:paddingTop="@dimen/dp_9"
android:paddingEnd="@dimen/dp_16"
android:paddingBottom="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/mRecyclerView">
<com.cheng.bole.widget.CommonShapeView
android:id="@+id/btn_next"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_46"
android:fontFamily="sans-serif-medium"
android:text="确定"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
app:csb_cornerRadius="@dimen/dp_10"
app:csb_fillColor="@color/color_125ffe"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -491,6 +491,7 @@
android:layout_height="@dimen/dp_36"
android:drawableStart="@mipmap/ic_add_subscribe_keyword"
android:text="添加"
android:textSize="@dimen/sp_14"
android:textColor="@color/white"
app:csb_cornerRadius="@dimen/dp_10"
app:csb_drawablePosition="left"

View File

@ -0,0 +1,666 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/layout_bottom"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:src="@mipmap/ic_publish_bid_top_bg"
app:layout_constraintDimensionRatio="h,1125:804" />
<TextView
android:layout_width="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:textSize="@dimen/sp_17"
android:textColor="@color/color_1a1a1a"
android:layout_marginTop="96dp"
android:layout_marginStart="@dimen/dp_20"
android:text="Hi,为了服务发布的真实性,\n请认真填写信息哦~"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="168dp"
android:orientation="vertical"
android:paddingTop="@dimen/dp_5"
app:layout_constraintTop_toTopOf="parent">
<com.lihang.ShadowLayout
android:id="@+id/layout_reject_reason"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
android:visibility="gone"
app:hl_cornerRadius="@dimen/dp_12"
app:hl_shadowColor="#0d4a4f5b"
app:hl_shadowLimit="@dimen/dp_7">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/dp_14"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_14"
android:paddingBottom="@dimen/dp_12">
<TextView
android:id="@+id/tv_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="已驳回"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_reason"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_6"
android:text="理由:图片不符合"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_status" />
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2025-07-29 12:14"
android:textColor="#ADADAD"
android:textSize="@dimen/sp_10"
app:layout_constraintBottom_toBottomOf="@id/tv_status"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_status" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
app:hl_cornerRadius="@dimen/dp_12"
app:hl_shadowColor="#0d4a4f5b"
app:hl_shadowLimit="@dimen/dp_7">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_14"
android:paddingBottom="@dimen/dp_14">
<TextView
android:id="@+id/tv_bid_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/dp_6"
android:text="招标信息"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_bid_info_title"
app:layout_constraintTop_toTopOf="@id/tv_bid_info_title" />
<TextView
android:id="@+id/tv_project_type_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_14"
android:text="项目类型"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_bid_info_title" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_project_type_title"
app:layout_constraintTop_toTopOf="@id/tv_project_type_title" />
<TextView
android:id="@+id/tv_project_type"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:layout_margin="@dimen/dp_12"
android:drawableEnd="@mipmap/ic_arrow_dp18"
android:gravity="center_vertical"
android:hint="请选择类型"
android:maxLines="1"
android:paddingStart="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:singleLine="true"
android:textColor="@color/color_1a1a1a"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_14"
app:layout_constraintTop_toBottomOf="@id/tv_project_type_title" />
<TextView
android:id="@+id/tv_project_name_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_14"
android:text="项目名称"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_project_type" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_project_name_title"
app:layout_constraintTop_toTopOf="@id/tv_project_name_title" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_project_name"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:layout_margin="@dimen/dp_12"
android:background="@null"
android:gravity="center_vertical"
android:hint="请输入项目名称"
android:maxLines="1"
android:paddingStart="@dimen/dp_12"
android:paddingEnd="@dimen/dp_12"
android:singleLine="true"
android:textColor="@color/color_1a1a1a"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_14"
app:layout_constraintTop_toBottomOf="@id/tv_project_name_title" />
<TextView
android:id="@+id/tv_project_price_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_14"
android:text="项目价格"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_project_name" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_project_price_title"
app:layout_constraintTop_toTopOf="@id/tv_project_price_title" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_project_price"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:layout_margin="@dimen/dp_12"
android:background="@null"
android:gravity="center_vertical"
android:hint="请输入项目价格"
android:inputType="numberDecimal"
android:maxLines="1"
android:paddingStart="@dimen/dp_12"
android:paddingEnd="@dimen/dp_30"
android:singleLine="true"
android:textColor="@color/color_1a1a1a"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_14"
app:layout_constraintTop_toBottomOf="@id/tv_project_price_title" />
<TextView
android:id="@+id/tv_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:text="元"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="@id/et_project_price"
app:layout_constraintEnd_toEndOf="@id/et_project_price"
app:layout_constraintTop_toTopOf="@id/et_project_price" />
<TextView
android:id="@+id/tv_project_area_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_14"
android:text="项目地区"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_project_price" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_project_area_title"
app:layout_constraintTop_toTopOf="@id/tv_project_area_title" />
<TextView
android:id="@+id/tv_project_area"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:layout_margin="@dimen/dp_12"
android:background="@null"
android:drawableEnd="@mipmap/ic_arrow_dp18"
android:gravity="center_vertical"
android:hint="请选择地区"
android:maxLines="1"
android:paddingStart="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:singleLine="true"
android:textColor="@color/color_1a1a1a"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_14"
app:layout_constraintTop_toBottomOf="@id/tv_project_area_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
app:hl_cornerRadius="@dimen/dp_12"
app:hl_shadowColor="#0d4a4f5b"
app:hl_shadowLimit="@dimen/dp_7">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/dp_14">
<TextView
android:id="@+id/tv_project_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_14"
android:drawablePadding="@dimen/dp_6"
android:text="项目信息"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_image_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="(0/10)"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_14"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/tv_project_info_title"
app:layout_constraintStart_toEndOf="@id/tv_project_info_title"
app:layout_constraintTop_toTopOf="@id/tv_project_info_title" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_image_count"
app:layout_constraintTop_toTopOf="@id/tv_project_info_title" />
<RadioGroup
android:id="@+id/rg_project_info_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:background="@drawable/shape_f3f7ff_cor25"
android:gravity="center"
android:orientation="horizontal"
android:padding="@dimen/dp_2"
app:layout_constraintBottom_toBottomOf="@id/tv_project_info_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_project_info_title">
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_24"
android:background="@drawable/selector_project_info_tab_bg"
android:button="@null"
android:checked="true"
android:gravity="center"
android:paddingStart="@dimen/dp_10"
android:paddingEnd="@dimen/dp_10"
android:text="文本"
android:textColor="@drawable/selector_project_info_tab_text_color"
android:textSize="@dimen/sp_12" />
<RadioButton
android:id="@+id/rb2"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_24"
android:background="@drawable/selector_project_info_tab_bg"
android:button="@null"
android:gravity="center"
android:paddingStart="@dimen/dp_10"
android:paddingEnd="@dimen/dp_10"
android:text="图片"
android:textColor="@drawable/selector_project_info_tab_text_color"
android:textSize="@dimen/sp_12" />
</RadioGroup>
<TextView
android:id="@+id/tv_image_limit_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_6"
android:text="您可以将项目文件拍照后上传单张不得超过10M"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_10"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_project_info_title" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_project_info"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_12"
android:background="@null"
android:gravity="start|top"
android:hint="请复制招标文档中的文本粘贴至此处,也可以自己撰写..."
android:maxLength="20000"
android:padding="@dimen/dp_12"
android:textColor="@color/color_1a1a1a"
android:textColorHint="@color/color_bcbcbc"
android:textSize="@dimen/sp_14"
app:layout_constraintDimensionRatio="h,319:200"
app:layout_constraintTop_toBottomOf="@id/tv_image_limit_tip" />
<TextView
android:id="@+id/tv_text_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_8"
android:layout_marginBottom="@dimen/dp_8"
android:text="0/20000"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_10"
app:layout_constraintBottom_toBottomOf="@id/et_project_info"
app:layout_constraintEnd_toEndOf="@id/et_project_info" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_images"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_6"
android:layout_marginTop="@dimen/dp_7"
android:layout_marginEnd="@dimen/dp_6"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintTop_toBottomOf="@id/tv_image_limit_tip"
app:spanCount="5"
tools:itemCount="1"
tools:listitem="@layout/listitem_add_bid_img" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
app:hl_cornerRadius="@dimen/dp_12"
app:hl_shadowColor="#0d4a4f5b"
app:hl_shadowLimit="@dimen/dp_7">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_14"
android:paddingBottom="@dimen/dp_14">
<TextView
android:id="@+id/tv_project_files_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/dp_6"
android:text="项目文件"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_file_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="(0/5)"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="@id/tv_project_files_title"
app:layout_constraintStart_toEndOf="@id/tv_project_files_title"
app:layout_constraintTop_toTopOf="@id/tv_project_files_title" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_file_count"
app:layout_constraintTop_toTopOf="@id/tv_file_count" />
<TextView
android:id="@+id/tv_file_limit_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_6"
android:text="上传文件或者其他附件每个文件不得超过5M"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_project_files_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_files"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_4"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@id/tv_file_limit_tip"
tools:itemCount="1"
tools:listitem="@layout/listitem_publish_bid_file" />
<TextView
android:id="@+id/tv_upload_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:drawableStart="@mipmap/ic_upload_file"
android:drawablePadding="@dimen/dp_2"
android:gravity="center"
android:text="上传PDF"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_files" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.lihang.ShadowLayout>
<com.lihang.ShadowLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_9"
android:layout_marginEnd="@dimen/dp_9"
app:hl_cornerRadius="@dimen/dp_12"
app:hl_shadowColor="#0d4a4f5b"
app:hl_shadowLimit="@dimen/dp_7">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_14"
android:paddingBottom="@dimen/dp_14">
<TextView
android:id="@+id/tv_contacts_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/dp_6"
android:text="联系人信息"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:text="*"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/dp_15"
app:layout_constraintStart_toEndOf="@id/tv_contacts_info_title"
app:layout_constraintTop_toTopOf="@id/tv_contacts_info_title" />
<TextView
android:id="@+id/tv_contacts_limit_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_6"
android:text="至少有一个联系人"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_contacts_info_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_4"
android:layout_marginEnd="@dimen/dp_12"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@id/tv_contacts_limit_tip"
tools:itemCount="1"
tools:listitem="@layout/listitem_publish_bid_contacts" />
<TextView
android:id="@+id/tv_add_contacts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:drawableStart="@mipmap/ic_add_contacts"
android:drawablePadding="@dimen/dp_2"
android:gravity="center"
android:text="添加联系人"
android:textColor="@color/color_ff493c"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rv_contacts" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.lihang.ShadowLayout>
<Space
android:layout_width="match_parent"
android:layout_height="@dimen/dp_15" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:paddingStart="@dimen/dp_16"
android:paddingTop="@dimen/dp_9"
android:paddingEnd="@dimen/dp_16"
android:paddingBottom="@dimen/dp_30"
app:layout_constraintBottom_toBottomOf="parent">
<com.cheng.bole.widget.CommonShapeView
android:id="@+id/btn_next"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_46"
android:fontFamily="sans-serif-medium"
android:text="提交"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
app:csb_cornerRadius="@dimen/dp_10"
app:csb_fillColor="@color/color_125ffe"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.example.base.widget.TitleBar
android:id="@+id/mTitleBar"
style="@style/Custom.TitleBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_back_black"
app:title=" " />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/dp_6"
app:layout_constraintDimensionRatio="h,1:1"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_add_image"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
android:src="@mipmap/ic_add_bid_image"
app:layout_constraintBottom_toBottomOf="@id/iv_image"
app:layout_constraintEnd_toEndOf="@id/iv_image"
app:layout_constraintStart_toStartOf="@id/iv_image"
app:layout_constraintTop_toTopOf="@id/iv_image" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_delete_bid_image"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="招标公告"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_52"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:text="郭女士"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_10"
android:layout_weight="1"
android:text="15826433067"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_14" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:src="@mipmap/ic_edit_contacts" />
</LinearLayout>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_54">
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12"
android:drawableStart="@mipmap/ic_pdf_attachment"
android:drawablePadding="@dimen/dp_12"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:singleLine="true"
android:text="25年发票·pdf"
android:textColor="@color/color_1a1a1a"
android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_delete"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_12"
android:src="@mipmap/ic_delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:layout_marginStart="@dimen/dp_54"
android:background="@color/color_eeeeee"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

View File

@ -84,4 +84,5 @@
<color name="color_2a80fc">#2A80FC</color>
<color name="color_f8f9fa">#F8F9FA</color>
<color name="color_3bbf0f">#3BBF0F</color>
<color name="color_707a89">#707A89</color>
</resources>