Liu Song’s Projects


~/Projects/tvbox

git clone https://code.lsong.org/tvbox

Commit

Commit
5ba423c686de6143fabdaad63f9f9db02de350f7
Author
FongMi <[email protected]>
Date
2023-11-15 18:44:50 +0800 +0800
Diffstat
 app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java | 1 
 app/src/leanback/res/layout/activity_live.xml | 3 
 app/src/main/java/com/fongmi/android/tv/bean/Live.java | 13 
 app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java | 7 
 app/src/mobile/res/layout/activity_live.xml | 15 
 app/src/mobile/res/layout/adapter_channel.xml | 7 
 app/src/mobile/res/layout/adapter_group.xml | 10 

Dynamic live layout width


diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
index 19724ae534327e73786efaee6a2f5bfe000d7ba8..0cd18f215244347200d1bf369c73f272843e6173 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
@@ -249,6 +249,7 @@         for (Group group : home.getGroups()) (group.isHidden() ? mHides : items).add(group);
         mGroupAdapter.setItems(items, null);
         setPosition(LiveConfig.get().find(items));
         mBinding.control.home.setText(home.getName());
+        mBinding.group.getLayoutParams().width = home.getWidth();
     }
 
     private void setPosition(int[] position) {




diff --git a/app/src/leanback/res/layout/activity_live.xml b/app/src/leanback/res/layout/activity_live.xml
index c567a517b1768e49b58bafe0a1cfecd3d3f7baf3..43b1d7e9387e1a6f9a006b03e5907a2e00511f16 100644
--- a/app/src/leanback/res/layout/activity_live.xml
+++ b/app/src/leanback/res/layout/activity_live.xml
@@ -59,7 +59,8 @@         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:background="@drawable/shape_live_list"
         android:orientation="horizontal"
-        android:visibility="gone">
+        android:visibility="gone"
+        tools:visibility="visible">
 
         <com.fongmi.android.tv.ui.custom.CustomLiveListView
             android:id="@+id/group"




diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Live.java b/app/src/main/java/com/fongmi/android/tv/bean/Live.java
index 74ff2cb0c2e939ce4bdf19e06c0bbb724737c7e8..1d67f8d63285e537526b7e6ce97ef8ea09e5c4a4 100644
--- a/app/src/main/java/com/fongmi/android/tv/bean/Live.java
+++ b/app/src/main/java/com/fongmi/android/tv/bean/Live.java
@@ -5,6 +5,7 @@ import android.text.TextUtils;
 
 import com.fongmi.android.tv.App;
 import com.fongmi.android.tv.Constant;
+import com.fongmi.android.tv.utils.ResUtil;
 import com.google.gson.JsonElement;
 import com.google.gson.annotations.SerializedName;
 import com.google.gson.reflect.TypeToken;
@@ -167,6 +168,18 @@     public Group find(Group item) {
         for (Group group : getGroups()) if (group.getName().equals(item.getName())) return group;
         getGroups().add(item);
         return item;
+    }
+
+    public boolean hasLogo() {
+        for (Group group : getGroups()) if (group.getLogo().length() > 0) return true;
+        return false;
+    }
+
+    public int getWidth() {
+        int width = 0;
+        for (Group group : getGroups()) width = Math.max(width, ResUtil.getTextWidth(group.getName(), 16) + ResUtil.dp2px(60));
+        if (hasLogo()) width += ResUtil.dp2px(48);
+        return width;
     }
 
     @Override




diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java
index c792aaefef293af68cbe3996600af0db6697bd8f..7b3a5590b07eb4c8131a28a0f0e9646b76518e33 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java
@@ -4,6 +4,7 @@ import android.app.Activity;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.graphics.Paint;
 import android.graphics.Point;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
@@ -128,5 +129,11 @@     }
 
     public static Display getDisplay(Activity activity) {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R ? activity.getDisplay() : activity.getWindowManager().getDefaultDisplay();
+    }
+
+    public static int getTextWidth(String content, int textSize) {
+        Paint paint = new Paint();
+        paint.setTextSize(sp2px(textSize));
+        return (int) paint.measureText(content);
     }
 }




diff --git a/app/src/mobile/res/layout/activity_live.xml b/app/src/mobile/res/layout/activity_live.xml
index 0321c3e2568d102434a256a183f6a0480be2d502..38efdae533fcd44b71beeae11f102e4e1ab71db0 100644
--- a/app/src/mobile/res/layout/activity_live.xml
+++ b/app/src/mobile/res/layout/activity_live.xml
@@ -62,14 +62,11 @@         android:visibility="gone">
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/group"
-            android:layout_width="120dp"
+            android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:clipChildren="false"
             android:clipToPadding="false"
-            android:paddingStart="8dp"
-            android:paddingTop="8dp"
-            android:paddingEnd="8dp"
-            android:paddingBottom="8dp"
+            android:padding="8dp"
             app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
             tools:itemCount="5"
             tools:listitem="@layout/adapter_group" />
@@ -81,15 +78,13 @@             android:background="@color/grey_700" />
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/channel"
-            android:layout_width="260dp"
+            android:layout_width="wrap_content"
             android:layout_height="match_parent"
             android:clipChildren="false"
             android:clipToPadding="false"
-            android:paddingStart="8dp"
-            android:paddingTop="8dp"
+    android:layout_height="match_parent"
     xmlns:tools="http://schemas.android.com/tools"
-    <FrameLayout
-            android:paddingBottom="8dp"
+            android:padding="8dp"
             app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
             tools:itemCount="5"
             tools:listitem="@layout/adapter_channel" />




diff --git a/app/src/mobile/res/layout/adapter_channel.xml b/app/src/mobile/res/layout/adapter_channel.xml
index 208cf519db431308c828d54d38d5d6b79a9bd65a..a3c4c6eb28aba9869767ebda0aa001760e8fefac 100644
--- a/app/src/mobile/res/layout/adapter_channel.xml
+++ b/app/src/mobile/res/layout/adapter_channel.xml
@@ -3,15 +3,17 @@      xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_marginTop="4dp"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_marginBottom="4dp"
     android:background="@drawable/shape_channel"
     android:gravity="center"
     android:orientation="horizontal"
     android:paddingStart="12dp"
-    android:paddingTop="8dp"
+    android:paddingTop="6dp"
     android:paddingEnd="12dp"
-    android:paddingBottom="8dp">
+    android:paddingBottom="6dp">
 
     <TextView
         android:id="@+id/number"
@@ -37,6 +39,7 @@         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:duplicateParentState="true"
         android:ellipsize="marquee"
+        android:maxEms="10"
         android:singleLine="true"
         android:textColor="@color/channel"
         android:textSize="14sp"




diff --git a/app/src/mobile/res/layout/adapter_group.xml b/app/src/mobile/res/layout/adapter_group.xml
index d7ec5d2aacf09292c5d2ea70b26e6a1d3713f628..4455ff918d0193baec18b0b589fe98c063074af0 100644
--- a/app/src/mobile/res/layout/adapter_group.xml
+++ b/app/src/mobile/res/layout/adapter_group.xml
@@ -3,15 +3,15 @@      xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_marginTop="4dp"
+    android:layout_marginTop="6dp"
-    android:layout_marginBottom="4dp"
+    android:layout_marginBottom="6dp"
     android:background="@drawable/shape_group"
     android:gravity="center"
     android:orientation="horizontal"
     android:paddingStart="12dp"
-    android:paddingTop="8dp"
+    android:paddingTop="6dp"
     android:paddingEnd="12dp"
-    android:paddingBottom="8dp">
+    android:paddingBottom="6dp">
 
     <ImageView
         android:id="@+id/logo"
@@ -27,6 +27,8 @@         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:duplicateParentState="true"
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:background="@drawable/shape_group"
+    xmlns:tools="http://schemas.android.com/tools"
     android:background="@drawable/shape_group"
         android:singleLine="true"
         android:textColor="@color/group"