<component name="ProjectCodeStyleConfiguration"> | <component name="ProjectCodeStyleConfiguration"> | ||||
<code_scheme name="Project" version="173"> | <code_scheme name="Project" version="173"> | ||||
<ComposeCustomCodeStyleSettings> | |||||
<option name="USE_CUSTOM_FORMATTING_FOR_MODIFIERS" value="false" /> | |||||
</ComposeCustomCodeStyleSettings> | |||||
<DBN-PSQL> | |||||
<case-options enabled="true"> | |||||
<option name="KEYWORD_CASE" value="lower" /> | |||||
<option name="FUNCTION_CASE" value="lower" /> | |||||
<option name="PARAMETER_CASE" value="lower" /> | |||||
<option name="DATATYPE_CASE" value="lower" /> | |||||
<option name="OBJECT_CASE" value="preserve" /> | |||||
</case-options> | |||||
<formatting-settings enabled="false" /> | |||||
</DBN-PSQL> | |||||
<DBN-SQL> | |||||
<case-options enabled="true"> | |||||
<option name="KEYWORD_CASE" value="lower" /> | |||||
<option name="FUNCTION_CASE" value="lower" /> | |||||
<option name="PARAMETER_CASE" value="lower" /> | |||||
<option name="DATATYPE_CASE" value="lower" /> | |||||
<option name="OBJECT_CASE" value="preserve" /> | |||||
</case-options> | |||||
<formatting-settings enabled="false"> | |||||
<option name="STATEMENT_SPACING" value="one_line" /> | |||||
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" /> | |||||
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" /> | |||||
</formatting-settings> | |||||
</DBN-SQL> | |||||
<JavaCodeStyleSettings> | |||||
<option name="JD_ALIGN_PARAM_COMMENTS" value="false" /> | |||||
<option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" /> | |||||
<option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" /> | |||||
<option name="JD_PRESERVE_LINE_FEEDS" value="true" /> | |||||
</JavaCodeStyleSettings> | |||||
<JetCodeStyleSettings> | <JetCodeStyleSettings> | ||||
<option name="SPACE_AROUND_RANGE" value="true" /> | <option name="SPACE_AROUND_RANGE" value="true" /> | ||||
<option name="SPACE_BEFORE_TYPE_COLON" value="true" /> | <option name="SPACE_BEFORE_TYPE_COLON" value="true" /> |
<component name="CopyrightManager"> | |||||
<settings> | |||||
<LanguageOptions name="__TEMPLATE__"> | |||||
<option name="relativeBefore" value="false" /> | |||||
</LanguageOptions> | |||||
</settings> | |||||
</component> |
<component name="ProjectDictionaryState"> | |||||
<dictionary name="suliang" /> | |||||
</component> |
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/nav_service.xml" value="0.30520833333333336" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/nav_service.xml" value="0.30520833333333336" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/nav_statistics.xml" value="0.1" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/nav_statistics.xml" value="0.1" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/progress_center.xml" value="0.287962962962963" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/progress_center.xml" value="0.287962962962963" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/progress_statistics.xml" value="0.4425925925925926" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/progressbar_countdown_time.xml" value="0.45740740740740743" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_rounder_12_white.xml" value="0.5140625" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_rounder_12_white.xml" value="0.5140625" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_rounder_8_stroke_gray2.xml" value="0.48055555555555557" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_rounder_toplr_24_white.xml" value="0.5061538461538462" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_rounder_toplr_24_white.xml" value="0.5061538461538462" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_switch_thumb.xml" value="0.14074074074074075" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/shape_switch_thumb.xml" value="0.14074074074074075" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/spoken_autoplay_btn_text_color_.xml" value="0.5140625" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/spoken_autoplay_btn_text_color_.xml" value="0.5140625" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/switch_thumb_selector.xml" value="0.3768518518518518" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/switch_thumb_selector.xml" value="0.3768518518518518" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/switch_track_selector.xml" value="0.3768518518518518" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/switch_track_selector.xml" value="0.3768518518518518" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/test_error_state_button_bg.xml" value="0.45740740740740743" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/theme_splash_bg.xml" value="0.30520833333333336" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/drawable/theme_splash_bg.xml" value="0.30520833333333336" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout-v23/include_main_learn_center_course_type_title.xml" value="0.4963768115942029" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout-v23/include_main_learn_center_course_type_title.xml" value="0.4963768115942029" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_course_main.xml" value="0.33" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_course_main.xml" value="0.33" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_base.xml" value="0.4979166666666667" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_base.xml" value="0.4979166666666667" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_exam.xml" value="0.23632218844984804" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_exam_word.xml" value="0.33" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_exam_word.xml" value="0.33" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_word2.xml" value="0.4979166666666667" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_learn_word2.xml" value="0.4979166666666667" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_main.xml" value="0.5" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/activity_main.xml" value="0.5" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_first.xml" value="0.4979166666666667" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_first.xml" value="0.4979166666666667" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_learn_center.xml" value="0.25" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_learn_center.xml" value="0.25" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_my.xml" value="0.28229166666666666" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/fragment_my.xml" value="0.28229166666666666" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_learn_test_statistic.xml" value="0.35260416666666666" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_exam_spell_content.xml" value="0.45153985507246375" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_exam_word_choose_content.xml" value="0.45153985507246375" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_learn_test_statistic.xml" value="0.5" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_learn_title.xml" value="0.2373353596757852" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_over_number.xml" value="0.4979166666666667" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/inc_over_number.xml" value="0.4979166666666667" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/includ_test_option_item.xml" value="0.45153985507246375" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_main_learn_center_course_progress.xml" value="0.503125" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_main_learn_center_course_progress.xml" value="0.503125" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_main_learn_center_course_type_title.xml" value="0.67" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_main_learn_center_course_type_title.xml" value="0.67" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_recyclerview_smart_refresh_layout.xml" value="0.4979166666666667" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/src/main/res/layout/include_recyclerview_smart_refresh_layout.xml" value="0.4979166666666667" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_my.xml" value="0.44166666666666665" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_my.xml" value="0.44166666666666665" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_service.xml" value="0.21574074074074073" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_service.xml" value="0.21574074074074073" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_statistics.xml" value="0.44166666666666665" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_nav_statistics.xml" value="0.44166666666666665" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_right.xml" value="0.4425925925925926" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_spell.xml" value="0.5061538461538462" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_spell.xml" value="0.5061538461538462" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_spoken.xml" value="0.5061538461538462" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_spoken.xml" value="0.5061538461538462" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_voice.xml" value="0.5061538461538462" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_voice.xml" value="0.5061538461538462" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/app/svg/drawable/ic_wrong.xml" value="0.4425925925925926" /> | |||||
<entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/ic_back.xml" value="0.4148148148148148" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/ic_back.xml" value="0.4148148148148148" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/ic_search.xml" value="0.19814814814814816" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/ic_search.xml" value="0.19814814814814816" /> | ||||
<entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/loading_bg.xml" value="0.5061538461538462" /> | <entry key="..\:/Work/XKL/XKL/XklLocal/lib/common/src/main/res/drawable/loading_bg.xml" value="0.5061538461538462" /> |
implementation customDependencies.Lottie | implementation customDependencies.Lottie | ||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' | coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' | ||||
//Gson | |||||
implementation customDependencies.Gson | |||||
} | } |
* @param key String | * @param key String | ||||
* @param value T | * @param value T | ||||
*/ | */ | ||||
fun <T : Any> putData(key: String, value : T){ | |||||
fun <T : Any> putData(key: String = AppConfig.INTENT_1, value : T){ | |||||
dataMap[key] = value | dataMap[key] = value | ||||
} | } | ||||
* @return T | * @return T | ||||
*/ | */ | ||||
@Suppress("UNCHECKED_CAST") | @Suppress("UNCHECKED_CAST") | ||||
fun <T> getData(key : String) : T{ | |||||
fun <T> getData(key : String = AppConfig.INTENT_1) : T{ | |||||
return dataMap[key] as T | return dataMap[key] as T | ||||
} | } | ||||
val coursePackId: Long, | val coursePackId: Long, | ||||
val coursePackType: Int, | val coursePackType: Int, | ||||
val courseId: Long, | val courseId: Long, | ||||
val courseTitle : String, | |||||
val courseType: Int, | val courseType: Int, | ||||
val totalWords: Int, | val totalWords: Int, | ||||
val dbPathName: String | val dbPathName: String |
var right = hashMapOf<String, Int>() //正确条目数,key=>{chapter_id}_{lesson_id} value=>条目数量 | var right = hashMapOf<String, Int>() //正确条目数,key=>{chapter_id}_{lesson_id} value=>条目数量 | ||||
var wrong: HashMap<String, Int> = hashMapOf() //错误条目数,key=>{chapter_id}_{lesson_id} value=>条目数量 | var wrong: HashMap<String, Int> = hashMapOf() //错误条目数,key=>{chapter_id}_{lesson_id} value=>条目数量 | ||||
var lesson_learn_point: HashMap<String, Long> = hashMapOf() //章节学习点 key=>{chapter_id}_{lesson_id} value=>{entity_id) | var lesson_learn_point: HashMap<String, Long> = hashMapOf() //章节学习点 key=>{chapter_id}_{lesson_id} value=>{entity_id) | ||||
var exam_w_r_list: HashMap<String, bool> = hashMapOf() //课程/课时学前测试正确错误列表 key=> {chapter_id}_{lesson_id}_{entity_id} value=>正确 true;错误 false | |||||
var exam_w_r_list: HashMap<String, Boolean> = hashMapOf() //课程/课时学前测试正确错误列表 key=> {chapter_id}_{lesson_id}_{entity_id} value=>正确 true;错误 false | |||||
var course_learn_point: String = "" //课程学习进度点 {chapter_id}_{lesson_id}_{entity_id} | var course_learn_point: String = "" //课程学习进度点 {chapter_id}_{lesson_id}_{entity_id} | ||||
package com.xkl.cdl.data.bean.course | |||||
import com.google.gson.annotations.Expose | |||||
import java.io.Serializable | |||||
/** | |||||
* author suliang | |||||
* create 2021/9/9 17:49 | |||||
* Describe: 口语 对话对应数据实体 | |||||
*/ | |||||
data class DialogueSpokenItem(val id: Int, | |||||
val s_id: Int, | |||||
val role: String, | |||||
val title: String, | |||||
@Expose var sentence: String, | |||||
@Expose val explaination: String, | |||||
@Expose val analysis: String?, | |||||
val sort: Int):Serializable { | |||||
//是否收藏 收藏的id 为0则为未收藏 | |||||
var collectId : Long = 0 | |||||
} |
package com.xkl.cdl.data.bean.intentdata | |||||
import com.xkl.cdl.data.bean.course.DialogueSpokenItem | |||||
import com.xkl.cdl.data.bean.course.ExamBean | |||||
import com.xkl.cdl.data.bean.course.Lesson | |||||
import kotlin.collections.HashMap | |||||
/** | |||||
* author suliang | |||||
* create 2022/4/8 12:01 | |||||
* Describe: 测试传递数据 | |||||
* 学前总测: coursePackType, courseType, testData ,mExamWRMap | |||||
* 学后总测: coursePackType, courseType, testData | |||||
* 课时学前测: coursePackType, courseType, testData ,mExamWRMap,lesson | |||||
* 课时学后测: coursePackType, courseType, testData ,lesson. | |||||
* | |||||
*/ | |||||
data class ExamData( | |||||
val subjectId : Int, //项目类型 | |||||
val examType : Int, //测试类型 | |||||
val showTitle : String, //去测试本地显示名称,学前学后 为课程名称,课时前、后为课时名称 | |||||
val saveTitle : String, //测试试卷上传名称 : 学习中心:课程名称 + “ ” + 学习类型 课程测试:课程名称 + “ ” 学习类型 + (章节拼接名称) 词汇量测试:词汇量测试:阶段名称 | |||||
) { | |||||
var coursePackType:Int = 0 //课程包类型 | |||||
var courseType : Int= 0 //课程类型 | |||||
var testData : List<ExamBean>? = null //测试题数据 | |||||
var lesson : Lesson? = null //课时测试时必传 | |||||
// 课程/课时学前测试正确错误列表 key=> {chapter_id}_{lesson_id}_{entity_id} value=>正确 true;错误 false | |||||
var mExamWRMap : HashMap<String, Boolean>? = null | |||||
//学前总测试与章节前测试时学习错误集合 | |||||
var newErrorMap : HashMap<String, Boolean> = hashMapOf() | |||||
//口语对话测试数据: 仅在口语对话课时后测试中使用该课时的学习数据 | |||||
var allSentencesList : List<List<DialogueSpokenItem>>? = null | |||||
} |
package com.xkl.cdl.data.manager | |||||
/** | |||||
* author suliang | |||||
* create 2022/4/8 17:47 | |||||
* Describe: 用户数据管理 | |||||
*/ | |||||
object UserInfoManager { | |||||
} |
coursePackId, | coursePackId, | ||||
coursePackType, | coursePackType, | ||||
cursor.getLong(0), | cursor.getLong(0), | ||||
cursor.getString(2), | |||||
cursor.getInt(8), | cursor.getInt(8), | ||||
cursor.getInt(9), | cursor.getInt(9), | ||||
cursor.getString(10) | cursor.getString(10) |
import android.app.Application | import android.app.Application | ||||
import com.suliang.common.util.LogUtil | import com.suliang.common.util.LogUtil | ||||
import com.tencent.mmkv.MMKV | |||||
import net.sqlcipher.database.SQLiteDatabase | import net.sqlcipher.database.SQLiteDatabase | ||||
import java.util.* | import java.util.* | ||||
SQLiteDatabase.loadLibs(this) | SQLiteDatabase.loadLibs(this) | ||||
// ImageLoader.mStrategy = GlideLoaderStrategy() | // ImageLoader.mStrategy = GlideLoaderStrategy() | ||||
LogUtil.e(UUID.randomUUID().toString().replace("-","")) | LogUtil.e(UUID.randomUUID().toString().replace("-","")) | ||||
val rootDir = MMKV.initialize(this) | |||||
LogUtil.e(rootDir) | |||||
} | } |
package com.xkl.cdl.module.learn | package com.xkl.cdl.module.learn | ||||
import android.annotation.SuppressLint | |||||
import android.app.Activity | |||||
import android.content.Context | import android.content.Context | ||||
import android.content.Intent | import android.content.Intent | ||||
import androidx.appcompat.app.AppCompatActivity | import androidx.appcompat.app.AppCompatActivity | ||||
import android.os.Bundle | import android.os.Bundle | ||||
import androidx.lifecycle.ViewModelProvider | |||||
import androidx.viewbinding.ViewBinding | import androidx.viewbinding.ViewBinding | ||||
import com.suliang.common.AppConfig | import com.suliang.common.AppConfig | ||||
import com.suliang.common.base.activity.BaseActivityVM | |||||
import com.suliang.common.base.activity.UIBaseActivity | import com.suliang.common.base.activity.UIBaseActivity | ||||
import com.suliang.common.extension.click | |||||
import com.xkl.cdl.R | import com.xkl.cdl.R | ||||
import com.xkl.cdl.data.AppConstants | import com.xkl.cdl.data.AppConstants | ||||
import com.xkl.cdl.databinding.ActivityLearnExamWordBinding | |||||
import com.xkl.cdl.databinding.ActivityLearnSpellBinding | |||||
import com.xkl.cdl.databinding.* | |||||
import com.xkl.cdl.module.m_center_learn.CoursePackMainActivity | import com.xkl.cdl.module.m_center_learn.CoursePackMainActivity | ||||
/** | /** | ||||
* create 2022/4/6 19:18 | * create 2022/4/6 19:18 | ||||
* Describe: 测试界面 总测 课时测 | * Describe: 测试界面 总测 课时测 | ||||
*/ | */ | ||||
class LearnExamActivity : UIBaseActivity() { | |||||
class LearnExamActivity : BaseActivityVM<ActivityLearnExamBinding,LearnExamViewModel>() { | |||||
companion object { | companion object { | ||||
@JvmStatic | @JvmStatic | ||||
} | } | ||||
} | } | ||||
//拼写内容binding | |||||
private lateinit var spellBinding : IncExamSpellContentBinding | |||||
//选项内容binding | |||||
private lateinit var wordChooseBinding : IncExamWordChooseContentBinding | |||||
/** 音频测试、单词测试布局 */ | |||||
private var _normalBinding : ActivityLearnExamWordBinding? = null | |||||
/**布局 */ | |||||
private var _spellBinding : ActivityLearnSpellBinding? = null | |||||
override fun setContentView() { | |||||
_normalBinding = ActivityLearnExamWordBinding.inflate(layoutInflater) | |||||
setContentView(_normalBinding!!.root) | |||||
override fun initViewModel() : LearnExamViewModel { | |||||
return ViewModelProvider(this)[LearnExamViewModel::class.java] | |||||
} | } | ||||
override fun initActivity(savedInstanceState : Bundle?) { | override fun initActivity(savedInstanceState : Bundle?) { | ||||
when(vm.intentData.courseType){ | |||||
AppConstants.COURSE_TYPE_ENGLISH_SPELL -> { | |||||
spellBinding = IncExamSpellContentBinding.inflate(layoutInflater,binding.containerLayout,true) | |||||
} | |||||
else -> { | |||||
wordChooseBinding = IncExamWordChooseContentBinding.inflate(layoutInflater,binding.containerLayout,true) | |||||
} | |||||
} | |||||
initTitle() | |||||
} | |||||
@SuppressLint("SetTextI18n") | |||||
private fun initTitle(){ | |||||
binding.incLearnTitle.run { | |||||
imgBack.click { onBack() } | |||||
//题目 | |||||
tvTitle.text = vm.intentData.showTitle | |||||
//题目进度 | |||||
tvNumProgress.text = "${vm.currentIndex+1}/${vm.testData.size}" | |||||
//默认发音 | |||||
} | |||||
} | |||||
private fun setNumberProgress(){ | |||||
} | } | ||||
override fun loadData() { | override fun loadData() { | ||||
_normalBinding?.let { | |||||
it.incLearnTitle.voiceSwitch.soundWayChange.observe(this){ | |||||
println("发音 --》 $it ") | |||||
} | |||||
it.incLearnTitle.voiceSwitch.setSoundWay(AppConstants.SOUND_TYPE_US) | |||||
} | |||||
} | |||||
/** 返回: 未结束提示弹窗 */ | |||||
private fun onBack(){ | |||||
finish() | |||||
} | } | ||||
} | } |
package com.xkl.cdl.module.learn | |||||
import com.suliang.common.base.viewmodel.BaseViewModel | |||||
import com.xkl.cdl.data.DataTransferHolder | |||||
import com.xkl.cdl.data.bean.course.DialogueSpokenItem | |||||
import com.xkl.cdl.data.bean.course.ExamBean | |||||
import com.xkl.cdl.data.bean.intentdata.ExamData | |||||
class LearnExamViewModel : BaseViewModel() { | |||||
//传递过来的测试数据 | |||||
val intentData : ExamData = DataTransferHolder.instance.getData() | |||||
//测试题数据 | |||||
val testData : List<ExamBean> by lazy { | |||||
intentData.testData!! | |||||
} | |||||
//口语测试题 | |||||
val allSentencesList : List<List<DialogueSpokenItem>> by lazy { | |||||
intentData.allSentencesList!! | |||||
} | |||||
//当前测试题下标, 默认为-1,进度设置需要 + 1 ,以数字显示为当前正在做的题数,而非已完成数 | |||||
var currentIndex = -1 | |||||
} |
import com.suliang.common.util.LogUtil | import com.suliang.common.util.LogUtil | ||||
import com.xkl.cdl.R | import com.xkl.cdl.R | ||||
import com.xkl.cdl.data.AppConstants | import com.xkl.cdl.data.AppConstants | ||||
import com.xkl.cdl.data.DataTransferHolder | |||||
import com.xkl.cdl.data.bean.intentdata.ExamData | |||||
import com.xkl.cdl.data.manager.db.DbControlBase | import com.xkl.cdl.data.manager.db.DbControlBase | ||||
import com.xkl.cdl.databinding.FragmentCourseMainBinding | import com.xkl.cdl.databinding.FragmentCourseMainBinding | ||||
import com.xkl.cdl.module.learn.LearnExamActivity | |||||
import com.xkl.cdl.module.m_center_learn.CoursePackMainActivityViewModel | import com.xkl.cdl.module.m_center_learn.CoursePackMainActivityViewModel | ||||
/** | /** | ||||
} | } | ||||
} | } | ||||
/** 跳转测试 */ | |||||
fun startExam(examData : ExamData){ | |||||
DataTransferHolder.instance.putData(value = examData) | |||||
LearnExamActivity.newInstance(requireContext()) | |||||
} | |||||
import com.suliang.common.extension.setHtml | import com.suliang.common.extension.setHtml | ||||
import com.xkl.cdl.R | import com.xkl.cdl.R | ||||
import com.xkl.cdl.data.AppConstants | import com.xkl.cdl.data.AppConstants | ||||
import com.xkl.cdl.data.DataTransferHolder | |||||
import com.xkl.cdl.data.bean.course.ExamBean | import com.xkl.cdl.data.bean.course.ExamBean | ||||
import com.xkl.cdl.data.bean.intentdata.ExamData | |||||
import com.xkl.cdl.data.manager.CourseManager | import com.xkl.cdl.data.manager.CourseManager | ||||
import com.xkl.cdl.databinding.FragmentCourseTotalTestBinding | import com.xkl.cdl.databinding.FragmentCourseTotalTestBinding | ||||
import com.xkl.cdl.module.learn.LearnExamActivity | import com.xkl.cdl.module.learn.LearnExamActivity | ||||
(requireParentFragment() as CourseMainFragment).changeFragment(1) | (requireParentFragment() as CourseMainFragment).changeFragment(1) | ||||
} | } | ||||
/** 开始测试 */ | |||||
/** 开始测试 : 生成测试题,跳转到测试 | |||||
* | |||||
*/ | |||||
private fun startTest(view: View) { | private fun startTest(view: View) { | ||||
LearnExamActivity.newInstance(requireContext()) | |||||
//生成数据 | |||||
val examData = ExamData(vm.course.subjectId, totalTestType, vm.course.courseTitle, vm.course.courseTitle).apply { | |||||
coursePackType = vm.course.coursePackType | |||||
courseType = vm.course.courseType | |||||
this.testData = this@CourseTotalTestFragment.testData | |||||
mExamWRMap = if (examType == AppConstants.TEST_TYPE_AFTER_TOTAL) vm.courseDetail.exam_w_r_list else null | |||||
} | |||||
(parentFragment as CourseMainFragment).startExam(examData) | |||||
} | } | ||||
} | } |
import android.os.Bundle | import android.os.Bundle | ||||
import com.suliang.common.base.activity.BaseActivity | import com.suliang.common.base.activity.BaseActivity | ||||
import com.suliang.common.util.LogUtil | import com.suliang.common.util.LogUtil | ||||
import com.suliang.common.util.SpUtils | |||||
import com.suliang.common.util.file.FileUtil | import com.suliang.common.util.file.FileUtil | ||||
import com.suliang.common.util.thread.AppExecutors | import com.suliang.common.util.thread.AppExecutors | ||||
import com.xkl.cdl.data.manager.CourseManager | import com.xkl.cdl.data.manager.CourseManager | ||||
// show(supportFragmentManager,javaClass.name) | // show(supportFragmentManager,javaClass.name) | ||||
// } | // } | ||||
// LogUtil.e("Dialog -- > ${learnDialog.hashCode()}") | // LogUtil.e("Dialog -- > ${learnDialog.hashCode()}") | ||||
// if (true) return | |||||
SpUtils.instance.encode("my","abcdefgxxxxx") | |||||
SpUtils.instance.remove("my") | |||||
println(SpUtils.instance.decode("my",String::class.java)) | |||||
if (true) return | |||||
showHideLoading(true) | showHideLoading(true) |
<?xml version="1.0" encoding="utf-8"?> | |||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
<item android:id="@android:id/background"> | |||||
<shape android:shape="rectangle"> | |||||
<corners android:radius="2dp"/> | |||||
<solid android:color="@color/gray_1"/> | |||||
</shape> | |||||
</item> | |||||
<item android:id="@android:id/progress"> | |||||
<clip> | |||||
<shape android:shape="rectangle"> | |||||
<corners android:radius="2dp"/> | |||||
<solid android:color="@color/theme_color"/> | |||||
</shape> | |||||
</clip> | |||||
</item> | |||||
</layer-list> |
<?xml version="1.0" encoding="utf-8"?> | |||||
<!--水平进度条颜色--> | |||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
<item android:id="@android:id/background"> | |||||
<shape android:shape="rectangle"> | |||||
<corners android:radius="2dp"/> | |||||
<solid android:color="@color/gray_1"/> | |||||
</shape> | |||||
</item> | |||||
<item android:id="@android:id/progress"> | |||||
<clip> | |||||
<shape android:shape="rectangle"> | |||||
<corners android:radius="2dp"/> | |||||
<solid android:color="@color/red_3"/> | |||||
</shape> | |||||
</clip> | |||||
</item> | |||||
</layer-list> |
<?xml version="1.0" encoding="utf-8"?> | |||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"> | |||||
<stroke android:color="@color/gray_1" android:width="1dp"/> | |||||
<corners android:radius="8dp"/> | |||||
</shape> |
android:gravity="center" | android:gravity="center" | ||||
android:text="@string/introduction" | android:text="@string/introduction" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintBottom_toBottomOf="@+id/img_course_pack_cover" | app:layout_constraintBottom_toBottomOf="@+id/img_course_pack_cover" | ||||
app:layout_constraintEnd_toEndOf="parent" /> | app:layout_constraintEnd_toEndOf="parent" /> | ||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<layout 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"> | |||||
<data> | |||||
</data> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:background="@color/white" | |||||
tools:context=".module.learn.LearnExamActivity"> | |||||
<include | |||||
android:id="@+id/inc_learn_title" | |||||
layout="@layout/inc_learn_title" /> | |||||
<include | |||||
android:id="@+id/inc_statistics" | |||||
layout="@layout/inc_learn_test_statistic" /> | |||||
<FrameLayout | |||||
android:id="@+id/container_layout" | |||||
android:layout_width="0dp" | |||||
android:layout_height="0dp" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/inc_statistics" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintBottom_toTopOf="@+id/tv_error_state"> | |||||
<!-- 拼写的显示内容--> | |||||
<!-- <include layout="@layout/inc_exam_spell_content" />--> | |||||
<!--四选一显示内容 | |||||
<include layout="@layout/inc_exam_word_choose_content" />--> | |||||
</FrameLayout> | |||||
<com.google.android.material.button.MaterialButton | |||||
android:id="@+id/tv_error_state" | |||||
style="@style/Widget.MaterialComponents.Button.UnelevatedButton" | |||||
android:layout_width="0dp" | |||||
android:layout_height="44dp" | |||||
android:insetTop="0dp" | |||||
android:insetBottom="0dp" | |||||
android:layout_gravity="center" | |||||
android:layout_marginStart="105dp" | |||||
android:layout_marginEnd="105dp" | |||||
android:gravity="center" | |||||
android:text="@string/pause" | |||||
android:textSize="@dimen/smallSize" | |||||
android:textColor="@color/white" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
android:layout_marginBottom="40dp" | |||||
app:cornerRadius="8dp" | |||||
android:backgroundTint="@color/gray_4" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
</layout> |
<?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" | |||||
android:background="@color/white" | |||||
tools:context=".module.learn.LearnExamActivity"> | |||||
<include | |||||
android:id="@+id/inc_learn_title" | |||||
layout="@layout/inc_learn_title" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> |
app:drawableTopCompat="@drawable/ic_nav_memo" | app:drawableTopCompat="@drawable/ic_nav_memo" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:paddingTop="4dp" | android:paddingTop="4dp" | ||||
app:drawableTint="@color/nav_check_color" | app:drawableTint="@color/nav_check_color" | ||||
android:textColor="@color/nav_check_color" | android:textColor="@color/nav_check_color" | ||||
android:drawableTop="@drawable/ic_nav_statistics" | android:drawableTop="@drawable/ic_nav_statistics" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:paddingTop="4dp" | android:paddingTop="4dp" | ||||
android:button="@null" | android:button="@null" | ||||
app:drawableTint="@color/nav_check_color" | app:drawableTint="@color/nav_check_color" | ||||
app:drawableTopCompat="@drawable/ic_nav_learn_center" | app:drawableTopCompat="@drawable/ic_nav_learn_center" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:paddingTop="4dp" | android:paddingTop="4dp" | ||||
android:button="@null" | android:button="@null" | ||||
app:drawableTint="@color/nav_check_color" | app:drawableTint="@color/nav_check_color" | ||||
app:drawableTopCompat="@drawable/ic_nav_memo" | app:drawableTopCompat="@drawable/ic_nav_memo" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:paddingTop="4dp" | android:paddingTop="4dp" | ||||
android:button="@null" | android:button="@null" | ||||
app:drawableTint="@color/nav_check_color" | app:drawableTint="@color/nav_check_color" | ||||
app:drawableTopCompat="@drawable/ic_nav_my" | app:drawableTopCompat="@drawable/ic_nav_my" | ||||
android:layout_weight="1" | android:layout_weight="1" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:paddingTop="4dp" | android:paddingTop="4dp" | ||||
android:button="@null" | android:button="@null" | ||||
app:drawableTint="@color/nav_check_color" | app:drawableTint="@color/nav_check_color" |
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="@string/current_test_score" | android:text="@string/current_test_score" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintEnd_toEndOf="@+id/tv_score" | app:layout_constraintEnd_toEndOf="@+id/tv_score" | ||||
app:layout_constraintStart_toStartOf="@+id/tv_score" | app:layout_constraintStart_toStartOf="@+id/tv_score" | ||||
app:layout_constraintTop_toBottomOf="@+id/tv_score" | app:layout_constraintTop_toBottomOf="@+id/tv_score" | ||||
android:paddingStart="@dimen/global_spacing" | android:paddingStart="@dimen/global_spacing" | ||||
android:paddingEnd="@dimen/global_spacing" | android:paddingEnd="@dimen/global_spacing" | ||||
android:textColor="@color/theme_color" | android:textColor="@color/theme_color" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/tv_title" | app:layout_constraintTop_toBottomOf="@+id/tv_title" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:layout_marginTop="4dp" | android:layout_marginTop="4dp" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/tv_lesson_name" | app:layout_constraintTop_toBottomOf="@+id/tv_lesson_name" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:layout_marginTop="4dp" | android:layout_marginTop="4dp" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/tv_title" | app:layout_constraintTop_toBottomOf="@+id/tv_title" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
app:barrierDirection="bottom" | app:barrierDirection="bottom" | ||||
app:barrierMargin="@dimen/miniSize" | |||||
app:barrierMargin="@dimen/smallerSize" | |||||
app:constraint_referenced_ids="tv_count_time,inc_statistics_number" /> | app:constraint_referenced_ids="tv_count_time,inc_statistics_number" /> | ||||
<View | <View |
<?xml version="1.0" encoding="utf-8"?> | |||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:tools="http://schemas.android.com/tools"> | |||||
<data> | |||||
</data> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent"> | |||||
<!-- tools:showIn="@layout/activity_learn_exam_word"--> | |||||
<!--释义--> | |||||
<TextView | |||||
android:id="@+id/tv_explain" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
tools:text="【中】a.逐渐的;逐步的;和缓的" | |||||
android:textColor="@color/main_text_color" | |||||
android:textSize="@dimen/bigSize" | |||||
android:gravity="center" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
android:layout_marginTop="34dp" | |||||
android:textStyle="bold" /> | |||||
<!--单词测试时间--> | |||||
<ProgressBar | |||||
android:id="@+id/progress_word_countdown_time" | |||||
style="@android:style/Widget.ProgressBar.Horizontal" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="4dp" | |||||
android:layout_marginLeft="88dp" | |||||
android:layout_marginTop="16dp" | |||||
android:layout_marginRight="87dp" | |||||
android:progressDrawable="@drawable/progressbar_countdown_time" | |||||
app:layout_constraintTop_toBottomOf="@+id/tv_explain" | |||||
tools:progress="20" /> | |||||
<androidx.appcompat.widget.AppCompatTextView | |||||
android:id="@+id/tv_word" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="@dimen/height_word" | |||||
android:layout_marginTop="@dimen/global_spacing" | |||||
android:gravity="center" | |||||
tools:text="gradual" | |||||
tools:textColor="@color/num0" | |||||
android:textSize="@dimen/size_max_word" | |||||
app:autoSizeMaxTextSize="@dimen/size_max_word" | |||||
app:autoSizeMinTextSize="@dimen/miniSize" | |||||
app:autoSizeStepGranularity="1dp" | |||||
app:autoSizeTextType="uniform" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/progress_word_countdown_time" /> | |||||
<TextView | |||||
android:id="@+id/tv_rule_tip" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginTop="12dp" | |||||
android:text="@string/test_spell_tip" | |||||
android:textColor="@color/gray_2" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/tv_word" /> | |||||
<androidx.recyclerview.widget.RecyclerView | |||||
android:id="@+id/spell_recyclerView" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_gravity="center" | |||||
android:layout_marginStart="10dp" | |||||
android:layout_marginEnd="10dp" | |||||
android:background="@color/red_3" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/tv_rule_tip" | |||||
android:layout_marginTop="12dp" | |||||
app:layout_constrainedWidth="true" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
</layout> |
<?xml version="1.0" encoding="utf-8"?> | |||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:tools="http://schemas.android.com/tools"> | |||||
<data> | |||||
</data> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent"> | |||||
<!-- tools:showIn="@layout/activity_learn_exam_word"--> | |||||
<com.airbnb.lottie.LottieAnimationView | |||||
android:id="@+id/iv_voice" | |||||
android:layout_width="@dimen/height_word" | |||||
android:layout_height="@dimen/height_word" | |||||
android:layout_marginTop="10dp" | |||||
app:lottie_fileName="voice.json" | |||||
app:lottie_loop="true" | |||||
app:lottie_autoPlay="false" | |||||
app:lottie_repeatMode="restart" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<androidx.appcompat.widget.AppCompatTextView | |||||
android:id="@+id/tv_word" | |||||
android:layout_width="0dp" | |||||
android:layout_height="@dimen/height_word" | |||||
android:layout_marginTop="10dp" | |||||
android:gravity="center" | |||||
tools:text="gradual" | |||||
tools:textColor="@color/num0" | |||||
android:textSize="@dimen/size_max_word" | |||||
app:autoSizeMaxTextSize="@dimen/size_max_word" | |||||
app:autoSizeMinTextSize="@dimen/miniSize" | |||||
app:autoSizeStepGranularity="1dp" | |||||
app:autoSizeTextType="uniform" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" /> | |||||
<TextView | |||||
android:id="@+id/tv_rule_tip" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginTop="12dp" | |||||
android:text="@string/test_tip" | |||||
android:textColor="@color/gray_2" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/tv_word" /> | |||||
<include | |||||
android:id="@+id/inc_a" | |||||
layout="@layout/includ_test_option_item" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginLeft="@dimen/global_spacing" | |||||
android:layout_marginTop="10dp" | |||||
android:layout_marginRight="@dimen/global_spacing" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/tv_rule_tip" /> | |||||
<include | |||||
android:id="@+id/inc_b" | |||||
layout="@layout/includ_test_option_item" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginLeft="@dimen/global_spacing" | |||||
android:layout_marginTop="10dp" | |||||
android:layout_marginRight="@dimen/global_spacing" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/inc_a" /> | |||||
<include | |||||
android:id="@+id/inc_c" | |||||
layout="@layout/includ_test_option_item" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginLeft="@dimen/global_spacing" | |||||
android:layout_marginTop="10dp" | |||||
android:layout_marginRight="@dimen/global_spacing" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/inc_b" /> | |||||
<include | |||||
android:id="@+id/inc_d" | |||||
layout="@layout/includ_test_option_item" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginLeft="@dimen/global_spacing" | |||||
android:layout_marginTop="10dp" | |||||
android:layout_marginRight="@dimen/global_spacing" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/inc_c" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
</layout> |
xmlns:tools="http://schemas.android.com/tools" | xmlns:tools="http://schemas.android.com/tools" | ||||
xmlns:app="http://schemas.android.com/apk/res-auto"> | xmlns:app="http://schemas.android.com/apk/res-auto"> | ||||
<data> | |||||
<variable | |||||
name="examType" | |||||
type="Long" /> | |||||
<variable | |||||
name="totalNum" | |||||
type="Long" /> | |||||
<variable | |||||
name="progressNum" | |||||
type="Integer" /> | |||||
<!--时间 : 毫秒--> | |||||
<variable | |||||
name="time" | |||||
type="Long" /> | |||||
<variable | |||||
name="correctNum" | |||||
type="Long" /> | |||||
<variable | |||||
name="errorNum" | |||||
type="Long" /> | |||||
</data> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | <androidx.constraintlayout.widget.ConstraintLayout | ||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_height="wrap_content" | |||||
tools:context=".ui.mainlearncenter.com_fragment.TestingStatisticFragment"> | |||||
android:layout_height="36dp" | |||||
tools:context=".ui.mainlearncenter.com_fragment.TestingStatisticFragment" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/inc_learn_title" | |||||
tools:showIn="@layout/activity_learn_exam"> | |||||
<!--测试数量进度--> | <!--测试数量进度--> | ||||
<ProgressBar | <ProgressBar | ||||
android:id="@+id/progress_test_number" | android:id="@+id/progress_test_number" | ||||
style="?android:attr/progressBarStyleHorizontal" | style="?android:attr/progressBarStyleHorizontal" | ||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_height="@dimen/dp_2" | |||||
android:layout_height="2dp" | |||||
android:indeterminateOnly="false" | android:indeterminateOnly="false" | ||||
app:layout_constraintTop_toTopOf="parent" | app:layout_constraintTop_toTopOf="parent" | ||||
android:progressDrawable="@drawable/progress_statistics" | |||||
android:max="@{(int)totalNum}" | |||||
android:progress="@{progressNum}"/> | |||||
android:progressDrawable="@drawable/progress_statistics"/> | |||||
<!--错误数量--> | <!--错误数量--> | ||||
<TextView | <TextView | ||||
android:id="@+id/tv_error_number" | android:id="@+id/tv_error_number" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="@dimen/dp_34" | |||||
android:textSize="@dimen/dp_12" | |||||
android:textColor="@color/color_6" | |||||
android:drawablePadding="@dimen/dp_2" | |||||
android:layout_height="wrap_content" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:textColor="@color/gray_2" | |||||
android:drawablePadding="2dp" | |||||
app:layout_constraintRight_toRightOf="parent" | app:layout_constraintRight_toRightOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | ||||
android:drawableLeft="@mipmap/test_error_icon" | |||||
android:text="@{@string/error_number_format(errorNum)}" | |||||
android:layout_marginRight="@dimen/dp_16" | |||||
android:gravity="center"/> | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
tools:text="错误:100" | |||||
android:layout_marginEnd="@dimen/global_spacing" | |||||
android:gravity="center" | |||||
app:drawableLeftCompat="@drawable/ic_wrong" /> | |||||
<!--正确数量--> | <!--正确数量--> | ||||
<TextView | <TextView | ||||
android:id="@+id/tv_correct_number" | android:id="@+id/tv_correct_number" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="@dimen/dp_34" | |||||
android:textSize="@dimen/dp_12" | |||||
android:textColor="@color/color_6" | |||||
android:drawableLeft="@mipmap/test_right_icon" | |||||
android:drawablePadding="@dimen/dp_2" | |||||
android:layout_height="wrap_content" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:textColor="@color/gray_2" | |||||
android:drawablePadding="2dp" | |||||
app:layout_constraintRight_toLeftOf="@+id/tv_error_number" | app:layout_constraintRight_toLeftOf="@+id/tv_error_number" | ||||
app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | ||||
android:text="@{@string/correct_number_foramt(correctNum)}" | |||||
android:layout_marginRight="@dimen/dp_16" | |||||
android:gravity="center" /> | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
tools:text="正确:100" | |||||
android:layout_marginEnd="@dimen/global_spacing" | |||||
android:gravity="center" | |||||
app:drawableLeftCompat="@drawable/ic_right" /> | |||||
<!--测试类型--> | <!--测试类型--> | ||||
<TextView | <TextView | ||||
android:id="@+id/tv_test_type_name" | android:id="@+id/tv_test_type_name" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="@dimen/dp_34" | |||||
android:textSize="@dimen/dp_12" | |||||
android:textColor="@color/color_6" | |||||
android:drawablePadding="@dimen/dp_2" | |||||
android:layout_height="wrap_content" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:textColor="@color/gray_2" | |||||
android:drawablePadding="2dp" | |||||
app:layout_constraintLeft_toLeftOf="parent" | app:layout_constraintLeft_toLeftOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | ||||
tools:text="学后总测试" | tools:text="学后总测试" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:layout_marginLeft="@dimen/dp_16" | |||||
android:layout_marginRight="@dimen/dp_16" | |||||
android:layout_marginLeft="@dimen/global_spacing" | |||||
android:layout_marginRight="@dimen/global_spacing" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
android:singleLine="true" | android:singleLine="true" | ||||
android:maxEms="6" | android:maxEms="6" | ||||
android:ellipsize="end" | android:ellipsize="end" | ||||
app:learnTestExamType="@{examType}" | |||||
/> | /> | ||||
<!--测试时间--> | <!--测试时间--> | ||||
<TextView | <TextView | ||||
android:id="@+id/tv_test_time" | android:id="@+id/tv_test_time" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="@dimen/dp_34" | |||||
android:textSize="@dimen/dp_12" | |||||
android:textColor="@color/color_6" | |||||
android:layout_height="wrap_content" | |||||
android:textSize="@dimen/smallerSize" | |||||
android:textColor="@color/gray_2" | |||||
tools:text="00:00:00" | tools:text="00:00:00" | ||||
app:statisticsTotalTime="@{time}" | |||||
android:gravity="center" | android:gravity="center" | ||||
app:layout_constraintLeft_toRightOf="@+id/tv_test_type_name" | app:layout_constraintLeft_toRightOf="@+id/tv_test_type_name" | ||||
app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | app:layout_constraintTop_toBottomOf="@+id/progress_test_number" | ||||
android:layout_marginLeft="@dimen/dp_16"/> | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
android:layout_marginStart="@dimen/global_spacing"/> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | </androidx.constraintlayout.widget.ConstraintLayout> |
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toTopOf="parent" | app:layout_constraintTop_toTopOf="parent" | ||||
tools:showIn="@layout/activity_learn_exam_word"> | |||||
tools:showIn="@layout/activity_learn_exam"> | |||||
<ImageView | <ImageView | ||||
android:id="@+id/img_back" | android:id="@+id/img_back" | ||||
android:layout_marginStart="66dp" | android:layout_marginStart="66dp" | ||||
android:ellipsize="end" | android:ellipsize="end" | ||||
android:maxLines="1" | android:maxLines="1" | ||||
android:text="小学英语单词课程小学英语单词课程小学英语单词课程" | |||||
tools:text="小学英语单词课程小学英语单词课程小学英语单词课程" | |||||
android:textColor="@color/main_text_color" | android:textColor="@color/main_text_color" | ||||
android:textSize="@dimen/bigSize" | android:textSize="@dimen/bigSize" | ||||
android:textStyle="bold" | android:textStyle="bold" | ||||
android:id="@+id/tv_num_progress" | android:id="@+id/tv_num_progress" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:layout_marginStart="4dp" | |||||
android:layout_marginEnd="66dp" | |||||
android:text="90/100" | |||||
android:layout_marginStart="2dp" | |||||
android:layout_marginEnd="70dp" | |||||
tools:text="90/100" | |||||
android:textColor="@color/main_text_color" | android:textColor="@color/main_text_color" | ||||
android:textSize="@dimen/bigSize" | |||||
android:textSize="@dimen/normalSize" | |||||
android:textStyle="bold" | android:textStyle="bold" | ||||
android:visibility="visible" | android:visibility="visible" | ||||
app:layout_constrainedWidth="true" | app:layout_constrainedWidth="true" |
android:layout_marginRight="28dp" | android:layout_marginRight="28dp" | ||||
android:text="@string/correct" | android:text="@string/correct" | ||||
android:textColor="@color/main_text_color" | android:textColor="@color/main_text_color" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintEnd_toEndOf="@+id/guideline_1" | app:layout_constraintEnd_toEndOf="@+id/guideline_1" | ||||
app:layout_constraintTop_toTopOf="parent" /> | app:layout_constraintTop_toTopOf="parent" /> | ||||
android:layout_marginTop="8dp" | android:layout_marginTop="8dp" | ||||
android:text="@string/error" | android:text="@string/error" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintStart_toEndOf="@+id/guideline_1" | app:layout_constraintStart_toEndOf="@+id/guideline_1" | ||||
app:layout_constraintTop_toTopOf="parent" /> | app:layout_constraintTop_toTopOf="parent" /> | ||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<layout 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"> | |||||
<data> | |||||
</data> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:background="@drawable/shape_rounder_8_stroke_gray1" | |||||
android:minHeight="80dp" | |||||
android:paddingLeft="12dp" | |||||
android:paddingRight="8dp"> | |||||
<androidx.constraintlayout.widget.Guideline | |||||
android:id="@+id/guide_line" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:orientation="vertical" | |||||
app:layout_constraintGuide_percent="0.5" /> | |||||
<!--口语总测试,发音部分区域--> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:id="@+id/layout_lottie_voice_area" | |||||
android:layout_width="0dp" | |||||
android:layout_height="0dp" | |||||
android:layout_marginStart="6dp" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toStartOf="@+id/iv_statu" | |||||
app:layout_constraintStart_toEndOf="@+id/guide_line" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
android:clickable="true" | |||||
android:focusable="true"> | |||||
<com.airbnb.lottie.LottieAnimationView | |||||
android:id="@+id/iv_option" | |||||
android:layout_width="50dp" | |||||
android:layout_height="50dp" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:lottie_autoPlay="false" | |||||
app:lottie_fileName="voice.json" | |||||
app:lottie_loop="true" | |||||
app:lottie_repeatMode="restart" /> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
<!--口语总测试,选择项部分--> | |||||
<androidx.constraintlayout.widget.ConstraintLayout | |||||
android:id="@+id/layout_choose_area" | |||||
android:layout_width="0dp" | |||||
android:layout_height="0dp" | |||||
android:layout_marginEnd="6dp" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintEnd_toStartOf="@+id/guide_line" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
android:clickable="true" | |||||
android:focusable="true"> | |||||
<ImageView | |||||
android:layout_width="40dp" | |||||
android:layout_height="40dp" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
android:src="@drawable/ic_right"/> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
<!--口语总测试,音频选项时的选项选择--> | |||||
<androidx.constraintlayout.widget.Group | |||||
android:id="@+id/group_voice_choose" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
app:constraint_referenced_ids="layout_choose_area,layout_lottie_voice_area,guide_line" | |||||
android:visibility="gone"/> | |||||
<TextView | |||||
android:id="@+id/tv_lable" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:textColor="@color/main_text_color" | |||||
android:textSize="@dimen/normalSize" | |||||
android:textStyle="bold" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintLeft_toLeftOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
tools:text="A" /> | |||||
<TextView | |||||
android:id="@+id/tv_option" | |||||
android:layout_width="0dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="8dp" | |||||
android:layout_marginEnd="8dp" | |||||
android:textColor="@color/main_text_color" | |||||
android:textSize="@dimen/smallSize" | |||||
app:layout_constrainedWidth="true" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintLeft_toRightOf="@+id/tv_lable" | |||||
app:layout_constraintRight_toLeftOf="@id/iv_statu" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_goneMarginRight="36dp" | |||||
tools:text="喜好;爱好;类似的人(或物);(尤指被视为和某人或某事物一样好的)种类,类型 adj.类似的;相似的 adv.大概,可能;" /> | |||||
<ImageView | |||||
android:id="@+id/iv_statu" | |||||
android:layout_width="28dp" | |||||
android:layout_height="28dp" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintRight_toRightOf="parent" | |||||
app:layout_constraintTop_toTopOf="parent" | |||||
tools:src="@drawable/ic_right" | |||||
app:tint="@color/green_1"/> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | |||||
</layout> |
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:textColor="@color/theme_color" | android:textColor="@color/theme_color" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:layout_constraintBottom_toBottomOf="parent" | app:layout_constraintBottom_toBottomOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toTopOf="parent" | app:layout_constraintTop_toTopOf="parent" |
android:layout_height="match_parent" | android:layout_height="match_parent" | ||||
android:gravity="center" | android:gravity="center" | ||||
android:textColor="@color/gray_2" | android:textColor="@color/gray_2" | ||||
android:textSize="@dimen/miniSize" | |||||
android:textSize="@dimen/smallerSize" | |||||
app:coursePackLearnProgressFormat="@{coursePack.learnProgress}"/> | app:coursePackLearnProgressFormat="@{coursePack.learnProgress}"/> | ||||
</com.xkl.cdl.widget.MyRankingView> | </com.xkl.cdl.widget.MyRankingView> | ||||
<color name="translation">#00000000</color> | <color name="translation">#00000000</color> | ||||
<color name="gray_1">#FFE6E6E6</color> | <color name="gray_1">#FFE6E6E6</color> | ||||
<color name="gray_2">#8A8A99</color> | <color name="gray_2">#8A8A99</color> | ||||
<color name="gray_3">#FAFAFA</color> | |||||
<color name="gray_4">#666D80</color> | |||||
<color name="white">#FFFFFFFF</color> | <color name="white">#FFFFFFFF</color> | ||||
<color name="white_1">#FFF5F5F5</color> | <color name="white_1">#FFF5F5F5</color> | ||||
<color name="blue_1">#52CC52</color> | <color name="blue_1">#52CC52</color> | ||||
<color name="gray_3">#FAFAFA</color> | |||||
<color name="green_1">#40A540</color> | <color name="green_1">#40A540</color> | ||||
<color name="red_1">#FFF26255</color> | <color name="red_1">#FFF26255</color> | ||||
<color name="red_2">#F7874F</color> | <color name="red_2">#F7874F</color> | ||||
<color name="red_3">#FF0000</color> | |||||
<color name="num0">#E50213</color> | <color name="num0">#E50213</color> |
<dimen name="nav_bottom_height">50dp</dimen> | <dimen name="nav_bottom_height">50dp</dimen> | ||||
<dimen name="line_height">0.5dp</dimen> | <dimen name="line_height">0.5dp</dimen> | ||||
<dimen name="miniSize">12dp</dimen> | |||||
<dimen name="miniSize">8dp</dimen> | |||||
<dimen name="smallerSize">12dp</dimen> | |||||
<dimen name="smallSize">14dp</dimen> | <dimen name="smallSize">14dp</dimen> | ||||
<dimen name="normalSize">16dp</dimen> | <dimen name="normalSize">16dp</dimen> | ||||
<dimen name="bigSize">18dp</dimen> | <dimen name="bigSize">18dp</dimen> | ||||
<dimen name="common_button_height">44dp</dimen> | <dimen name="common_button_height">44dp</dimen> | ||||
<dimen name="fab_margin">16dp</dimen> | <dimen name="fab_margin">16dp</dimen> | ||||
<dimen name="common_dialog_width">300dp</dimen> | <dimen name="common_dialog_width">300dp</dimen> | ||||
<dimen name="height_word">60dp</dimen> | |||||
<dimen name="size_max_word">42dp</dimen> | |||||
</resources> | </resources> |
<string name="correct">正确</string> | <string name="correct">正确</string> | ||||
<string name="error">错误</string> | <string name="error">错误</string> | ||||
<string name="start_learn">开始学习</string> | <string name="start_learn">开始学习</string> | ||||
<string name="test_spell_tip">请从左至右依次点击选择正确的选项</string> | |||||
<string name="pause">暂停</string> | |||||
<string name="test_tip">请选择本单词正确的意义栏</string> | |||||
</resources> | </resources> |
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:width="16dp" | |||||
android:height="16dp" | |||||
android:viewportWidth="16" | |||||
android:viewportHeight="16"> | |||||
<path | |||||
android:pathData="M0,0h16v16h-16z" | |||||
android:strokeAlpha="0" | |||||
android:strokeWidth="1" | |||||
android:fillColor="#000000" | |||||
android:fillType="nonZero" | |||||
android:strokeColor="#00000000" | |||||
android:fillAlpha="0"/> | |||||
<path | |||||
android:pathData="M8,1.6C4.464,1.6 1.6,4.464 1.6,8C1.6,11.536 4.464,14.4 8,14.4C11.536,14.4 14.4,11.536 14.4,8C14.4,4.464 11.536,1.6 8,1.6ZM12.088,5.848L7.304,10.632L7.032,10.904C6.744,11.192 6.288,11.192 6,10.904L5.728,10.632L3.888,8.792C3.648,8.552 3.672,8.152 3.952,7.952C4.176,7.792 4.488,7.824 4.68,8.024L6.52,9.84L11.312,5.048C11.552,4.808 11.952,4.832 12.152,5.112C12.32,5.344 12.288,5.656 12.088,5.848Z" | |||||
android:strokeWidth="1" | |||||
android:fillColor="#CCCCCC" | |||||
android:fillType="evenOdd" | |||||
android:strokeColor="#00000000"/> | |||||
</vector> |
<vector xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:width="16dp" | |||||
android:height="16dp" | |||||
android:viewportWidth="16" | |||||
android:viewportHeight="16"> | |||||
<path | |||||
android:pathData="M0,0h16v16h-16z" | |||||
android:strokeAlpha="0" | |||||
android:strokeWidth="1" | |||||
android:fillColor="#000000" | |||||
android:fillType="nonZero" | |||||
android:strokeColor="#00000000" | |||||
android:fillAlpha="0"/> | |||||
<path | |||||
android:pathData="M8,1.6C4.48,1.6 1.6,4.48 1.6,8C1.6,11.52 4.48,14.4 8,14.4C11.52,14.4 14.4,11.52 14.4,8C14.4,4.48 11.52,1.6 8,1.6ZM10.88,10.08C11.12,10.32 11.12,10.64 10.88,10.88C10.64,11.12 10.32,11.12 10.08,10.88L8,8.8L5.92,10.88C5.68,11.12 5.36,11.12 5.12,10.88C4.88,10.64 4.88,10.32 5.12,10.08L7.2,8L5.12,5.92C4.88,5.68 4.88,5.36 5.12,5.12C5.36,4.88 5.68,4.88 5.92,5.12L8,7.2L10.08,5.12C10.32,4.88 10.64,4.88 10.88,5.12C11.12,5.36 11.12,5.68 10.88,5.92L8.8,8L10.88,10.08Z" | |||||
android:strokeWidth="1" | |||||
android:fillColor="#CCCCCC" | |||||
android:fillType="evenOdd" | |||||
android:strokeColor="#00000000"/> | |||||
</vector> |
Lottie : "com.airbnb.android:lottie:5.0.3", | Lottie : "com.airbnb.android:lottie:5.0.3", | ||||
//Rxjava RxAndroid | //Rxjava RxAndroid | ||||
RxJava : "io.reactivex.rxjava3:rxjava:3.1.4", | RxJava : "io.reactivex.rxjava3:rxjava:3.1.4", | ||||
RxAndroid: "io.reactivex.rxjava3:rxandroid:3.0.0" | |||||
RxAndroid: "io.reactivex.rxjava3:rxandroid:3.0.0", | |||||
//gson https://github.com/google/gson | |||||
Gson : "com.google.code.gson:gson:2.9.0", | |||||
//MMKV https://github.com/Tencent/MMKV/wiki/android_tutorial_cn | |||||
MMKV : "com.tencent:mmkv:1.2.13" | |||||
] | ] | ||||
api customDependencies.RxJava | api customDependencies.RxJava | ||||
api customDependencies.RxAndroid | api customDependencies.RxAndroid | ||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' | coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' | ||||
//MMKV | |||||
api customDependencies.MMKV | |||||
package com.suliang.common.util | |||||
import android.os.Parcelable | |||||
import com.tencent.mmkv.MMKV | |||||
/** | |||||
* author suliang | |||||
* create 2022/4/8 18:36 | |||||
* Describe: 数据保存,使用的mmkv | |||||
*/ | |||||
class SpUtils { | |||||
companion object{ | |||||
val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { | |||||
SpUtils() | |||||
} | |||||
} | |||||
private val kv : MMKV = MMKV.defaultMMKV() | |||||
/** | |||||
* 存放java基础语言类型: Boolean Int Long Float Double byte[] | |||||
* @param key String | |||||
* @param value Any | |||||
*/ | |||||
fun encode(key:String, value:Any){ | |||||
when(value){ | |||||
is Boolean -> kv.encode(key,value) | |||||
is Int -> kv.encode(key,value) | |||||
is Long -> kv.encode(key,value) | |||||
is Float -> kv.encode(key,value) | |||||
is Double -> kv.encode(key,value) | |||||
is String -> kv.encode(key,value) | |||||
} | |||||
} | |||||
fun encode(key:String, value: Set<String>){ | |||||
kv.encode(key,value) | |||||
} | |||||
fun <T: Parcelable> encode(key: String, value : T){ | |||||
kv.encode(key,value) | |||||
} | |||||
fun <T> decode(key : String, c : Class<T> ) : T{ | |||||
return when(c){ | |||||
Int::class.java -> kv.decodeInt(key,-1) | |||||
Long::class.java -> kv.decodeLong(key,-1) | |||||
Float::class.java -> kv.decodeFloat(key,-1.0f) | |||||
Double::class.java -> kv.decodeDouble(key,-1.0) | |||||
String::class.java -> kv.decodeString(key,"") | |||||
else -> kv.decodeBool(key,false) | |||||
} as T | |||||
} | |||||
fun <T:Parcelable> decode(key:String, c : Class<T>): T? { | |||||
return kv.decodeParcelable(key,c) | |||||
} | |||||
fun decodeStringSet(key:String): Set<String>?{ | |||||
return kv.decodeStringSet(key) | |||||
} | |||||
fun remove(key:String){ | |||||
kv.removeValueForKey(key) | |||||
} | |||||
fun containsKey(key:String): Boolean = kv.containsKey(key) | |||||
fun clear(){ | |||||
kv.clearAll() | |||||
} | |||||
} |