Selaa lähdekoodia

0.0.50.beta27
- 优化 BottomMenu 在大量菜单显示时的性能问题;
- setOnIconChangeCallBack(...) 新增新的接口类型 MenuIconAdapter,在新的接口中通过参数暴露了iconImageView(ImageView),可以由通过网络加载图像到菜单图标中;

Kongzue 3 kuukautta sitten
vanhempi
commit
88bbb02c64

+ 20 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/MenuIconAdapter.java

@@ -0,0 +1,20 @@
+package com.kongzue.dialogx.interfaces;
+
+import android.widget.ImageView;
+
+public abstract class MenuIconAdapter<D extends BaseDialog> extends OnIconChangeCallBack<D> {
+
+    public MenuIconAdapter() {
+    }
+
+    public MenuIconAdapter(boolean autoTintIconInLightOrDarkMode) {
+        super(autoTintIconInLightOrDarkMode);
+    }
+
+    public abstract boolean applyIcon(D dialog, int index, String menuText, ImageView iconImageView);
+
+    @Override
+    public int getIcon(D dialog, int index, String menuText) {
+        return 0;
+    }
+}

+ 6 - 8
DialogX/src/main/java/com/kongzue/dialogx/interfaces/OnIconChangeCallBack.java

@@ -1,7 +1,5 @@
 package com.kongzue.dialogx.interfaces;
 
-import com.kongzue.dialogx.dialogs.BottomMenu;
-
 /**
  * @author: Kongzue
  * @github: https://github.com/kongzue/
@@ -10,18 +8,18 @@ import com.kongzue.dialogx.dialogs.BottomMenu;
  * @createTime: 2020/10/9 14:54
  */
 public abstract class OnIconChangeCallBack<D extends BaseDialog> {
-    
-    private Boolean autoTintIconInLightOrDarkMode;
-    
+
     public OnIconChangeCallBack() {
     }
-    
+
+    private Boolean autoTintIconInLightOrDarkMode;
+
     public OnIconChangeCallBack(boolean autoTintIconInLightOrDarkMode) {
         this.autoTintIconInLightOrDarkMode = autoTintIconInLightOrDarkMode;
     }
-    
+
     public abstract int getIcon(D dialog, int index, String menuText);
-    
+
     public Boolean isAutoTintIconInLightOrDarkMode() {
         return autoTintIconInLightOrDarkMode;
     }

+ 38 - 24
DialogX/src/main/java/com/kongzue/dialogx/util/BottomMenuArrayAdapter.java

@@ -7,7 +7,6 @@ import android.content.Context;
 import android.content.res.ColorStateList;
 import android.os.Build;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -18,6 +17,7 @@ import android.widget.TextView;
 
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.BottomMenu;
+import com.kongzue.dialogx.interfaces.MenuIconAdapter;
 import com.kongzue.dialogx.interfaces.SELECT_MODE;
 
 import java.util.List;
@@ -78,8 +78,7 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
                 if (resourceId == 0) {
                     resourceId = R.layout.item_dialogx_material_bottom_menu_normal_text;
                 } else {
-                    if (!isNull(bottomMenu.getTitle()) || !isNull(bottomMenu.getMessage()) ||
-                            bottomMenu.getCustomView() != null) {
+                    if (!isNull(bottomMenu.getTitle()) || !isNull(bottomMenu.getMessage()) || bottomMenu.getCustomView() != null) {
                         if (position == 0) {
                             resourceId = bottomMenu.getStyle().overrideBottomDialogRes().overrideMenuItemLayout(bottomMenu.isLightTheme(), position, getCount(), true);
                         }
@@ -164,13 +163,7 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
 
         if (null != text) {
             if (defaultMenuTextInfo == null) {
-                defaultMenuTextInfo = new TextInfo()
-                        .setShowEllipsis(viewHolder.txtDialogxMenuText.getEllipsize() == TextUtils.TruncateAt.END)
-                        .setFontColor(viewHolder.txtDialogxMenuText.getTextColors().getDefaultColor())
-                        .setBold(viewHolder.txtDialogxMenuText.getPaint().isFakeBoldText())
-                        .setFontSize(px2dip(viewHolder.txtDialogxMenuText.getTextSize()))
-                        .setGravity(viewHolder.txtDialogxMenuText.getGravity())
-                        .setMaxLines(viewHolder.txtDialogxMenuText.getMaxLines());
+                defaultMenuTextInfo = new TextInfo().setShowEllipsis(viewHolder.txtDialogxMenuText.getEllipsize() == TextUtils.TruncateAt.END).setFontColor(viewHolder.txtDialogxMenuText.getTextColors().getDefaultColor()).setBold(viewHolder.txtDialogxMenuText.getPaint().isFakeBoldText()).setFontSize(px2dip(viewHolder.txtDialogxMenuText.getTextSize())).setGravity(viewHolder.txtDialogxMenuText.getGravity()).setMaxLines(viewHolder.txtDialogxMenuText.getMaxLines());
             }
             viewHolder.txtDialogxMenuText.setText(text);
             viewHolder.txtDialogxMenuText.setTextColor(context.getResources().getColor(textColor));
@@ -201,24 +194,45 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
             }
 
             if (bottomMenu.getOnIconChangeCallBack() != null) {
-                int resId = bottomMenu.getOnIconChangeCallBack().getIcon(bottomMenu, position, text.toString());
-                boolean autoTintIconInLightOrDarkMode = bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? bottomMenu.isAutoTintIconInLightOrDarkMode() : bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+                if (bottomMenu.getOnIconChangeCallBack() instanceof MenuIconAdapter) {
+                    boolean result = ((MenuIconAdapter) bottomMenu.getOnIconChangeCallBack()).applyIcon(bottomMenu, position, text.toString(), viewHolder.imgDialogxMenuIcon);
+                    boolean autoTintIconInLightOrDarkMode = bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? bottomMenu.isAutoTintIconInLightOrDarkMode() : bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
 
-                if (resId != 0) {
-                    viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
-                    viewHolder.imgDialogxMenuIcon.setImageResource(resId);
-                    if (viewHolder.spaceDialogxRightPadding != null) {
-                        viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
-                    }
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                        if (autoTintIconInLightOrDarkMode) {
-                            viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                    viewHolder.imgDialogxMenuIcon.setVisibility(result ? View.VISIBLE : View.GONE);
+                    if (result) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                            if (autoTintIconInLightOrDarkMode) {
+                                viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                            }
+                        }
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
+                        }
+                    } else {
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
                         }
                     }
                 } else {
-                    viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
-                    if (viewHolder.spaceDialogxRightPadding != null) {
-                        viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                    int resId = bottomMenu.getOnIconChangeCallBack().getIcon(bottomMenu, position, text.toString());
+                    boolean autoTintIconInLightOrDarkMode = bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? bottomMenu.isAutoTintIconInLightOrDarkMode() : bottomMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+
+                    if (resId != 0) {
+                        viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
+                        viewHolder.imgDialogxMenuIcon.setImageResource(resId);
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
+                        }
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                            if (autoTintIconInLightOrDarkMode) {
+                                viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                            }
+                        }
+                    } else {
+                        viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                        }
                     }
                 }
             } else {

+ 38 - 23
DialogX/src/main/java/com/kongzue/dialogx/util/MessageMenuArrayAdapter.java

@@ -17,6 +17,7 @@ import android.widget.TextView;
 
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.MessageMenu;
+import com.kongzue.dialogx.interfaces.MenuIconAdapter;
 import com.kongzue.dialogx.interfaces.SELECT_MODE;
 
 import java.util.List;
@@ -69,8 +70,7 @@ public class MessageMenuArrayAdapter extends BaseAdapter {
                 if (resourceId == 0) {
                     resourceId = R.layout.item_dialogx_material_bottom_menu_normal_text;
                 } else {
-                    if (!isNull(messageMenu.getTitle()) || !isNull(messageMenu.getMessage()) ||
-                            messageMenu.getCustomView() != null) {
+                    if (!isNull(messageMenu.getTitle()) || !isNull(messageMenu.getMessage()) || messageMenu.getCustomView() != null) {
                         if (position == 0) {
                             resourceId = messageMenu.getStyle().overrideBottomDialogRes().overrideMenuItemLayout(messageMenu.isLightTheme(), position, getCount(), true);
                         }
@@ -155,13 +155,7 @@ public class MessageMenuArrayAdapter extends BaseAdapter {
 
         if (null != text) {
             if (defaultMenuTextInfo == null) {
-                defaultMenuTextInfo = new TextInfo()
-                        .setShowEllipsis(viewHolder.txtDialogxMenuText.getEllipsize() == TextUtils.TruncateAt.END)
-                        .setFontColor(viewHolder.txtDialogxMenuText.getTextColors().getDefaultColor())
-                        .setBold(viewHolder.txtDialogxMenuText.getPaint().isFakeBoldText())
-                        .setFontSize(px2dip(viewHolder.txtDialogxMenuText.getTextSize()))
-                        .setGravity(viewHolder.txtDialogxMenuText.getGravity())
-                        .setMaxLines(viewHolder.txtDialogxMenuText.getMaxLines());
+                defaultMenuTextInfo = new TextInfo().setShowEllipsis(viewHolder.txtDialogxMenuText.getEllipsize() == TextUtils.TruncateAt.END).setFontColor(viewHolder.txtDialogxMenuText.getTextColors().getDefaultColor()).setBold(viewHolder.txtDialogxMenuText.getPaint().isFakeBoldText()).setFontSize(px2dip(viewHolder.txtDialogxMenuText.getTextSize())).setGravity(viewHolder.txtDialogxMenuText.getGravity()).setMaxLines(viewHolder.txtDialogxMenuText.getMaxLines());
             }
             viewHolder.txtDialogxMenuText.setText(text);
             viewHolder.txtDialogxMenuText.setTextColor(context.getResources().getColor(textColor));
@@ -192,24 +186,45 @@ public class MessageMenuArrayAdapter extends BaseAdapter {
             }
 
             if (messageMenu.getOnIconChangeCallBack() != null) {
-                int resId = messageMenu.getOnIconChangeCallBack().getIcon(messageMenu, position, text.toString());
-                boolean autoTintIconInLightOrDarkMode = messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? messageMenu.isAutoTintIconInLightOrDarkMode() : messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+                if (messageMenu.getOnIconChangeCallBack() instanceof MenuIconAdapter) {
+                    boolean result = ((MenuIconAdapter) messageMenu.getOnIconChangeCallBack()).applyIcon(messageMenu, position, text.toString(), viewHolder.imgDialogxMenuIcon);
+                    boolean autoTintIconInLightOrDarkMode = messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? messageMenu.isAutoTintIconInLightOrDarkMode() : messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
 
-                if (resId != 0) {
-                    viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
-                    viewHolder.imgDialogxMenuIcon.setImageResource(resId);
-                    if (viewHolder.spaceDialogxRightPadding != null) {
-                        viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
-                    }
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                        if (autoTintIconInLightOrDarkMode) {
-                            viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                    viewHolder.imgDialogxMenuIcon.setVisibility(result ? View.VISIBLE : View.GONE);
+                    if (result) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                            if (autoTintIconInLightOrDarkMode) {
+                                viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                            }
+                        }
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
+                        }
+                    } else {
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
                         }
                     }
                 } else {
-                    viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
-                    if (viewHolder.spaceDialogxRightPadding != null) {
-                        viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                    int resId = messageMenu.getOnIconChangeCallBack().getIcon(messageMenu, position, text.toString());
+                    boolean autoTintIconInLightOrDarkMode = messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? messageMenu.isAutoTintIconInLightOrDarkMode() : messageMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+
+                    if (resId != 0) {
+                        viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
+                        viewHolder.imgDialogxMenuIcon.setImageResource(resId);
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
+                        }
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                            if (autoTintIconInLightOrDarkMode) {
+                                viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                            }
+                        }
+                    } else {
+                        viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                        }
                     }
                 }
             } else {

+ 36 - 14
DialogX/src/main/java/com/kongzue/dialogx/util/PopMenuArrayAdapter.java

@@ -17,6 +17,7 @@ import android.widget.TextView;
 
 import com.kongzue.dialogx.R;
 import com.kongzue.dialogx.dialogs.PopMenu;
+import com.kongzue.dialogx.interfaces.MenuIconAdapter;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -124,26 +125,47 @@ public class PopMenuArrayAdapter extends BaseAdapter {
         viewHolder.txtDialogxMenuText.setTextColor(context.getResources().getColor(textColor));
         
         if (popMenu.getOnIconChangeCallBack() != null) {
-            int resId = popMenu.getOnIconChangeCallBack().getIcon(popMenu, position, menuList.get(position).toString());
-            boolean autoTintIconInLightOrDarkMode = popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? popMenu.isAutoTintIconInLightOrDarkMode() : popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+            if (popMenu.getOnIconChangeCallBack() instanceof MenuIconAdapter) {
+                boolean result = ((MenuIconAdapter) popMenu.getOnIconChangeCallBack()).applyIcon(popMenu, position, menuList.get(position).toString(), viewHolder.imgDialogxMenuIcon);
+                boolean autoTintIconInLightOrDarkMode = popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? popMenu.isAutoTintIconInLightOrDarkMode() : popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
 
-            if (resId != 0) {
-                viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
-                viewHolder.imgDialogxMenuIcon.setImageResource(resId);
-                if (isHaveProperties(viewHolder.txtDialogxMenuText.getGravity(), Gravity.CENTER) || isHaveProperties(viewHolder.txtDialogxMenuText.getGravity(), Gravity.CENTER_HORIZONTAL)) {
+                viewHolder.imgDialogxMenuIcon.setVisibility(result ? View.VISIBLE : View.GONE);
+                if (result) {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                        if (autoTintIconInLightOrDarkMode) {
+                            viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                        }
+                    }
                     if (viewHolder.spaceDialogxRightPadding != null) {
                         viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
                     }
-                }
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                    if (autoTintIconInLightOrDarkMode) {
-                        viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                } else {
+                    if (viewHolder.spaceDialogxRightPadding != null) {
+                        viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
                     }
                 }
-            } else {
-                viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
-                if (viewHolder.spaceDialogxRightPadding != null) {
-                    viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+            }else{
+                int resId = popMenu.getOnIconChangeCallBack().getIcon(popMenu, position, menuList.get(position).toString());
+                boolean autoTintIconInLightOrDarkMode = popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode() == null ? popMenu.isAutoTintIconInLightOrDarkMode() : popMenu.getOnIconChangeCallBack().isAutoTintIconInLightOrDarkMode();
+
+                if (resId != 0) {
+                    viewHolder.imgDialogxMenuIcon.setVisibility(View.VISIBLE);
+                    viewHolder.imgDialogxMenuIcon.setImageResource(resId);
+                    if (isHaveProperties(viewHolder.txtDialogxMenuText.getGravity(), Gravity.CENTER) || isHaveProperties(viewHolder.txtDialogxMenuText.getGravity(), Gravity.CENTER_HORIZONTAL)) {
+                        if (viewHolder.spaceDialogxRightPadding != null) {
+                            viewHolder.spaceDialogxRightPadding.setVisibility(View.VISIBLE);
+                        }
+                    }
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                        if (autoTintIconInLightOrDarkMode) {
+                            viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
+                        }
+                    }
+                } else {
+                    viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                    if (viewHolder.spaceDialogxRightPadding != null) {
+                        viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                    }
                 }
             }
         } else {

+ 5 - 6
DialogX/src/main/res/layout/layout_dialogx_bottom_material_dark.xml

@@ -54,7 +54,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbars="vertical">
 
@@ -81,15 +80,15 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content" />
 
-                        <FrameLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
+
                 <LinearLayout
                     android:id="@+id/box_button"
                     android:layout_width="match_parent"

+ 5 - 6
DialogXIOSStyle/src/main/res/layout/layout_dialogx_bottom_ios.xml

@@ -60,7 +60,6 @@
                             android:id="@+id/scrollView"
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
-                            android:layout_weight="1"
                             android:overScrollMode="never"
                             android:scrollbarSize="7dp"
                             android:scrollbarThumbVertical="@drawable/scrollbar_dialogx_vertical"
@@ -96,15 +95,15 @@
                                     android:tag="split"
                                     android:visibility="gone" />
 
-                                <RelativeLayout
-                                    android:id="@+id/box_list"
-                                    android:layout_width="match_parent"
-                                    android:layout_height="wrap_content" />
-
                             </LinearLayout>
 
                         </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                        <FrameLayout
+                            android:id="@+id/box_list"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content" />
+
                     </com.kongzue.dialogx.style.views.BlurLinearLayout>
 
                 </com.kongzue.dialogx.util.views.MaxRelativeLayout>

+ 5 - 6
DialogXIOSStyle/src/main/res/layout/layout_dialogx_bottom_ios_dark.xml

@@ -61,7 +61,6 @@
                             android:id="@+id/scrollView"
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
-                            android:layout_weight="1"
                             android:overScrollMode="never"
                             android:scrollbarSize="7dp"
                             android:scrollbarThumbVertical="@drawable/scrollbar_dialogx_vertical_dark"
@@ -97,15 +96,15 @@
                                     android:tag="split"
                                     android:visibility="gone" />
 
-                                <RelativeLayout
-                                    android:id="@+id/box_list"
-                                    android:layout_width="match_parent"
-                                    android:layout_height="wrap_content" />
-
                             </LinearLayout>
 
                         </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                        <FrameLayout
+                            android:id="@+id/box_list"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content" />
+
                     </com.kongzue.dialogx.style.views.BlurLinearLayout>
 
                 </com.kongzue.dialogx.util.views.MaxRelativeLayout>

+ 5 - 6
DialogXKongzueStyle/src/main/res/layout/layout_dialogx_bottom_kongzue.xml

@@ -45,7 +45,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbarSize="7dp"
                     android:scrollbars="vertical">
@@ -80,15 +79,15 @@
                             android:background="@color/dialogxKongzueButtonSplitLineColor"
                             android:tag="split" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
+
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"

+ 5 - 6
DialogXKongzueStyle/src/main/res/layout/layout_dialogx_bottom_kongzue_dark.xml

@@ -45,7 +45,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbarSize="7dp"
                     android:scrollbars="vertical">
@@ -80,15 +79,15 @@
                             android:background="@color/dialogxKongzueDarkButtonSplitLineColor"
                             android:tag="split" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
+
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"

+ 8 - 9
DialogXMIUIStyle/src/main/res/layout/layout_dialogx_bottom_miui.xml

@@ -44,7 +44,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbarSize="7dp"
                     android:scrollbarThumbVertical="@drawable/scrollbar_dialogx_vertical"
@@ -75,18 +74,18 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_marginTop="10dp"
-                            android:layout_marginBottom="10dp"
-                            android:visibility="gone" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginBottom="10dp"
+                    android:visibility="gone" />
+
                 <LinearLayout
                     android:id="@+id/box_button"
                     android:layout_width="match_parent"

+ 8 - 9
DialogXMIUIStyle/src/main/res/layout/layout_dialogx_bottom_miui_dark.xml

@@ -44,7 +44,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbarSize="7dp"
                     android:scrollbarThumbVertical="@drawable/scrollbar_dialogx_vertical_dark"
@@ -75,16 +74,16 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_marginTop="10dp"
-                            android:layout_marginBottom="10dp"
-                            android:visibility="gone" />
-
                     </LinearLayout>
 
+                    <FrameLayout
+                        android:id="@+id/box_list"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginBottom="10dp"
+                        android:visibility="gone" />
+
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
                 <LinearLayout

+ 5 - 6
DialogXMaterialYou/src/main/res/layout/layout_dialogx_bottom_material_you.xml

@@ -55,7 +55,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbars="vertical">
 
@@ -83,15 +82,15 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
+
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"

+ 5 - 6
DialogXMaterialYou/src/main/res/layout/layout_dialogx_bottom_material_you_dark.xml

@@ -55,7 +55,6 @@
                     android:id="@+id/scrollView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
                     android:overScrollMode="never"
                     android:scrollbars="vertical">
 
@@ -83,15 +82,15 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content" />
 
-                        <RelativeLayout
-                            android:id="@+id/box_list"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content" />
-
                     </LinearLayout>
 
                 </com.kongzue.dialogx.util.views.DialogScrollView>
 
+                <FrameLayout
+                    android:id="@+id/box_list"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content" />
+
                 <LinearLayout
                     android:id="@+id/box_button"
                     android:layout_width="match_parent"

+ 2 - 0
app/build.gradle

@@ -40,4 +40,6 @@ dependencies {
     //implementation 'com.github.kongzue:DialogXStyle-Snackbar:1.0.6'
     implementation 'com.google.android.material:material:1.4.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+
+    implementation 'com.github.bumptech.glide:glide:4.15.1'
 }

+ 3 - 2
app/src/main/AndroidManifest.xml

@@ -10,6 +10,7 @@
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
+        android:networkSecurityConfig="@xml/network_security_config"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
@@ -27,8 +28,8 @@
             android:theme="@style/AppCompatTheme"
             android:windowSoftInputMode="adjustResize" />
 
-<!--            android:name=".activity.MainActivity"-->
-<!--            android:name=".activity.TestMainActivity"-->
+        <!--            android:name=".activity.MainActivity"-->
+        <!--            android:name=".activity.TestMainActivity"-->
 
         <activity
             android:name=".activity.MainActivity"

+ 76 - 60
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -46,6 +46,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.bumptech.glide.Glide;
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.button.MaterialButtonToggleGroup;
 import com.kongzue.baseframework.BaseActivity;
@@ -75,6 +76,7 @@ import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
 import com.kongzue.dialogx.interfaces.DialogXRunnable;
 import com.kongzue.dialogx.interfaces.DialogXStyle;
+import com.kongzue.dialogx.interfaces.MenuIconAdapter;
 import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
@@ -748,45 +750,46 @@ public class MainActivity extends BaseActivity {
                             .setMessage("message")
                             .setBottomDialogMaxHeight(0.6f)
                             .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"}).setOnIconChangeCallBack(new OnIconChangeCallBack<BottomMenu>(true) {
-                        @Override
-                        public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
-                            switch (menuText) {
-                                case "添加":
-                                    return R.mipmap.img_dialogx_demo_add;
-                                case "查看":
-                                    return R.mipmap.img_dialogx_demo_view;
-                                case "编辑":
-                                    return R.mipmap.img_dialogx_demo_edit;
-                                case "删除":
-                                    return R.mipmap.img_dialogx_demo_delete;
-                                case "分享":
-                                    return R.mipmap.img_dialogx_demo_share;
-                                case "评论":
-                                    return R.mipmap.img_dialogx_demo_comment;
-                                case "下载":
-                                    return R.mipmap.img_dialogx_demo_download;
-                                case "收藏":
-                                    return R.mipmap.img_dialogx_demo_favorite;
-                                case "赞!":
-                                    return R.mipmap.img_dialogx_demo_good;
-                                case "不喜欢":
-                                    return R.mipmap.img_dialogx_demo_dislike;
-                                case "所属专辑":
-                                    return R.mipmap.img_dialogx_demo_album;
-                                case "复制链接":
-                                    return R.mipmap.img_dialogx_demo_link;
-                                case "类似推荐":
-                                    return R.mipmap.img_dialogx_demo_recommend;
-                            }
-                            return 0;
-                        }
-                    }).setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
-                        @Override
-                        public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                            PopTip.show(text);
-                            return false;
-                        }
-                    }).show();
+
+                                @Override
+                                public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
+                                    switch (menuText) {
+                                        case "添加":
+                                            return R.mipmap.img_dialogx_demo_add;
+                                        case "查看":
+                                            return R.mipmap.img_dialogx_demo_view;
+                                        case "编辑":
+                                            return R.mipmap.img_dialogx_demo_edit;
+                                        case "删除":
+                                            return R.mipmap.img_dialogx_demo_delete;
+                                        case "分享":
+                                            return R.mipmap.img_dialogx_demo_share;
+                                        case "评论":
+                                            return R.mipmap.img_dialogx_demo_comment;
+                                        case "下载":
+                                            return R.mipmap.img_dialogx_demo_download;
+                                        case "收藏":
+                                            return R.mipmap.img_dialogx_demo_favorite;
+                                        case "赞!":
+                                            return R.mipmap.img_dialogx_demo_good;
+                                        case "不喜欢":
+                                            return R.mipmap.img_dialogx_demo_dislike;
+                                        case "所属专辑":
+                                            return R.mipmap.img_dialogx_demo_album;
+                                        case "复制链接":
+                                            return R.mipmap.img_dialogx_demo_link;
+                                        case "类似推荐":
+                                            return R.mipmap.img_dialogx_demo_recommend;
+                                    }
+                                    return 0;
+                                }
+                            }).setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
+                                @Override
+                                public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
+                                    PopTip.show(text);
+                                    return false;
+                                }
+                            }).show();
 
 //                      测试用代码
 //                    BottomMenu.show("添加", "查看", "编辑")
@@ -806,16 +809,29 @@ public class MainActivity extends BaseActivity {
                     }).setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
                         @Override
                         public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
-                            log("点击了菜单:"+ index + " 文本:" + text);
+                            log("点击了菜单:" + index + " 文本:" + text);
                             PopTip.show(text);
                             try {
-                               throw  new RuntimeException("test");
-                            }catch (Exception e) {
+                                throw new RuntimeException("test");
+                            } catch (Exception e) {
                                 e.printStackTrace();
                             }
                             return false;
                         }
-                    }).setIconResIds(R.mipmap.img_dialogx_demo_add,R.mipmap.img_dialogx_demo_view,R.mipmap.img_dialogx_demo_link);
+                    }).setOnIconChangeCallBack(new MenuIconAdapter<BottomMenu>(false) {
+
+                        String[] urls = {
+                                "http://www.kongzue.com/test/res/dialogx/ic_menu_add.png",
+                                "http://www.kongzue.com/test/res/dialogx/ic_menu_read_later.png",
+                                "http://www.kongzue.com/test/res/dialogx/ic_menu_link.png"
+                        };
+
+                        @Override
+                        public boolean applyIcon(BottomMenu dialog, int index, String menuText, ImageView iconImageView) {
+                            Glide.with(MainActivity.this).load(urls[index]).into(iconImageView);
+                            return true;
+                        }
+                    });//.setIconResIds(R.mipmap.img_dialogx_demo_add, R.mipmap.img_dialogx_demo_view, R.mipmap.img_dialogx_demo_link);
                 }
             }
         });
@@ -1114,24 +1130,24 @@ public class MainActivity extends BaseActivity {
 //                        .setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30));
 
                 CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog) {
-                    @Override
-                    public void onBind(final CustomDialog dialog, View v) {
-                        ImageView btnOk;
-                        btnOk = v.findViewById(R.id.btn_ok);
-                        btnOk.setOnClickListener(new View.OnClickListener() {
                             @Override
-                            public void onClick(View v) {
-                                dialog.dismiss();
+                            public void onBind(final CustomDialog dialog, View v) {
+                                ImageView btnOk;
+                                btnOk = v.findViewById(R.id.btn_ok);
+                                btnOk.setOnClickListener(new View.OnClickListener() {
+                                    @Override
+                                    public void onClick(View v) {
+                                        dialog.dismiss();
+                                    }
+                                });
                             }
-                        });
-                    }
-                }).setMaskColor(getColorS(com.kongzue.dialogx.R.color.black50)).setOnBackgroundMaskClickListener(new OnBackgroundMaskClickListener<CustomDialog>() {
-                    @Override
-                    public boolean onClick(CustomDialog dialog, View v) {
-                        log("点击遮罩层");
-                        return false;
-                    }
-                }).setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30))
+                        }).setMaskColor(getColorS(com.kongzue.dialogx.R.color.black50)).setOnBackgroundMaskClickListener(new OnBackgroundMaskClickListener<CustomDialog>() {
+                            @Override
+                            public boolean onClick(CustomDialog dialog, View v) {
+                                log("点击遮罩层");
+                                return false;
+                            }
+                        }).setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30))
                         //实验性,RenderEffect实现的背景模糊效果
                         .setDialogLifecycleCallback(new DialogLifecycleCallback<CustomDialog>() {
                             @Override
@@ -1559,7 +1575,7 @@ public class MainActivity extends BaseActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-      //  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+        //  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
         super.onCreate(savedInstanceState);
     }
 }

+ 7 - 0
app/src/main/res/xml/network_security_config.xml

@@ -0,0 +1,7 @@
+<network-security-config>
+    <base-config cleartextTrafficPermitted="true">
+        <trust-anchors>
+            <certificates src="system" />
+        </trust-anchors>
+    </base-config>
+</network-security-config>