Estoy tratando de usar esta clase. Funciona bien en compilaciones de depuración, pero nunca funciona en compilaciones de lanzamiento. Sé que proguard lo elimina, entonces la pregunta es ¿Cómo mantener esa clase?
import android.support.design.internal.BottomNavigationItemView; import android.support.design.internal.BottomNavigationMenuView; import android.support.design.widget.BottomNavigationView; import android.util.Log; import java.lang.reflect.Field; public class BottomNavigationViewHelper { public static void disableShiftMode(BottomNavigationView view) { BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); try { Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); shiftingMode.setAccessible(true); shiftingMode.setBoolean(menuView, false); shiftingMode.setAccessible(false); for (int i = 0; i < menuView.getChildCount(); i++) { BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); //noinspection RestrictedApi item.setShiftingMode(false); // set once again checked value, so view will be updated //noinspection RestrictedApi item.setChecked(item.getItemData().isChecked()); } } catch (NoSuchFieldException e) { Log.e("BNVHelper", "Unable to get shift mode field", e); } catch (IllegalAccessException e) { Log.e("BNVHelper", "Unable to change value of shift mode", e); } } }Esto hizo el truco para mí.
# Bottom Navigation Helper -keep class android.support.design.internal.BottomNavigationItemView{ *; } -keep class android.support.design.internal.BottomNavigationMenuView{ *; }para mantener la clase
-keep class com.example.** { *; }para mantener el atributo,
-keepclassmembers class com.example.** { <fields>; }