From ae0c712a3e1f68682752c58bf00d1cbfa29c7083 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 21 Dec 2018 14:11:39 +0100 Subject: [PATCH] remove animation from BottomBar to make more text fit into labels For many languages, there are unavoidable long words needed for the labels on the button bar, for example, the standard word for Settings can be up to 15 characters long: https://gitlab.com/fdroid/fdroidclient/issues/1569#note_126469088 The BottomBar was scaling the active one up, and sizing all the fields based on that size. This removes that animation, and sets all tabs to always have the same text size. That makes it possible to make the spacing tighter. This also sets the text truncating mode to "middle" which sticks an elipsis in the middle of the truncated word and shows the start and end. closes #1569 closes !756 --- .../fdroid/views/main/MainActivity.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index 50b47cdfb..444765855 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -37,7 +37,11 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.util.TypedValue; +import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import com.ashokvarma.bottomnavigation.BottomNavigationBar; import com.ashokvarma.bottomnavigation.BottomNavigationItem; @@ -57,6 +61,8 @@ import org.fdroid.fdroid.views.ManageReposActivity; import org.fdroid.fdroid.views.apps.AppListActivity; import org.fdroid.fdroid.views.swap.SwapWorkflowActivity; +import java.lang.reflect.Field; + /** * Main view shown to users upon starting F-Droid. *

@@ -133,8 +139,35 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB .setMode(BottomNavigationBar.MODE_FIXED) .addItem(new BottomNavigationItem(R.drawable.ic_updates, R.string.updates).setBadgeItem(updatesBadge)) .addItem(new BottomNavigationItem(R.drawable.ic_settings, R.string.menu_settings)) + .setAnimationDuration(0) .initialise(); + // turn off animation, scaling, and truncate labels in the middle + final LinearLayout linearLayout = bottomNavigation.findViewById(R.id.bottom_navigation_bar_item_container); + final int childCount = linearLayout.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View fixedBottomNavigationTab = linearLayout.getChildAt(i); + try { + Field labelScale = fixedBottomNavigationTab.getClass().getDeclaredField("labelScale"); + labelScale.setAccessible(true); + labelScale.set(fixedBottomNavigationTab, 1.0f); + } catch (IllegalAccessException | NoSuchFieldException | IllegalArgumentException e) { + e.printStackTrace(); + } + + final View container = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_container); + container.setPadding( + 2, + container.getPaddingTop(), + 2, + container.getPaddingBottom() + ); + + final TextView title = fixedBottomNavigationTab.findViewById(R.id.fixed_bottom_navigation_title); + title.setEllipsize(TextUtils.TruncateAt.MIDDLE); + title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13); + } + IntentFilter updateableAppsFilter = new IntentFilter(AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED); updateableAppsFilter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_CHANGED); updateableAppsFilter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_REMOVED);