Prechádzať zdrojové kódy

0.0.44.beta9
- PopMenu 和 BottomMenu 新增 setMenuTextInfo(...) 方法可以单独进行菜单文字样式的设置;
- PopMenu 在设置显示图标及文字居中时,文字可以完全居中显示;
- 修复 WaitDialog 可能无法正常启动的问题;
- 修复 PopMenu 显示位置错误的问题;

kongzue 3 rokov pred
rodič
commit
13fa39d500

+ 5 - 0
.idea/misc.xml

@@ -37,12 +37,17 @@
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogX/src/main/res/layout/layout_dialogx_poptip_material_dark.xml" value="0.4101851851851852" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogX/src/main/res/layout/layout_dialogx_wait.xml" value="0.5328205128205128" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/drawable/button_dialogx_ios_left_light.xml" value="0.3484375" />
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_bottom_dark.xml" value="0.4981481481481482" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_bottom_light.xml" value="0.24166666666666667" />
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_center_dark.xml" value="0.4981481481481482" />
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_center_light.xml" value="0.4981481481481482" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_top_dark.xml" value="0.33229166666666665" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/item_dialogx_ios_bottom_menu_top_light.xml" value="0.5287179487179487" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/layout_dialogx_bottom_ios.xml" value="0.5328205128205128" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/layout_dialogx_bottom_ios_dark.xml" value="0.5328205128205128" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXIOSStyle/src/main/res/layout/layout_dialogx_ios.xml" value="0.5328205128205128" />
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXKongzueStyle/src/main/res/layout/item_dialogx_kongzue_bottom_menu_normal_text.xml" value="0.4981481481481482" />
+        <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXKongzueStyle/src/main/res/layout/item_dialogx_kongzue_bottom_menu_normal_text_dark.xml" value="0.4981481481481482" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXKongzueStyle/src/main/res/layout/layout_dialogx_poptip_kongzue.xml" value="0.362962962962963" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXKongzueStyle/src/main/res/layout/layout_dialogx_poptip_kongzue_dark.xml" value="0.362962962962963" />
         <entry key="..\:/WorkSpace/Android/DialogXDemo/DialogXMIUIStyle/src/main/res/drawable/button_dialogx_miui_blue.xml" value="0.5487179487179488" />

+ 1 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomDialog.java

@@ -63,6 +63,7 @@ public class BottomDialog extends BaseDialog {
     
     protected TextInfo titleTextInfo;
     protected TextInfo messageTextInfo;
+    protected TextInfo menuTextInfo;
     protected TextInfo cancelTextInfo = new TextInfo().setBold(true);
     protected TextInfo okTextInfo = new TextInfo().setBold(true);
     protected TextInfo otherTextInfo = new TextInfo().setBold(true);

+ 10 - 0
DialogX/src/main/java/com/kongzue/dialogx/dialogs/BottomMenu.java

@@ -1096,4 +1096,14 @@ public class BottomMenu extends BottomDialog {
         this.dialogImplMode = dialogImplMode;
         return this;
     }
+    
+    public TextInfo getMenuTextInfo() {
+        if (menuTextInfo == null) return DialogX.menuTextInfo;
+        return menuTextInfo;
+    }
+    
+    public BottomMenu setMenuTextInfo(TextInfo menuTextInfo) {
+        this.menuTextInfo = menuTextInfo;
+        return this;
+    }
 }

+ 18 - 7
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopMenu.java

@@ -31,6 +31,7 @@ import com.kongzue.dialogx.interfaces.OnBindView;
 import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
 import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
 import com.kongzue.dialogx.util.PopMenuArrayAdapter;
+import com.kongzue.dialogx.util.TextInfo;
 import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 import com.kongzue.dialogx.util.views.MaxLinearLayout;
 import com.kongzue.dialogx.util.views.PopMenuListView;
@@ -63,6 +64,7 @@ public class PopMenu extends BaseDialog {
     protected OnIconChangeCallBack<PopMenu> onIconChangeCallBack;           //设置图标
     protected int width = -1;                                               //指定菜单宽度
     protected int height = -1;                                              //指定菜单高度
+    protected TextInfo menuTextInfo;
     
     protected int alignGravity = -1;                                        //指定菜单相对 baseView 的位置
     
@@ -199,8 +201,6 @@ public class PopMenu extends BaseDialog {
                         int width = baseView.getWidth();
                         int height = baseView.getHeight();
                         
-                        log("width=" + width);
-                        
                         int left = baseViewLoc[0];
                         int top = baseViewLoc[1] + (overlayBaseView ? 0 : height);
                         
@@ -390,6 +390,7 @@ public class PopMenu extends BaseDialog {
                         rLp.width = RelativeLayout.LayoutParams.MATCH_PARENT;
                         rLp.leftMargin = dip2px(50);
                         rLp.rightMargin = dip2px(50);
+                        boxBody.setLayoutParams(rLp);
                         boxBody.setAlpha(0f);
                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                             boxBody.setElevation(dip2px(20));
@@ -472,25 +473,25 @@ public class PopMenu extends BaseDialog {
         @Override
         public void doDismiss(View v) {
             if (v != null) v.setEnabled(false);
-    
+            
             if (!dismissAnimFlag) {
                 dismissAnimFlag = true;
                 boxRoot.post(new Runnable() {
                     @Override
                     public void run() {
-            
+                        
                         if (overrideExitDuration != -1) exitAnimDuration = overrideExitDuration;
                         Animation exitAnim = AnimationUtils.loadAnimation(getContext() == null ? boxRoot.getContext() : getContext(), R.anim.anim_dialogx_default_exit);
                         if (exitAnimDuration != -1) {
                             exitAnim.setDuration(exitAnimDuration);
                         }
                         boxBody.startAnimation(exitAnim);
-            
+                        
                         boxRoot.animate()
                                 .alpha(0f)
                                 .setInterpolator(new AccelerateInterpolator())
                                 .setDuration(exitAnimDuration == -1 ? exitAnim.getDuration() : exitAnimDuration);
-            
+                        
                         if (baseView == null) {
                             ValueAnimator bkgAlpha = ValueAnimator.ofFloat(1, 0f);
                             bkgAlpha.setDuration(exitAnimDuration == -1 ? exitAnim.getDuration() : exitAnimDuration);
@@ -503,7 +504,7 @@ public class PopMenu extends BaseDialog {
                             });
                             bkgAlpha.start();
                         }
-            
+                        
                         new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                             @Override
                             public void run() {
@@ -717,4 +718,14 @@ public class PopMenu extends BaseDialog {
         this.dialogImplMode = dialogImplMode;
         return this;
     }
+    
+    public TextInfo getMenuTextInfo() {
+        if (menuTextInfo == null) return DialogX.menuTextInfo;
+        return menuTextInfo;
+    }
+    
+    public PopMenu setMenuTextInfo(TextInfo menuTextInfo) {
+        this.menuTextInfo = menuTextInfo;
+        return this;
+    }
 }

+ 5 - 1
DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java

@@ -374,7 +374,7 @@ public abstract class BaseDialog {
                         }
                         requestDialogFocus();
                     }
-                });
+                }, true);
                 break;
         }
     }
@@ -610,6 +610,10 @@ public abstract class BaseDialog {
             runnable.run();
             return;
         }
+        runOnMain(runnable, true);
+    }
+    
+    protected static void runOnMain(Runnable runnable, boolean needWaitMainLooper) {
         new Handler(Looper.getMainLooper()).post(runnable);
     }
     

+ 16 - 4
DialogX/src/main/java/com/kongzue/dialogx/util/BottomMenuArrayAdapter.java

@@ -18,6 +18,7 @@ import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.SimpleAdapter;
+import android.widget.Space;
 import android.widget.TextView;
 
 import com.kongzue.dialogx.DialogX;
@@ -47,8 +48,9 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
     
     class ViewHolder {
         ImageView imgDialogxMenuIcon;
-        TextView txtDialogxMenuText;
         ImageView imgDialogxMenuSelection;
+        TextView txtDialogxMenuText;
+        Space spaceDialogxRightPadding;
     }
     
     @Override
@@ -90,8 +92,9 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
             convertView = mInflater.inflate(resourceId, null);
             
             viewHolder.imgDialogxMenuIcon = convertView.findViewById(R.id.img_dialogx_menu_icon);
-            viewHolder.txtDialogxMenuText = convertView.findViewById(R.id.txt_dialogx_menu_text);
             viewHolder.imgDialogxMenuSelection = convertView.findViewById(R.id.img_dialogx_menu_selection);
+            viewHolder.txtDialogxMenuText = convertView.findViewById(R.id.txt_dialogx_menu_text);
+            viewHolder.spaceDialogxRightPadding = convertView.findViewById(R.id.space_dialogx_right_padding);
             
             convertView.setTag(viewHolder);
         } else {
@@ -158,8 +161,8 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
         if (null != text) {
             viewHolder.txtDialogxMenuText.setText(text);
             viewHolder.txtDialogxMenuText.setTextColor(context.getResources().getColor(textColor));
-            if (DialogX.menuTextInfo != null) {
-                useTextInfo(viewHolder.txtDialogxMenuText, DialogX.menuTextInfo);
+            if (bottomMenu.getMenuTextInfo() != null) {
+                useTextInfo(viewHolder.txtDialogxMenuText, bottomMenu.getMenuTextInfo());
             }
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                 if (viewHolder.imgDialogxMenuSelection != null) {
@@ -178,6 +181,9 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
                 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)));
@@ -185,9 +191,15 @@ public class BottomMenuArrayAdapter extends BaseAdapter {
                     }
                 } else {
                     viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                    if (viewHolder.spaceDialogxRightPadding != null) {
+                        viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                    }
                 }
             } else {
                 viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                if (viewHolder.spaceDialogxRightPadding != null) {
+                    viewHolder.spaceDialogxRightPadding.setVisibility(View.GONE);
+                }
             }
         }
         

+ 19 - 7
DialogX/src/main/java/com/kongzue/dialogx/util/PopMenuArrayAdapter.java

@@ -5,11 +5,14 @@ import static com.kongzue.dialogx.interfaces.BaseDialog.useTextInfo;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.os.Build;
+import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Space;
 import android.widget.TextView;
 
 import com.kongzue.dialogx.DialogX;
@@ -64,7 +67,7 @@ public class PopMenuArrayAdapter extends BaseAdapter {
             
             viewHolder.imgDialogxMenuIcon = convertView.findViewById(R.id.img_dialogx_menu_icon);
             viewHolder.txtDialogxMenuText = convertView.findViewById(R.id.txt_dialogx_menu_text);
-            viewHolder.imgDialogxMenuSelection = convertView.findViewById(R.id.img_dialogx_menu_selection);
+            viewHolder.spaceRightPadding = convertView.findViewById(R.id.space_dialogx_right_padding);
             
             convertView.setTag(viewHolder);
         } else {
@@ -73,20 +76,23 @@ public class PopMenuArrayAdapter extends BaseAdapter {
         viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
         viewHolder.txtDialogxMenuText.setText(menuList.get(position));
         
-        if (DialogX.menuTextInfo != null) {
-            useTextInfo(viewHolder.txtDialogxMenuText, DialogX.menuTextInfo);
+        if (popMenu.getMenuTextInfo() != null) {
+            useTextInfo(viewHolder.txtDialogxMenuText, popMenu.getMenuTextInfo());
         }
-    
+        
         int textColor = popMenu.isLightTheme() ? R.color.black90 : R.color.white90;
         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();
-        
+            
             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.spaceRightPadding.setVisibility(View.VISIBLE);
+                }
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                     if (autoTintIconInLightOrDarkMode) {
                         viewHolder.imgDialogxMenuIcon.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(textColor)));
@@ -94,16 +100,22 @@ public class PopMenuArrayAdapter extends BaseAdapter {
                 }
             } else {
                 viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+                viewHolder.spaceRightPadding.setVisibility(View.GONE);
             }
         } else {
             viewHolder.imgDialogxMenuIcon.setVisibility(View.GONE);
+            viewHolder.spaceRightPadding.setVisibility(View.GONE);
         }
         return convertView;
     }
     
+    private boolean isHaveProperties(int gravity, int property) {
+        return (gravity & property) == property;
+    }
+    
     class ViewHolder {
         ImageView imgDialogxMenuIcon;
         TextView txtDialogxMenuText;
-        ImageView imgDialogxMenuSelection;
+        Space spaceRightPadding;
     }
 }

+ 7 - 0
DialogX/src/main/res/layout/item_dialogx_material_bottom_menu_normal_text.xml

@@ -38,6 +38,13 @@
             android:textColor="@color/black90"
             android:textSize="16dp" />
 
+        <Space
+            android:id="@+id/space_dialogx_right_padding"
+            android:layout_width="35dp"
+            android:layout_height="35dp"
+            android:layout_marginLeft="8dp"
+            android:visibility="gone" />
+
     </LinearLayout>
 
 </RelativeLayout>

+ 7 - 0
DialogX/src/main/res/layout/item_dialogx_material_context_menu_normal_text.xml

@@ -27,6 +27,13 @@
             android:textColor="@color/black90"
             android:textSize="16dp" />
 
+        <Space
+            android:id="@+id/space_dialogx_right_padding"
+            android:layout_width="35dp"
+            android:layout_height="35dp"
+            android:layout_marginLeft="8dp"
+            android:visibility="gone" />
+
     </LinearLayout>
 
 </RelativeLayout>

+ 8 - 0
DialogXMIUIStyle/src/main/res/layout/item_dialogx_miui_bottom_menu_bottom_dark.xml

@@ -44,6 +44,14 @@
             android:src="@mipmap/img_dialogx_bottom_menu_miui_item_selection"
             android:visibility="gone" />
 
+        <Space
+            android:id="@+id/space_dialogx_right_padding"
+            android:layout_width="35dp"
+            android:layout_height="35dp"
+            android:layout_marginRight="-5dp"
+            android:layout_marginLeft="10dp"
+            android:visibility="gone" />
+
     </LinearLayout>
 
 </RelativeLayout>

+ 8 - 0
DialogXMIUIStyle/src/main/res/layout/item_dialogx_miui_bottom_menu_bottom_light.xml

@@ -44,6 +44,14 @@
             android:src="@mipmap/img_dialogx_bottom_menu_miui_item_selection"
             android:visibility="gone" />
 
+        <Space
+            android:id="@+id/space_dialogx_right_padding"
+            android:layout_width="35dp"
+            android:layout_height="35dp"
+            android:layout_marginRight="-5dp"
+            android:layout_marginLeft="10dp"
+            android:visibility="gone" />
+
     </LinearLayout>
 
 </RelativeLayout>

+ 8 - 1
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -335,7 +335,8 @@ public class MainActivity extends BaseActivity {
         btnContextMenu.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"}).setOnIconChangeCallBack(new OnIconChangeCallBack<PopMenu>(true) {
+                PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"})
+                        .setOnIconChangeCallBack(new OnIconChangeCallBack<PopMenu>(true) {
                     @Override
                     public int getIcon(PopMenu dialog, int index, String menuText) {
                         switch (index) {
@@ -903,6 +904,12 @@ public class MainActivity extends BaseActivity {
                                 fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 6"));
                                 fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 7"));
                                 fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 8"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 9"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 10"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 11"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 12"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 13"));
+                                fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 14"));
                                 RecyclerView recyclerView = (RecyclerView) v;
                                 LinearLayoutManager layoutManager = new LinearLayoutManager(me);
                                 recyclerView.setLayoutManager(layoutManager);

+ 1 - 1
gradle.properties

@@ -18,5 +18,5 @@ android.useAndroidX=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 
-BUILD_VERSION=0.0.44.beta8
+BUILD_VERSION=0.0.44.beta9
 BUILD_VERSION_INT=43