提交 3b37e03a 作者: enjoy

优化INIT

上级 84431ceb
......@@ -32,6 +32,10 @@ android {
kotlinOptions {
jvmTarget = rootProject.ext.android.j_target//'17'//'1.8'
}
dataBinding{
enabled = true
}
}
kapt {
......
......@@ -3,7 +3,14 @@
<application
android:name=".app.JlApp">
<activity android:name="com.juling.pro_juliao.ui.Tt"
<!-- <activity android:name="com.juling.pro_juliao.ui.Tt"-->
<!-- android:exported="true">-->
<!-- </activity>-->
<activity android:name="com.juling.pro_juliao.ui.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize|fontScale"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
......@@ -11,4 +18,5 @@
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package com.juling.pro_juliao.ui
import android.util.Log
import com.alibaba.android.arouter.facade.annotation.Route
import com.bumptech.glide.Glide
import com.juling.ipage.ui.NavigationActivity
import com.work.provide_tool.general.RouterPath
import kotlin.math.log
//@Route(path = RouterPath.IPAGE_MAINACTIVITY)
//class MainActivity : NavigationActivity(){
//
//}
fun a(){
// Log.i()
// Glide
// log()
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import android.app.Activity
import android.app.Application
import android.os.Bundle
import android.util.Log
import com.hjq.toast.ToastUtils
import com.work.provide_tool.BuildConfig
import com.work.provide_tool.util.AppActivityLeader
......@@ -15,10 +16,14 @@ abstract class IApp : Application() {
override fun onCreate() {
super.onCreate()
app = this
initGeneral()
init(this, BuildConfig.APPLICATION_FLAG)
}
//公共init
private fun initGeneral(){
initAppActivity()
ToastUtils.init(this)
}
private fun initAppActivity(){
......@@ -54,6 +59,7 @@ abstract class IApp : Application() {
})
}
//各组件init
//在这里配置init即可 applicationFlag为true和false,都会跑这里的且只会跑一回
abstract fun init(app:Application,applicationFlag:Boolean)
}
\ No newline at end of file
package com.work.provide_tool.general;
public interface RouterPath {
String IPAGE_MAINACTIVITY = "/ipage/mainactivity";
String WIDGET_MAIN = "/widget/main";
String WIDGET_TALK = "/widget/talk";
String WIDGET_ZJF = "/widget/zjf";
}
package com.work.provide_tool.util
class AppUtil
\ No newline at end of file
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
fun FragmentActivity.turnPageFrag(layout:Int,fFrag:Fragment,toFrag:Fragment){
var ft = supportFragmentManager.beginTransaction()
ft.hide(fFrag)
if(!toFrag.isAdded){
ft.add(layout,toFrag)
}
ft.show(toFrag).commit()
}
\ No newline at end of file
package com.work.provide_tool.util
import android.graphics.drawable.Drawable
import androidx.core.content.ContextCompat
import com.work.provide_tool.app.IApp
fun getResStringArray(id:Int):Array<String>{
return IApp.app.resources.getStringArray(id)
}
fun getResDraw(id:Int): Drawable? {
return ContextCompat.getDrawable(IApp.app,id)
}
fun getResTone(id:Int):Int{
return ContextCompat.getColor(IApp.app,id)
}
\ No newline at end of file
......@@ -111,4 +111,5 @@ private fun glideGeneralOption(url:Any?,iv:ImageView?,requestOptions:RequestOpti
Glide.with(app).load(url).apply(requestOptions).into(iv)
}
//-----------------------------------------/Glide----------------------------------------------
\ No newline at end of file
//-----------------------------------------/Glide----------------------------------------------
package com.work.provide_tool.util
import android.view.View
//点击
fun onViewEvent(l:View.OnClickListener,vararg viewArr:View){
for (view in viewArr){
view.setOnClickListener(l)
}
}
\ No newline at end of file
......@@ -2,6 +2,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity android:name="com.juling.widget_enter.StartActivity" />
</application>
</manifest>
\ No newline at end of file
package com.juling.widget_enter
import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle
import android.os.Handler
import android.os.Message
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.alibaba.android.arouter.launcher.ARouter
import com.juling.widget_enter.databinding.ActivityEnterStartBinding
import com.work.provide_tool.general.RouterPath
import com.work.provide_tool.util.onViewEvent
class StartActivity: AppCompatActivity(){
private val dataBinding by lazy {
DataBindingUtil.setContentView<ActivityEnterStartBinding>(this,R.layout.activity_enter_start)
}
private var total:Int = 3
private var handler:Handler? =
@SuppressLint("HandlerLeak")
object: Handler(){
override fun handleMessage(mg: Message) {
dataBinding.textView3.text = "enter $total"
if(total <= 0){
enter()
return
}
total--
sendEmptyMessageDelayed(1,1000)
}
}
class StartActivity:Activity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initDt()
initV()
initEvent()
}
private fun initDt(){
handler?.sendEmptyMessage(1)
}
private fun initV(){
}
private fun initEvent(){
onViewEvent({v->
enter()
},dataBinding.textView6)}
private fun enter(){
ARouter.getInstance()
.build(RouterPath.IPAGE_MAINACTIVITY)
.navigation()
freeHandler()
finish()
}
private fun freeHandler(){
handler?.removeCallbacksAndMessages(null)
total = 3
}
setContentView(R.layout.activity_enter_start)
override fun onDestroy() {
super.onDestroy()
freeHandler()
}
}
\ No newline at end of file
<?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">
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data></data>
<androidx.constraintlayout.widget.ConstraintLayout
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">
<TextView
android:id="@+id/textView3"
android:layout_width="77dp"
android:layout_height="59dp"
android:gravity="center"
android:text="enter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.236"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView6"
android:layout_width="77dp"
android:layout_height="59dp"
android:gravity="center"
android:text="跳"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.539"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="enter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,8 +4,12 @@ import android.app.Application
import com.work.provide_tool.app.IApp
class PagApp :IApp(){
override fun init(app: Application, applicationFlag: Boolean) {
companion object{
lateinit var app:Application
}
override fun init(app: Application, applicationFlag: Boolean) {
PagApp.app = app
}
}
\ No newline at end of file
package com.juling.ipage.navigation
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.juling.ipage.R
import com.work.provide_tool.util.getResDraw
import com.work.provide_tool.util.getResStringArray
import com.work.provide_tool.util.getResTone
class NavigationView : LinearLayout {
private lateinit var navigationLl:LinearLayout
private val navigationHolderArray = ArrayList<NavigationViewHolder>()
private val initTotal = 3 //init 个数
private val initWordArray by lazy {
getResStringArray(R.array.navigation_init_word_with_array)
}
private val initDrawArrayWithNor =
arrayOf(getResDraw(R.mipmap.navigation_info_nor)
, getResDraw(R.mipmap.navigation_friend_nor)
, getResDraw(R.mipmap.navigation_uinfo_nor)
)
private val initDrawArrayWithIn =
arrayOf(getResDraw(R.mipmap.navigation_info_sel)
, getResDraw(R.mipmap.navigation_friend_sel)
, getResDraw(R.mipmap.navigation_uinfo_sel)
)
private var needTotal:Int = initTotal
private lateinit var wordArray:Array<String>
private lateinit var drawArrayNor:Array<Drawable?>
private lateinit var drawArrayIn:Array<Drawable?>
private var iPos = -1//当前的位置
var navigationWidgetClick:NavigationWidgetClick? = null
data class NavigationViewHolder(var ll:LinearLayout,var tv:TextView,var iv:ImageView)
constructor(context: Context) : super(context) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
init(context)
}
private fun init(context: Context) {
LayoutInflater.from(context).inflate(R.layout.navigation_linearlayout,this)
navigationLl = findViewById(R.id.navigation_view_ll)
loadNavigation()
}
// 增加单元view(widget)
// Init widget数据:图片、文字
// 位置: 刷widget
fun loadNavigation(
initTotal:Int = this.initTotal,
initWordArray: Array<String> = this.initWordArray,
initDrawArrayWithNor: Array<Drawable?> = this.initDrawArrayWithNor,
initDrawArrayWithIn: Array<Drawable?> = this.initDrawArrayWithIn,
) {
updateNavigationData(initTotal,initWordArray,initDrawArrayWithNor,initDrawArrayWithIn)
addNavigationWidget(initTotal)
loadAllWord(initWordArray)
loadAllDraw(initDrawArrayWithNor)
setPos(iPos,0)
}
private fun updateNavigationData(initTotal:Int,
initWordArray: Array<String>,
initDrawArrayWithNor: Array<Drawable?>,
initDrawArrayWithIn: Array<Drawable?>,){
needTotal = initTotal
wordArray = initWordArray
drawArrayNor = initDrawArrayWithNor
drawArrayIn = initDrawArrayWithIn
}
private fun addNavigationWidget(initTotal: Int) {
navigationLl.removeAllViews()
navigationHolderArray.clear()
for (i in 0 until initTotal){
provideWidgetView().apply {
navigationLl.addView(this)
navigationHolderArray.add(
NavigationViewHolder(
findViewById(R.id.widget_linearlayout),
findViewById(R.id.tv),
findViewById(R.id.iv)
)
)
setOnClickListener {
setPos(iPos,i)
}
}
}
}
private fun provideWidgetView():View{
return LayoutInflater.from(context).inflate(R.layout.navigation_linearlayout_widget,null).apply {
var lp = LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT)
lp.weight = 1f
layoutParams = lp
}
}
//---------------------------------------------------文案---------------------------------------------------
fun loadAllWord(wordArray:Array<String>?){
wordArray?.run {
check(wordArray.size == navigationHolderArray.size){
"NavigationView > updateAllWord word length ("+wordArray.size+") != tv length("+navigationHolderArray.size+")"
}
for (i in wordArray.indices){
loadWordPos(wordArray[i],i)
}
}
}
fun loadWordPos(word:String?,pos:Int){
word?.run {
check(pos in 0 until navigationHolderArray.size){
"NavigationView > updateWordPos pos = $pos out length("+navigationHolderArray.size+")"
}
navigationHolderArray[pos].tv.text = word
}
}
//---------------------------------------------------/文案---------------------------------------------------
//---------------------------------------------------图片---------------------------------------------------
fun loadAllDraw(drawArray:Array<Drawable?>?){
drawArray?.run {
check(drawArray.size == navigationHolderArray.size){
"NavigationView > updateAllDraw draw length("+drawArray.size+") != iv length("+navigationHolderArray.size+")"
}
for (i in drawArray.indices){
loadDrawPos(drawArray[i],i)
}
}
}
fun loadDrawPos(draw:Drawable?,pos:Int){
draw?.run {
check(pos in 0 until navigationHolderArray.size){
"NavigationView > updateDrawPos pos($pos) out length("+navigationHolderArray.size+")"
}
navigationHolderArray[pos].iv.background = draw
}
}
//---------------------------------------------------/图片---------------------------------------------------
//---------------------------------------------------位置---------------------------------------------------
fun setPos(f:Int,to:Int){
navigationWidgetClick?.onClick(f,to)
if(f != to){
updateWordPos(f,to)
updateDrawPos(f,to)
iPos = to
}
}
fun updateWordPos(f:Int,to:Int){
check(to in 0 until navigationHolderArray.size){
"NavigationView > updateWordPos pos($to) out length("+navigationHolderArray.size+")"
}
if(f != -1){
navigationHolderArray[f].tv.setTextColor(getResTone(R.color.navigation_nor_tv_with_draw))
}
navigationHolderArray[to].tv.setTextColor(getResTone(R.color.navigation_sel_tv_with_draw))
}
fun updateDrawPos(f:Int,to:Int){
check(to in 0 until navigationHolderArray.size){
"NavigationView > updateDrawPos pos($to) out length("+navigationHolderArray.size+")"
}
if(f != -1){
navigationHolderArray[f].iv.background = drawArrayNor[f]
}
navigationHolderArray[to].iv.background = drawArrayIn[to]
}
//---------------------------------------------------/位置---------------------------------------------------
//网络数据(导航栏)
fun updateNetNavigation(){
// loadNavigation() //1
}
}
\ No newline at end of file
package com.juling.ipage.navigation
import android.view.View
interface NavigationWidgetClick{
fun onClick(f:Int,to:Int)
}
\ No newline at end of file
package com.juling.ipage.ui
import android.util.Log
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.hjq.toast.ToastUtils
import com.juling.ipage.R
import com.juling.ipage.databinding.ActivityNavigationBinding
import com.juling.ipage.navigation.NavigationWidgetClick
import com.work.provide_origin.origin.GeneralAgentActivity
import com.work.provide_tool.util.ToastUtil
import com.work.provide_tool.util.turnPageFrag
abstract class NavigationActivity<T:Fragment> : GeneralAgentActivity<NavigationViewModel,ActivityNavigationBinding>(){
override var layout: Int
get() = R.layout.activity_navigation
set(value) {}
protected abstract var fragArray :List<T>
override fun createLooker() {
}
override fun initUi() {
initFragment()
initNavigationView()
}
private fun initFragment(){
}
private fun initNavigationView(){
iDataBinding.navigationLl.run {
navigationWidgetClick = object:NavigationWidgetClick{
override fun onClick(f: Int, to: Int) {
turnPageFrag(R.id.fl, fragArray[f], fragArray[to])
}
}
}
}
override fun initData() {
}
override fun initEvent() {
}
}
\ No newline at end of file
package com.juling.ipage.ui
import com.work.provide_origin.origin.GeneralViewModel
class NavigationViewModel : GeneralViewModel()
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<data></data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fl"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/navigation_ll"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<com.juling.ipage.navigation.NavigationView
android:id="@+id/navigation_ll"
android:layout_width="0dp"
android:layout_height="@dimen/navigation_height"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/fra"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navigation_view_ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingLeft="@dimen/navigation_padding_lr"
android:paddingRight="@dimen/navigation_padding_lr">
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:id="@+id/widget_linearlayout">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:background="@color/red"
android:id="@+id/iv"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="@dimen/navigation_tv_sz"
android:id="@+id/tv"
android:textColor="@color/navigation_nor_tv_with_draw"
android:layout_marginTop="@dimen/navigation_tv_iv_with_top"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="color_666666">#666666</color>
<color name="color_75A5FF">#75A5FF</color>
<color name="white">#FFFFFFFF</color>
<color name="color_1296DA">#1296DA</color>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- ###################################导航栏###################################-->
<dimen name="navigation_height">60dp</dimen><!-- 高度-->
<dimen name="navigation_padding_lr">15dp</dimen><!-- 左右padding-->
<dimen name="navigation_tv_sz">12sp</dimen>
<string-array name="navigation_init_word_with_array">
<item>hello1</item>
<item>hello2</item>
<item>hello3</item>
</string-array>
<color name="navigation_sel_tv_with_draw">@color/color_1296DA</color>
<color name="navigation_nor_tv_with_draw">@color/color_666666</color>
<dimen name="navigation_tv_iv_with_top">5dp</dimen>
<!-- ###################################/导航栏###################################-->
</resources>
\ No newline at end of file
<resources>
<string name="app_name">juliao</string>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.Juliao" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style>
<style name="Theme.Juliao" parent="Base.Theme.Juliao" />
</resources>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论