diff --git a/HISTORY.md b/HISTORY.md index e14be0e..539b079 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,11 @@ ## 更新日志 +### v1.8.0(通用) + +* 修复返回键无法退出问题 +* 设置中增加退出按钮 +* 修改非电视上的样式 + ### v1.7.8(通用) * 修复播放过程中的卡顿问题 @@ -14,6 +20,24 @@ * 临时去掉部分频道,提高频道的可用性 * 部分频道增加节目单 +### v1.7.5(安卓5及以上专用) + +* 修复播放过程中的卡顿问题 +* 增加时间显示 +* 频道号优化 +* 设置中增加退出按钮 + +### v1.7.4(通用) + +* 修复368 + +### v1.7.3(安卓5及以上专用) + +* 临时去掉部分频道,提高频道的可用性 +* 部分频道增加节目单 +* 遥控器左键进入节目列表 +* 遥控器右键进入菜单 + ### v1.7.2(通用) * 支持节目列表网格样式和行样式切换,软件重启后生效 diff --git a/README.md b/README.md index 39e9ebd..1483faa 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,6 @@ adb install my-tv.apk * CHC高清三个电影频道 * 地方频道 * 收藏夹 -* 自定义源 * 海外 * 1.5.0 无法安装,1.5.1 可以安装 * 节目增加预告 @@ -42,6 +41,14 @@ adb install my-tv.apk * 亮度调节 * 音量调节 +## 版权说明 + +本项目仅供学习研究,禁止用于商业用途,请于下载二十四小时内删除。 + +本项目可能随时终止,请大家谨慎使用,建议使用官方渠道进行观看。 + +本项目使用的部分代码、图片、文字等资源来源于网络,如有侵权,请联系删除。 + ## 赞赏 ![image](./screenshots/appreciate.jpeg) \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt index 1c7dd02..6b50643 100644 --- a/app/src/main/java/com/lizongying/mytv/CardAdapter.kt +++ b/app/src/main/java/com/lizongying/mytv/CardAdapter.kt @@ -93,12 +93,14 @@ class CardAdapter( cardView.titleText = tvViewModel.getTV().title - Glide.with(viewHolder.view.context) - .load(tvViewModel.getTV().logo) - .centerInside() - .into(cardView.mainImageView) + cardView.mainImageView?.let { + Glide.with(viewHolder.view.context) + .load(tvViewModel.getTV().logo) + .centerInside() + .into(it) + } - cardView.mainImageView.setBackgroundColor(Color.WHITE) + cardView.mainImageView?.setBackgroundColor(Color.WHITE) cardView.setMainImageScaleType(ImageView.ScaleType.CENTER_INSIDE) val epg = tvViewModel.epg.value?.filter { it.beginTime < Utils.getDateTimestamp() } diff --git a/app/src/main/java/com/lizongying/mytv/ChannelFragment.kt b/app/src/main/java/com/lizongying/mytv/ChannelFragment.kt index 5674621..1a10838 100644 --- a/app/src/main/java/com/lizongying/mytv/ChannelFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/ChannelFragment.kt @@ -16,6 +16,7 @@ class ChannelFragment : Fragment() { private val handler = Handler() private val delay: Long = 3000 private var channel = 0 + private var channelCount = 0 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -23,6 +24,38 @@ class ChannelFragment : Fragment() { ): View { _binding = ChannelBinding.inflate(inflater, container, false) _binding!!.root.visibility = View.GONE + + val activity = requireActivity() + val application = activity.applicationContext as MyApplication + val displayMetrics = application.getDisplayMetrics() + + displayMetrics.density + + var screenWidth = displayMetrics.widthPixels + var screenHeight = displayMetrics.heightPixels + if (screenHeight > screenWidth) { + screenWidth = displayMetrics.heightPixels + screenHeight = displayMetrics.widthPixels + } + + val ratio = 16f / 9f + + if (screenWidth / screenHeight > ratio) { + val x = ((screenWidth - screenHeight * ratio) / 2).toInt() + val originalLayoutParams = + binding.channel.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.rightMargin += x + binding.channel.layoutParams = originalLayoutParams + } + + if (screenWidth / screenHeight < ratio) { + val y = ((screenHeight - screenWidth / ratio) / 2).toInt() + val originalLayoutParams = + binding.channel.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.topMargin += y + binding.channel.layoutParams = originalLayoutParams + } + (activity as MainActivity).fragmentReady("ChannelFragment") return binding.root } @@ -30,20 +63,21 @@ class ChannelFragment : Fragment() { fun show(tvViewModel: TVViewModel) { handler.removeCallbacks(hideRunnable) handler.removeCallbacks(playRunnable) - binding.channelContent.text = (tvViewModel.getTV().id.plus(1)).toString() + binding.content.text = (tvViewModel.getTV().id.plus(1)).toString() view?.visibility = View.VISIBLE handler.postDelayed(hideRunnable, delay) } fun show(channel: String) { - if (binding.channelContent.text.length > 1) { + if (channelCount > 1) { return } - this.channel = "${binding.channelContent.text}$channel".toInt() + channelCount++ + this.channel = "${this.channel}$channel".toInt() handler.removeCallbacks(hideRunnable) handler.removeCallbacks(playRunnable) - if (binding.channelContent.text == "") { - binding.channelContent.text = channel + if (channelCount < 2) { + binding.content.text = "${this.channel}" view?.visibility = View.VISIBLE handler.postDelayed(playRunnable, delay) } else { @@ -65,14 +99,18 @@ class ChannelFragment : Fragment() { } private val hideRunnable = Runnable { - binding.channelContent.text = "" + binding.content.text = "" view?.visibility = View.GONE + channel = 0 + channelCount = 0 } private val playRunnable = Runnable { (activity as MainActivity).play(channel - 1) - binding.channelContent.text = "" + binding.content.text = "" view?.visibility = View.GONE + channel = 0 + channelCount = 0 } override fun onDestroyView() { diff --git a/app/src/main/java/com/lizongying/mytv/Ext.kt b/app/src/main/java/com/lizongying/mytv/Ext.kt index e848b10..c683554 100644 --- a/app/src/main/java/com/lizongying/mytv/Ext.kt +++ b/app/src/main/java/com/lizongying/mytv/Ext.kt @@ -50,7 +50,7 @@ val Context.appVersionCode: Long * Return the version name of the app which is defined in build.gradle. * eg:1.0.0 */ -val Context.appVersionName: String get() = packageInfo.versionName ?: "" +val Context.appVersionName: String get() = packageInfo.versionName val Context.appSignature: String get() { diff --git a/app/src/main/java/com/lizongying/mytv/InfoFragment.kt b/app/src/main/java/com/lizongying/mytv/InfoFragment.kt index 342e968..a01d356 100644 --- a/app/src/main/java/com/lizongying/mytv/InfoFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/InfoFragment.kt @@ -23,7 +23,31 @@ class InfoFragment : Fragment() { savedInstanceState: Bundle? ): View { _binding = InfoBinding.inflate(inflater, container, false) + + val activity = requireActivity() + val application = activity.applicationContext as MyApplication + val displayMetrics = application.getDisplayMetrics() + + displayMetrics.density + + var screenWidth = displayMetrics.widthPixels + var screenHeight = displayMetrics.heightPixels + if (screenHeight > screenWidth) { + screenWidth = displayMetrics.heightPixels + screenHeight = displayMetrics.widthPixels + } + + val ratio = 16f / 9f + + if (screenWidth / screenHeight < ratio) { + val y = ((screenHeight - screenWidth / ratio) / 2).toInt() + val originalLayoutParams = binding.info.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.bottomMargin += y + binding.info.layoutParams = originalLayoutParams + } + _binding!!.root.visibility = View.GONE + (activity as MainActivity).fragmentReady("InfoFragment") return binding.root } diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 09c2851..245122f 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -325,7 +325,7 @@ class MainActivity : FragmentActivity(), Request.RequestListener { return } - if (!settingFragment.isHidden) { + if (settingFragment.isVisible) { hideSettingFragment() return } diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 5373d84..b4337e7 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -42,6 +42,39 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { ): View { _binding = MenuBinding.inflate(inflater, container, false) + val activity = requireActivity() + val application = activity.applicationContext as MyApplication + val displayMetrics = application.getDisplayMetrics() + + displayMetrics.density + + var screenWidth = displayMetrics.widthPixels + var screenHeight = displayMetrics.heightPixels + if (screenHeight > screenWidth) { + screenWidth = displayMetrics.heightPixels + screenHeight = displayMetrics.widthPixels + } + + val ratio = 16f / 9f + + if (screenWidth / screenHeight > ratio) { + val x = ((screenWidth - screenHeight * ratio) / 2).toInt() + val originalLayoutParams = + binding.scroll.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.leftMargin += x + originalLayoutParams.rightMargin += x + binding.scroll.layoutParams = originalLayoutParams + } + + if (screenWidth / screenHeight < ratio) { + val y = ((screenHeight - screenWidth / ratio) / 2).toInt() + val originalLayoutParams = + binding.scroll.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.topMargin += y + originalLayoutParams.bottomMargin += y + binding.scroll.layoutParams = originalLayoutParams + } + binding.menu.setOnClickListener { hideSelf() } @@ -119,7 +152,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener { val layoutParams = itemBinding.row.layoutParams as ViewGroup.MarginLayoutParams layoutParams.topMargin = dpToPx(11F) itemBinding.row.layoutParams = layoutParams - itemBinding.row.setOnClickListener{ + itemBinding.row.setOnClickListener { hideSelf() } content.addView(itemBinding.row) diff --git a/app/src/main/java/com/lizongying/mytv/MyApplication.kt b/app/src/main/java/com/lizongying/mytv/MyApplication.kt index 6ec8d21..6313354 100644 --- a/app/src/main/java/com/lizongying/mytv/MyApplication.kt +++ b/app/src/main/java/com/lizongying/mytv/MyApplication.kt @@ -1,6 +1,23 @@ package com.lizongying.mytv import android.app.Application +import android.content.Context +import android.util.DisplayMetrics +import android.view.WindowManager class MyApplication : Application() { + private lateinit var displayMetrics: DisplayMetrics + + override fun onCreate() { + super.onCreate() + + displayMetrics = DisplayMetrics() + val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager +// windowManager.defaultDisplay.getRealMetrics(displayMetrics) + windowManager.defaultDisplay.getMetrics(displayMetrics) + } + + fun getDisplayMetrics(): DisplayMetrics { + return displayMetrics + } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index b49d721..79a469c 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -590,7 +590,7 @@ object Request { val randomNumber = Random.nextDouble() val url = tvModel.getTV().videoUrl.first() - var r = KvcollectRequest( + val r = KvcollectRequest( guid = guid, prog = sid, viewid = sid, @@ -605,27 +605,10 @@ object Request { _dc = randomNumber, ) - var e = + val e = "BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}" - println(e) r.signature = YSP.getAuthSignature(e) - println(r.signature) - -// val ttt = """{"BossId":2727,"Pwd":1424084450,"prog":"2022576801","playno":"BEoZw3cpZh","guid":"luccvoyr_58va8i3cqw6","hh_ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","cdn":"waibao","sdtfrom":"ysp_pc_01","prd":60000,"platform":"5910204","errcode":"","durl":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","firstreport":1,"sUrl":"https://www.yangshipin.cn/#/tv/home?pid=600001859","sRef":"","fplayerver":"100","livepid":"600001859","viewid":"2022576801","seq":0,"cmd":263,"login_type":"","geturltime":6,"downspeed":1.75,"hc_openid":"","open_id":"","defn":"fhd","fact1":"ysp_pc_live_b","openid":"","_dc":0.7140416315131102,"live_type":"","ftime":"2024-04-17 22:58:31","url":"https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1","rand_str":"oKkkZs8lON"}""" -// val gson = Gson() -// r = gson.fromJson(ttt, KvcollectRequest::class.java) -// -// e = -// "BossId=${r.BossId}&Pwd=${r.Pwd}&_dc=${r._dc}&cdn=${r.cdn}&cmd=${r.cmd}&defn=${r.defn}&downspeed=${r.downspeed}&durl=${r.durl}&errcode=${r.errcode}&fact1=${r.fact1}&firstreport=${r.firstreport}&fplayerver=${r.fplayerver}&ftime=${r.ftime}&geturltime=6&guid=${r.guid}&hc_openid=${r.hc_openid}&hh_ua=${r.hh_ua}&live_type=${r.live_type}&livepid=${r.livepid}&login_type=${r.login_type}&open_id=&openid=${r.openid}&platform=${r.platform}&playno=${r.playno}&prd=${r.prd}&prog=${r.prog}&rand_str=${r.rand_str}&sRef=${r.sRef}&sUrl=${r.sUrl}&sdtfrom=${r.sdtfrom}&seq=${r.seq}&url=${r.url}&viewid=${r.viewid}" -// println(e) -// e = "BossId=2727&Pwd=1424084450&_dc=0.7140416315131102&cdn=waibao&cmd=263&defn=fhd&downspeed=1.75&durl=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&errcode=&fact1=ysp_pc_live_b&firstreport=1&fplayerver=100&ftime=2024-04-17 22:58:31&geturltime=6&guid=luccvoyr_58va8i3cqw6&hc_openid=&hh_ua=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36&live_type=&livepid=600001859&login_type=&open_id=&openid=&platform=5910204&playno=BEoZw3cpZh&prd=60000&prog=2022576801&rand_str=oKkkZs8lON&sRef=&sUrl=https://www.yangshipin.cn/#/tv/home?pid=600001859&sdtfrom=ysp_pc_01&seq=0&url=https://outlivecloud-cdn.ysp.cctv.cn/906028A94D533483FE8BAC5CF4DB6CC70753E25A93EF3EC50988538DEDBF10161D1EA8F67C916EE41BA9D891D7893C69500B3F1A37CA814D2EE19341197360196CD9CCF327949104097C904643D493EB5A9B588EC28A2FAC1C8E30F8EE330DB2364B0DEC0124F6990A83773FF283489A/2022576803.m3u8?from=player&svrtime=1713365896&pid=600001859&cdn=5401&revoi=6E400EC7436C79D49BA06E61333D31FB8915F3484D9426FE4CCC4DE01CB8FD1DF473A8F416EF1107B669B0A9447F913272789A827EDD3DC0FE88534D9B59A35669678946589AA4D246F8F248F7C33AB08CE72FA0A73FE7F1F9FD2091D30176895CB8BD44A5B85FAD9579C700CB2AFD8D0939574B2A3EFF4C1B237DFF3E0CD3E194662F9FDEE48D1ACD7BDFAB01868B220743021C40E0EA5514ECCF396B509DA1&app_id=519748109&guid=luccvoyr_58va8i3cqw6&ysign=bb79232986c5429600d76cfedb1d5978&ytime=1713365896&ytype=1&viewid=2022576801" -// println(e) -// r.signature = YSP.getAuthSignature(e) -// println(r.signature) - - callBtracePage = yspBtraceService2.kvcollect2( - r - ) + callBtracePage = yspBtraceService2.kvcollect2(r) callBtracePage?.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { diff --git a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt index 274e9b2..b062cfe 100644 --- a/app/src/main/java/com/lizongying/mytv/SettingFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/SettingFragment.kt @@ -87,6 +87,10 @@ class SettingFragment : DialogFragment() { ) ) + binding.exit.setOnClickListener{ + requireActivity().finishAffinity() + } + return binding.root } diff --git a/app/src/main/java/com/lizongying/mytv/TimeFragment.kt b/app/src/main/java/com/lizongying/mytv/TimeFragment.kt index 1b06e49..e2e9858 100644 --- a/app/src/main/java/com/lizongying/mytv/TimeFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/TimeFragment.kt @@ -23,6 +23,36 @@ class TimeFragment : Fragment() { ): View { Log.i(TAG, "onCreateView") _binding = TimeBinding.inflate(inflater, container, false) + + val activity = requireActivity() + val application = activity.applicationContext as MyApplication + val displayMetrics = application.getDisplayMetrics() + + displayMetrics.density + + var screenWidth = displayMetrics.widthPixels + var screenHeight = displayMetrics.heightPixels + if (screenHeight > screenWidth) { + screenWidth = displayMetrics.heightPixels + screenHeight = displayMetrics.widthPixels + } + + val ratio = 16f / 9f + + if (screenWidth / screenHeight > ratio) { + val x = ((screenWidth - screenHeight * ratio) / 2).toInt() + val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.rightMargin += x + binding.time.layoutParams = originalLayoutParams + } + + if (screenWidth / screenHeight < ratio) { + val y = ((screenHeight - screenWidth / ratio) / 2).toInt() + val originalLayoutParams = binding.time.layoutParams as ViewGroup.MarginLayoutParams + originalLayoutParams.topMargin += y + binding.time.layoutParams = originalLayoutParams + } + (activity as MainActivity).fragmentReady("TimeFragment") return binding.root } @@ -42,7 +72,7 @@ class TimeFragment : Fragment() { private val showRunnable: Runnable = Runnable { run { - binding.channelContent.text = getDateFormat("HH:mm") + binding.content.text = getDateFormat("HH:mm") handler.postDelayed(showRunnable, delay) } } diff --git a/app/src/main/java/com/lizongying/mytv/Utils.kt b/app/src/main/java/com/lizongying/mytv/Utils.kt index 2bef59f..92b39b7 100644 --- a/app/src/main/java/com/lizongying/mytv/Utils.kt +++ b/app/src/main/java/com/lizongying/mytv/Utils.kt @@ -77,5 +77,15 @@ object Utils { ).toInt() } + fun pxToDp(px: Float): Int { + val scale = Resources.getSystem().displayMetrics.density + return (px / scale).toInt() + } + + fun pxToDp(px: Int): Int { + val scale = Resources.getSystem().displayMetrics.density + return (px / scale).toInt() + } + fun isTmallDevice() = Build.MANUFACTURER.equals("Tmall", ignoreCase = true) } \ No newline at end of file diff --git a/app/src/main/res/layout/channel.xml b/app/src/main/res/layout/channel.xml index 70eaced..228ac2c 100644 --- a/app/src/main/res/layout/channel.xml +++ b/app/src/main/res/layout/channel.xml @@ -1,6 +1,6 @@ @@ -51,35 +51,41 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> - +