Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
Scan QR Code Barcode Reader
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Scan QR Code Barcode Reader
Commits
2e4888a5
Commit
2e4888a5
authored
Jan 06, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...修复常驻起来的时间
parent
e55bfa32
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
805 additions
and
14 deletions
+805
-14
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+8
-2
MyApplication.kt
app/src/main/java/com/base/scanqr/MyApplication.kt
+6
-5
MessageUIBean.kt
app/src/main/java/com/base/scanqr/bean/MessageUIBean.kt
+33
-0
EventUtils.kt
app/src/main/java/com/base/scanqr/helper/EventUtils.kt
+1
-3
StayJobService.kt
app/src/main/java/com/base/scanqr/service/StayJobService.kt
+9
-2
CreateFragment.kt
app/src/main/java/com/base/scanqr/ui/main/CreateFragment.kt
+7
-1
MainActivity.kt
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
+0
-1
MessageActivity.kt
...c/main/java/com/base/scanqr/ui/message/MessageActivity.kt
+74
-0
MessageCodeActivity.kt
...in/java/com/base/scanqr/ui/message/MessageCodeActivity.kt
+137
-0
activity_message.xml
app/src/main/res/layout/activity_message.xml
+171
-0
activity_message_code.xml
app/src/main/res/layout/activity_message_code.xml
+359
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
2e4888a5
...
...
@@ -7,7 +7,7 @@
android:required=
"false"
/>
<uses-feature
android:name=
"android.hardware.telephony"
android:required=
"false"
/>
<!---->
android:required=
"false"
/>
<!--
-->
<!-- 获取wifi列表 -->
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
...
...
@@ -16,7 +16,7 @@
<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"
/>
...
...
@@ -35,6 +35,12 @@
android:supportsRtl=
"true"
android:theme=
"@style/Theme.ScanQR"
tools:targetApi=
"31"
>
<activity
android:name=
".ui.message.MessageCodeActivity"
android:exported=
"false"
/>
<activity
android:name=
".ui.message.MessageActivity"
android:exported=
"false"
/>
<activity
android:name=
".ui.contact.ContractCodeActivity"
android:exported=
"false"
/>
...
...
app/src/main/java/com/base/scanqr/MyApplication.kt
View file @
2e4888a5
...
...
@@ -29,7 +29,6 @@ import com.base.scanqr.ui.start.StartActivity
import
com.base.scanqr.utils.ActivityManagerUtils
import
com.base.scanqr.utils.AppPreferences
import
com.base.scanqr.utils.LogEx
import
com.base.scanqr.utils.SolarEngineUtils
import
com.base.scanqr.utils.SolarEngineUtils.initSolarEngine
import
com.base.scanqr.utils.SolarEngineUtils.solarkey
import
com.base.scanqr.utils.WriteLogEx.writeLogFile
...
...
@@ -117,6 +116,12 @@ class MyApplication : Application() {
}
private
fun
initApp
()
{
//前台服务
kotlin
.
runCatching
{
startJob
()
}
//初始化广告相关业务
AdsMgr
.
init
(
appContext
)
...
...
@@ -148,10 +153,6 @@ class MyApplication : Application() {
//开启通知队列
MyNotificationManager
.
startNotificationQueue
()
//前台服务
kotlin
.
runCatching
{
startJob
()
}
appContext
.
initSolarEngine
(
true
)
}
...
...
app/src/main/java/com/base/scanqr/bean/MessageUIBean.kt
0 → 100644
View file @
2e4888a5
package
com.base.scanqr.bean
//smsto:17780524024:问问嗯嗯嗯
data class
MessageUIBean
(
var
smsto
:
String
=
""
,
var
msg
:
String
=
""
)
:
ScanBean
(
FunctionUIBean
.
KEY_MESSAGE
)
{
companion
object
{
fun
isMessageQR
(
qrCodeValue
:
String
):
Boolean
{
if
(
qrCodeValue
.
startsWith
(
"smsto:"
))
{
return
true
}
return
false
}
fun
createMessageQrString
(
bean
:
MessageUIBean
):
String
{
val
qrContent
=
StringBuilder
()
qrContent
.
append
(
"smsto:"
).
append
(
bean
.
smsto
).
append
(
":"
).
append
(
bean
.
msg
)
return
qrContent
.
toString
()
}
fun
createMessageBean
(
qrCodeValue
:
String
):
MessageUIBean
{
val
messageUIBean
=
MessageUIBean
()
val
split
=
qrCodeValue
.
split
(
":"
)
kotlin
.
runCatching
{
messageUIBean
.
smsto
=
split
[
1
]
messageUIBean
.
msg
=
split
[
2
]
}
return
messageUIBean
}
}
}
app/src/main/java/com/base/scanqr/helper/EventUtils.kt
View file @
2e4888a5
...
...
@@ -31,8 +31,6 @@ object EventUtils {
if
(!
ifAgreePrivacy
)
{
return
}
LogEx
.
logDebug
(
TAG
,
"key=$key ext=$ext"
)
Thread
{
var
paramJson
:
String
?
=
""
try
{
...
...
@@ -65,7 +63,7 @@ object EventUtils {
}
catch
(
e
:
JSONException
)
{
paramJson
=
""
}
LogEx
.
logDebug
(
TAG
,
"key=$key url=$url"
)
//
LogEx.logDebug(TAG, "key=$key url=$url")
doPost
(
url
,
...
...
app/src/main/java/com/base/scanqr/service/StayJobService.kt
View file @
2e4888a5
...
...
@@ -34,14 +34,16 @@ class StayJobService : JobService() {
val
NOTIFICATION_STAY_ID
=
286
private
var
isRunning
=
false
private
const
val
JOB_INFO_ID
:
Int
=
101
private
var
startJobTime
=
0L
private
val
minimumLatency
=
if
(
BuildConfig
.
DEBUG
)
5000L
else
5000L
fun
Context
.
startJob
()
{
if
(
isRunning
)
return
LogEx
.
logDebug
(
TAG
,
"startJob"
)
startJobTime
=
System
.
currentTimeMillis
()
val
jobScheduler
=
getSystemService
(
JOB_SCHEDULER_SERVICE
)
as
JobScheduler
val
componentName
=
ComponentName
(
this
,
StayJobService
::
class
.
java
)
val
jobInfo
=
JobInfo
.
Builder
(
JOB_INFO_ID
,
componentName
)
.
setMinimumLatency
(
30000
)
.
setMinimumLatency
(
minimumLatency
)
.
build
()
jobScheduler
.
schedule
(
jobInfo
)
}
...
...
@@ -66,6 +68,8 @@ class StayJobService : JobService() {
startForeground
(
NOTIFICATION_STAY_ID
,
notification
)
}
isRunning
=
true
EventUtils
.
event
(
"startForeground"
)
LogEx
.
logDebug
(
TAG
,
"startForeground"
)
}
catch
(
e
:
Exception
)
{
EventUtils
.
event
(
"start_foreground_service_error"
)
}
...
...
@@ -86,6 +90,9 @@ class StayJobService : JobService() {
override
fun
onCreate
()
{
LogEx
.
logDebug
(
TAG
,
"onCreate isRunning=$isRunning"
)
if
(!
isRunning
)
{
val
startTime
=
System
.
currentTimeMillis
()
-
startJobTime
LogEx
.
logDebug
(
TAG
,
"onCreate startTime=$startTime"
)
EventUtils
.
event
(
"StayJobService_onCreate"
,
"startTime=$startTime"
)
isRunning
=
true
startForeground
()
Timer
().
start
()
...
...
app/src/main/java/com/base/scanqr/ui/main/CreateFragment.kt
View file @
2e4888a5
...
...
@@ -11,6 +11,7 @@ import com.base.scanqr.bean.FunctionUIBean
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_CONTACT
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EMAIL
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EVENT
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_MESSAGE
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TELEPHONE
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TEXT
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE
...
...
@@ -19,6 +20,7 @@ import com.base.scanqr.databinding.FragmentCreateBinding
import
com.base.scanqr.ui.contact.ContractActivity
import
com.base.scanqr.ui.email.EmailActivity
import
com.base.scanqr.ui.event.EventActivity
import
com.base.scanqr.ui.message.MessageActivity
import
com.base.scanqr.ui.telephone.TelephoneActivity
import
com.base.scanqr.ui.text.TextActivity
import
com.base.scanqr.ui.website.WebsiteActivity
...
...
@@ -47,7 +49,7 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean
(
KEY_CONTACT
,
R
.
mipmap
.
h_contact
,
resources
.
getString
(
R
.
string
.
contact
)),
// FunctionUIBean(KEY_LOCATION, R.mipmap.h_loction, resources.getString(R.string.location)),
FunctionUIBean
(
KEY_TELEPHONE
,
R
.
mipmap
.
h_telephone
,
resources
.
getString
(
R
.
string
.
telephone
)),
//
FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)),
FunctionUIBean
(
KEY_MESSAGE
,
R
.
mipmap
.
h_message
,
resources
.
getString
(
R
.
string
.
message
)),
)
)
adapter
?.
itemClick
=
{
key
->
...
...
@@ -100,6 +102,10 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
KEY_CONTACT
->
{
startActivity
(
Intent
(
requireContext
(),
ContractActivity
::
class
.
java
))
}
KEY_MESSAGE
->
{
startActivity
(
Intent
(
requireContext
(),
MessageActivity
::
class
.
java
))
}
}
}
...
...
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
View file @
2e4888a5
...
...
@@ -2,7 +2,6 @@ package com.base.scanqr.ui.main
import
android.content.Intent
import
android.graphics.Color
import
android.util.Log
import
android.view.LayoutInflater
import
android.widget.TextView
import
androidx.activity.addCallback
...
...
app/src/main/java/com/base/scanqr/ui/message/MessageActivity.kt
0 → 100644
View file @
2e4888a5
package
com.base.scanqr.ui.message
import
android.content.Intent
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
androidx.core.widget.addTextChangedListener
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.bean.MessageUIBean
import
com.base.scanqr.databinding.ActivityMessageBinding
import
com.base.scanqr.utils.BarUtils
import
com.base.scanqr.utils.ToastUtils.toast
import
com.google.gson.Gson
class
MessageActivity
:
BaseActivity
<
ActivityMessageBinding
>(
ActivityMessageBinding
::
inflate
)
{
private
var
messageUIBean
=
MessageUIBean
()
override
fun
onResumeOneShoot
()
{
super
.
onResumeOneShoot
()
val
flag
=
changeLanguage
()
if
(
flag
)
return
}
override
fun
initView
()
{
super
.
initView
()
binding
.
clTop
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_app_exit
)
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
AdsMgr
.
showInsert
(
this
@MessageActivity
,
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
.
editPhone
.
addTextChangedListener
{
s
->
messageUIBean
.
smsto
=
s
.
toString
()
}
binding
.
editContent
.
addTextChangedListener
{
s
->
messageUIBean
.
msg
=
s
.
toString
()
}
binding
.
flQueren
.
setOnClickListener
{
if
(
messageUIBean
.
smsto
.
isEmpty
())
{
toast
(
"Enter phone number"
,
true
)
return
@setOnClickListener
}
if
(
messageUIBean
.
msg
.
isEmpty
())
{
toast
(
"Enter your message here..."
,
true
)
return
@setOnClickListener
}
startActivity
(
Intent
(
this
,
MessageCodeActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
messageUIBean
))
})
finish
()
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/ui/message/MessageCodeActivity.kt
0 → 100644
View file @
2e4888a5
package
com.base.scanqr.ui.message
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.bean.FunctionUIBean
import
com.base.scanqr.bean.MessageUIBean
import
com.base.scanqr.databinding.ActivityMessageCodeBinding
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.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
MessageCodeActivity
:
BaseActivity
<
ActivityMessageCodeBinding
>(
ActivityMessageCodeBinding
::
inflate
)
{
private
var
messageUIBean
=
MessageUIBean
()
private
var
messageQrString
=
""
private
var
tempImage
:
String
=
""
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
{
messageUIBean
=
Gson
().
fromJson
(
data
,
MessageUIBean
::
class
.
java
)
binding
.
tvTel
.
text
=
messageUIBean
.
smsto
binding
.
tvMsg
.
text
=
messageUIBean
.
msg
}
Thread
{
messageQrString
=
MessageUIBean
.
createMessageQrString
(
messageUIBean
)
LogEx
.
logDebug
(
TAG
,
"messageQrString=$messageQrString"
)
val
bitmap
=
generateQRCode
(
messageQrString
,
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
(
messageUIBean
.
needCreate
)
{
messageUIBean
.
needCreate
=
false
SpJsonUtils
.
addJsonBean
<
MessageUIBean
>(
FunctionUIBean
.
KEY_MESSAGE
,
messageUIBean
)
}
}
}.
start
()
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
AdsMgr
.
showInsert
(
this
@MessageCodeActivity
,
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
,
messageQrString
)
toast
(
"Copied to clipboard"
,
true
)
}
binding
.
flSearch
.
setOnClickListener
{
// val intent = intentAddCalendar(eventUIBean)
// try {
// startActivity(intent)
// finish()
// } catch (e: Exception) {
// toast("No application was found to handle the calendar event request", true)
// }
}
}
}
\ No newline at end of file
app/src/main/res/layout/activity_message.xml
0 → 100644
View file @
2e4888a5
<?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:id=
"@+id/main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.website.WebsiteActivity"
>
<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/message"
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"
/>
<FrameLayout
android:id=
"@+id/fl_queren"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"20dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/queren"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
app:layout_constraintTop_toBottomOf=
"@id/cl_top"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"18dp"
android:text=
"@string/phone"
android:textColor=
"#6473F8"
android:textSize=
"16sp"
/>
<EditText
android:id=
"@+id/editPhone"
android:layout_width=
"match_parent"
android:layout_height=
"52dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"8dp"
android:layout_marginBottom=
"8dp"
android:background=
"@drawable/bg_f4f4f4_15"
android:hint=
"@string/to"
android:inputType=
"phone"
android:paddingHorizontal=
"14dp"
android:textColor=
"@color/black"
android:textColorHint=
"#999999"
tools:ignore=
"Autofill"
/>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"20dp"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:text=
"@string/content"
android:textColor=
"#6473F8"
android:textSize=
"16sp"
tools:ignore=
"TextContrastCheck"
/>
<TextView
android:id=
"@+id/tv_number"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical|end"
android:text=
"1000"
android:textColor=
"#999999"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText,TextContrastCheck"
/>
</FrameLayout>
<EditText
android:id=
"@+id/editContent"
android:layout_width=
"match_parent"
android:layout_height=
"124dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"8dp"
android:background=
"@drawable/bg_f4f4f4_15"
android:gravity=
"start"
android:hint=
"@string/enter_your_text_here"
android:padding=
"15dp"
android:textColorHint=
"#999999"
android:textSize=
"16sp"
tools:ignore=
"Autofill,TextFields,TextContrastCheck,VisualLintTextFieldSize"
/>
<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=
"16dp"
android:background=
"@drawable/bg_ecf6ff_10"
android:minHeight=
"258dp"
android:paddingTop=
"20dp"
android:paddingBottom=
"20dp"
app:layout_constraintBottom_toBottomOf=
"parent"
>
<io.supercharge.shimmerlayout.ShimmerLayout
android:id=
"@+id/shimmerLayout"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
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/zhanweitu"
tools:ignore=
"ContentDescription,ImageContrastCheck"
/>
</io.supercharge.shimmerlayout.ShimmerLayout>
</com.base.scanqr.ads.NativeParentView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_message_code.xml
0 → 100644
View file @
2e4888a5
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment