소스 검색

优化UI问题

zk 1 년 전
부모
커밋
12ef28d8a8

+ 106 - 0
app/src/main/java/com/atmob/voiceai/widget/NoSpaceTextView.java

@@ -0,0 +1,106 @@
+package com.atmob.voiceai.widget;
+
+import android.content.Context;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.text.Layout;
+import android.text.TextPaint;
+import android.util.AttributeSet;
+
+import androidx.annotation.Nullable;
+
+public class NoSpaceTextView extends androidx.appcompat.widget.AppCompatTextView {
+
+    /**
+     * 控制measure()方法 刷新测量
+     */
+    private boolean refreshMeasure = false;
+
+    public NoSpaceTextView(Context context) {
+        super(context);
+    }
+
+    public NoSpaceTextView(Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public NoSpaceTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        removeSpace(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    @Override
+    public void setText(CharSequence text, BufferType type) {
+        super.setText(text, type);
+        // 每次文本内容改变时,需要测量两次,确保计算的高度没有问题
+        refreshMeasure = true;
+    }
+
+    /**
+     * 这里处理文本的上下留白问题
+     */
+    private void removeSpace(int widthspc, int heightspc) {
+
+        int paddingTop = 0;
+        String[] linesText = getLinesText();
+        TextPaint paint = getPaint();
+        Rect rect = new Rect();
+        String text = linesText[0];
+        paint.getTextBounds(text, 0, text.length(), rect);
+
+        Paint.FontMetricsInt fontMetricsInt = new Paint.FontMetricsInt();
+        paint.getFontMetricsInt(fontMetricsInt);
+
+        paddingTop = (fontMetricsInt.top - rect.top);
+
+        // 设置TextView向上的padding (小于0, 即把TextView文本内容向上移动)
+        setPadding(getLeftPaddingOffset()
+                , paddingTop + getTopPaddingOffset()
+                , getRightPaddingOffset()
+                , getBottomPaddingOffset());
+
+        String endText = linesText[linesText.length - 1];
+        paint.getTextBounds(endText, 0, endText.length(), rect);
+
+        // 再减去最后一行文本的底部空白,得到的就是TextView内容上线贴边的的高度,到达消除文本上下留白的问题
+        setMeasuredDimension(getMeasuredWidth()
+                , getMeasuredHeight() - (fontMetricsInt.bottom - rect.bottom));
+
+        if (refreshMeasure) {
+            refreshMeasure = false;
+            measure(widthspc, heightspc);
+        }
+    }
+
+    /**
+     * 获取每一行的文本内容
+     */
+    private String[] getLinesText() {
+
+        int start = 0;
+        int end = 0;
+
+        String[] texts = new String[getLineCount()];
+
+        String text = getText().toString();
+
+        Layout layout = getLayout();
+
+        for (int i = 0; i < getLineCount(); i++) {
+            end = layout.getLineEnd(i);
+
+            String line = text.substring(start, end); //指定行的内容
+            start = end;
+
+            texts[i] = line;
+        }
+
+        return texts;
+    }
+}

+ 2 - 1
app/src/main/res/layout/item_voice_ai_list.xml

@@ -100,6 +100,7 @@
             android:background="@drawable/bg_voice_new"
             android:gravity="center"
             android:lines="1"
+            android:paddingBottom="1dp"
             android:text="@string/voice_new"
             android:textColor="@color/white"
             android:textSize="10dp"
@@ -126,7 +127,7 @@
             android:gravity="center"
             android:lines="1"
             android:text="@{bean.name}"
-            android:textColor="@color/white"
+            android:textColor="@{bean.check ?@color/colorPrimaryVariant :@color/white}"
             android:textSize="12sp"
             app:layout_constraintEnd_toEndOf="@+id/space_content"
             app:layout_constraintStart_toStartOf="@+id/space_content"

+ 28 - 1
app/src/main/res/layout/item_voice_ai_result_recommend.xml

@@ -35,7 +35,34 @@
             app:layout_constraintDimensionRatio="1:1"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
-            tools:src="@drawable/icon_voice_vip_use" />
+            tools:src="@drawable/icon_default_avatar" />
+
+        <TextView
+            isGone="@{!bean.hasNew}"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:background="@drawable/bg_voice_new"
+            android:gravity="center"
+            android:lines="1"
+            android:paddingBottom="1dp"
+            android:text="@string/voice_new"
+            android:textColor="@color/white"
+            android:textSize="10dp"
+            app:layout_constraintDimensionRatio="29:15"
+            app:layout_constraintEnd_toEndOf="@+id/iv_avatar"
+            app:layout_constraintTop_toTopOf="@id/iv_avatar"
+            app:layout_constraintWidth_percent="0.3717948717948718" />
+
+        <ImageView
+            isGone="@{!bean.hasPro}"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_margin="4dp"
+            android:src="@drawable/icon_voice_vip_use"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintEnd_toEndOf="@+id/iv_avatar"
+            app:layout_constraintWidth_percent="0.2564102564102564" />
 
         <TextView
             android:layout_width="0dp"