Commit c41c9a24 authored by wanglei's avatar wanglei

...

parent 59d0e3ae
......@@ -4,9 +4,10 @@
<uses-feature
android:name="android.hardware.camera"
android:required="false" /> <!-- 获取wifi列表 -->
<!-- 获取wifi列表 -->
<!-- 获取wifi列表 -->
android:required="false" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" /> <!---->
<!-- 获取wifi列表 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
......@@ -15,15 +16,13 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" /> <!-- 前台服务 -->
<!-- 前台服务 -->
<!-- 前台服务 -->
<!-- 前台服务 -->
<uses-permission android:name="android.permission.CAMERA" /> <!---->
<!-- 前台服务 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
......
package com.base.scanqr.ui.contact
import android.Manifest
import android.os.Environment
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.ads.AdsShowCallBack
import com.base.scanqr.base.BaseActivity
import com.base.scanqr.databinding.ActivityContractBinding
import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.databinding.ActivityContractCodeBinding
import com.base.scanqr.ui.widget.InputNameDialog.showInputNameDialog
import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.IntentUtils.intentWriteContract
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeUtils.generateQRCode
import com.base.scanqr.utils.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson
import java.io.File
class ContractCodeActivity : BaseActivity<ActivityContractBinding>(ActivityContractBinding::inflate) {
class ContractCodeActivity : BaseActivity<ActivityContractCodeBinding>(ActivityContractCodeBinding::inflate) {
private var contractUIBean = ContractUIBean()
private var tempImage: String = ""
private var contractQrString = ""
override fun onResumeOneShoot() {
super.onResumeOneShoot()
val flag = changeLanguage()
if (flag) return
AdsMgr.showBanner(binding.flBanner, false)
}
override fun initView() {
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_item)
val data = intent.extras?.getString("data")
data?.let {
contractUIBean = Gson().fromJson(data, ContractUIBean::class.java)
binding.tvName.text = contractUIBean.n
binding.tvTel.text = contractUIBean.tel
binding.tvEmail.text = contractUIBean.email
binding.tvAddress.text = contractUIBean.adr
}
Thread {
contractQrString = ContractUIBean.createContractQrString(contractUIBean)
LogEx.logDebug(TAG, "contractQrString=$contractQrString")
val bitmap = generateQRCode(contractQrString, 735, 735, 5)
runOnUiThread {
binding.ivQr.setImageBitmap(bitmap)
val file = File(cacheDir, System.currentTimeMillis().toString() + ".jpg")
bitmap?.let {
val flag = saveBitmapToFile(it, file.absolutePath)
LogEx.logDebug(TAG, "flag=$flag tempImage=${file.absolutePath}")
if (flag) {
tempImage = file.absolutePath
}
}
if (contractUIBean.needCreate) {
contractUIBean.needCreate = false
SpJsonUtils.addJsonBean<ContractUIBean>(FunctionUIBean.KEY_CONTACT, contractUIBean)
}
}
}.start()
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
AdsMgr.showInsert(this@ContractCodeActivity, false, object : AdsShowCallBack() {
override fun close(where: Int) {
finishToMainTop()
}
override fun failed(where: Int) {
finishToMainTop()
}
override fun googleFailed(where: Int) {
finishToMainTop()
}
})
}
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.llShare.setOnClickListener {
val intent = intentShareImage(this, tempImage)
runCatching {
startActivity(intent)
}
}
binding.llPdf.setOnClickListener {
toast("没实现")
}
binding.llDownload.setOnClickListener {
kotlin.runCatching {
val appFile = File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
this.resources.getString(R.string.app_name)
)
if (!appFile.exists()) appFile.mkdirs()
var newName = File(tempImage).name
showInputNameDialog(newName) { name ->
if (name.endsWith(".jpg")) {
name.also { newName = it }
} else {
newName = "$name.jpg"
}
val downFile = File(appFile, newName)
downFile.createNewFile()
File(tempImage).copyTo(downFile, true)
toast("Save to:${appFile.absolutePath}", true)
}
}
}
binding.llCopy.setOnClickListener {
copyText(TAG, contractQrString)
toast("Copied to clipboard", true)
}
launcher.launch(arrayOf(Manifest.permission.WRITE_CONTACTS)) {
}
binding.flSearch.setOnClickListener {
try {
val intent = intentWriteContract(contractUIBean)
startActivity(intent)
} catch (e: Exception) {
toast("No application was found to handle the add contract", true)
}
}
}
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import android.view.ViewGroup
import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.bean.AdScanBean
import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.EventUIBean
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_CONTACT
......@@ -85,7 +86,9 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
}
KEY_CONTACT -> {
if (item is ContractUIBean) {
binding.ivIcon.setImageResource(R.mipmap.h_contact)
}
}
KEY_WEBSITE -> {
......
......@@ -12,6 +12,7 @@ import com.base.scanqr.bean.AdScanBean
import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.ScanBean
import com.base.scanqr.databinding.FragmentHistoryBinding
import com.base.scanqr.ui.contact.ContractCodeActivity
import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.event.EventCodeActivity
import com.base.scanqr.ui.product.ProductCodeActivity
......@@ -113,6 +114,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind
putExtra("data", Gson().toJson(item))
})
}
FunctionUIBean.KEY_CONTACT -> {
activity?.startActivity(Intent(activity, ContractCodeActivity::class.java).apply {
putExtra("data", Gson().toJson(item))
})
}
}
}
......
......@@ -2,6 +2,7 @@ package com.base.scanqr.ui.main
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.EventUIBean
import com.base.scanqr.bean.FunctionUIBean
......@@ -42,6 +43,8 @@ class HistoryViewModel() : ViewModel() {
eventList.forEach { it.listContent = it.summary }
val telephoneList = SpJsonUtils.getSpJsonList<TelephoneUIBean>(FunctionUIBean.KEY_TELEPHONE)
telephoneList.forEach { it.listContent = it.tel }
val contractList = SpJsonUtils.getSpJsonList<ContractUIBean>(FunctionUIBean.KEY_CONTACT)
contractList.forEach { it.listContent = it.n }
historyList.addAll(wifiList)
historyList.addAll(textList)
......@@ -50,6 +53,7 @@ class HistoryViewModel() : ViewModel() {
historyList.addAll(productList)
historyList.addAll(eventList)
historyList.addAll(telephoneList)
historyList.addAll(contractList)
historyList.forEach {
LogEx.logDebug(TAG, "${it.scanType} ${it.createTime} ${it.createType} ${it.listContent}")
......@@ -85,7 +89,9 @@ class HistoryViewModel() : ViewModel() {
}
FunctionUIBean.KEY_CONTACT -> {
SpJsonUtils.removeJsonBean<ContractUIBean>(bean.scanType, bean as ContractUIBean, removeIf = { it1, it2 ->
it1.createTime == it2.createTime
})
}
FunctionUIBean.KEY_WEBSITE -> {
......
......@@ -13,6 +13,8 @@ import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.ads.AdsShowCallBack
import com.base.scanqr.base.BaseFragment
import com.base.scanqr.bean.ContractUIBean.Companion.createContractBean
import com.base.scanqr.bean.ContractUIBean.Companion.isContractQR
import com.base.scanqr.bean.EmailUIBean.Companion.createEmailBean
import com.base.scanqr.bean.EmailUIBean.Companion.isEmailQR
import com.base.scanqr.bean.EventUIBean.Companion.createEventBean
......@@ -28,6 +30,7 @@ import com.base.scanqr.bean.WifiUIBean.Companion.createWifiBean
import com.base.scanqr.bean.WifiUIBean.Companion.isWifiQR
import com.base.scanqr.databinding.FragmentScanBinding
import com.base.scanqr.qr.QRImageAnalyzer
import com.base.scanqr.ui.contact.ContractCodeActivity
import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.event.EventCodeActivity
import com.base.scanqr.ui.product.ProductCodeActivity
......@@ -146,6 +149,24 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
})
return
}
if (isContractQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, false, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpContractCodeActivity(activity, qrCodeValue)
}
override fun failed(where: Int) {
jumpContractCodeActivity(activity, qrCodeValue)
}
override fun googleFailed(where: Int) {
jumpContractCodeActivity(activity, qrCodeValue)
}
})
return
}
if (isTelephoneQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
......@@ -263,6 +284,15 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
}
}
private fun jumpContractCodeActivity(activity: MainActivity, qrCodeValue: String) {
activity.startActivity(Intent(activity, ContractCodeActivity::class.java).apply {
val bean = createContractBean(qrCodeValue)
bean.needCreate = true
bean.createType = CREATE_TYPE_SCAN
putExtra("data", Gson().toJson(bean))
})
}
private fun jumpTelephoneCodeActivity(activity: MainActivity, qrCodeValue: String) {
activity.startActivity(Intent(activity, TelephoneCodeActivity::class.java).apply {
val bean = createTelephoneBean(qrCodeValue)
......
......@@ -45,10 +45,10 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
override fun initView() {
super.initView()
startActivity(Intent(this, ContractActivity::class.java))
finish()
return
//
// startActivity(Intent(this, ContractActivity::class.java))
// finish()
// return
NotificationHoverUtils.stopNotificationHandler()
......
package com.base.scanqr.utils
import android.content.ContentValues
import android.content.Context
import android.content.Intent
import android.net.Uri
......@@ -8,6 +9,7 @@ import android.provider.CalendarContract
import android.provider.ContactsContract
import android.provider.Settings
import androidx.core.content.FileProvider
import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.EventUIBean
import java.io.File
......@@ -128,4 +130,27 @@ object IntentUtils {
val shareIntent = Intent.createChooser(callIntent, null)
return shareIntent
}
fun intentWriteContract(bean: ContractUIBean): Intent {
val intent = Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI)
intent.putExtra(ContactsContract.Intents.Insert.NAME, bean.n)
intent.putExtra(ContactsContract.Intents.Insert.PHONE, bean.tel)
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, bean.email)
//竞品拿个公司地址,受不了
intent.putExtra(ContactsContract.Intents.Insert.COMPANY, bean.adr)
// val values = ContentValues().apply {
// put(
// ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
// ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER
// )
// put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, bean.adr)
// }
// val dataArrayList = ArrayList<ContentValues>()
// dataArrayList.add(values)
//
// intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA,dataArrayList)
val shareIntent = Intent.createChooser(intent, null)
return shareIntent
}
}
\ No newline at end of file
......@@ -25,6 +25,10 @@ object PermissionUtils {
fun Context.checkContactsReadPermission(): Boolean {
return PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
}
fun Context.checkContactsWritePermission(): Boolean {
return PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS)
}
//endregion
//region 相机
......
......@@ -5,6 +5,378 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.contact.ContractCodeActivity">
android:background="@color/white"
tools:context=".ui.text.TextCodeActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/contact"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/fl_back"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/fl_banner"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="195dp"
android:layout_height="195dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
app:cardCornerRadius="20dp"
app:cardElevation="5dp">
<ImageView
android:id="@+id/iv_qr"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleType="fitXY"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<com.base.scanqr.ads.NativeParentView
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp"
android:background="@drawable/bg_ecf6ff_20"
android:minHeight="133dp">
<io.supercharge.shimmerlayout.ShimmerLayout
android:id="@+id/shimmerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
app:shimmer_angle="25"
app:shimmer_animation_duration="2000"
app:shimmer_auto_start="true"
app:shimmer_color="#33ffffff"
app:shimmer_mask_width="0.2">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@mipmap/czhanweitu"
tools:ignore="ContentDescription,ImageContrastCheck" />
</io.supercharge.shimmerlayout.ShimmerLayout>
</com.base.scanqr.ads.NativeParentView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="8dp"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="15dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="14dp"
android:layout_marginTop="12dp"
android:textColor="#666666"
android:textSize="14sp"
android:textStyle="bold"
tools:text="Summary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="17dp"
android:src="@mipmap/phoneicon"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tvTel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="5dp"
android:textColor="@color/black"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="17dp"
android:src="@mipmap/youxiang"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tvEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="5dp"
android:textColor="@color/black"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="17dp"
android:src="@mipmap/weizhi"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tvAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="5dp"
android:textColor="@color/black"
android:textSize="14sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginHorizontal="14dp"
android:layout_marginTop="8dp"
android:background="#E2E2E2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="98dp"
android:layout_marginVertical="8dp"
app:layout_constraintBottom_toTopOf="@id/fl_search"
app:layout_constraintTop_toBottomOf="@id/ll_content"
tools:ignore="DisableBaselineAlignment">
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/w_share"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/share"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_pdf"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/w_export"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/export_to_pdf"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_download"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/w_download"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/download"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_copy"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/w_copy"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/copy"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/fl_search"
android:layout_width="171dp"
android:layout_height="30dp"
android:layout_marginBottom="12dp"
android:background="@drawable/bg_stroke_6473f8_90"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
tools:ignore="UseCompoundDrawables,UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/h_lianjie"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:includeFontPadding="false"
android:text="@string/search_on_the_web"
android:textColor="#6473F8"
android:textSize="11sp" />
</LinearLayout>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<FrameLayout
android:id="@id/fl_banner"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
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