Skip to content

Commit 8157ea4

Browse files
committed
feat: complete font size adaptation for all remaining UI components
- Add font sizing to Message/Notification pages (MsgModule) - Add font sizing to Node navigation pages (NodesNavModule) - Add font sizing to Navigation drawer menu items and header - Add scaling support to NavNodesWrapper for node tags - Settings page uses system preferences (already scaled) All UI components now properly respond to font size preferences.
1 parent d167c66 commit 8157ea4

File tree

4 files changed

+72
-9
lines changed

4 files changed

+72
-9
lines changed

app/src/main/java/me/ghui/v2er/injector/module/MsgModule.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
import me.ghui.v2er.module.user.UserHomeActivity;
1818
import me.ghui.v2er.network.bean.NotificationInfo;
1919
import me.ghui.v2er.util.Utils;
20+
import me.ghui.v2er.util.ViewHolderFontHelper;
21+
import me.ghui.v2er.util.FontSizeUtil;
2022
import me.ghui.v2er.widget.LoadMoreRecyclerView;
2123
import me.ghui.v2er.widget.richtext.RichText;
24+
import android.widget.TextView;
2225

2326
/**
2427
* Created by ghui on 10/05/2017.
@@ -41,19 +44,25 @@ protected void convert(ViewHolder holder, NotificationInfo.Reply reply, int posi
4144
GlideApp.with(mView.getContext()).load(reply.getAvatar())
4245
.placeholder(R.drawable.avatar_placeholder_drawable)
4346
.into((ImageView) holder.getView(R.id.avatar_img));
47+
48+
// Apply font sizing
4449
CharSequence titleWithUserName = Utils.highlight(reply.getName() + " " + reply.getTitle(),
4550
true, new int[]{0, reply.getName().length()});
46-
holder.setText(R.id.msg_title_tv, titleWithUserName);
47-
holder.getView(R.id.msg_content_tv);
51+
TextView titleTv = holder.getTextView(R.id.msg_title_tv);
52+
titleTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, FontSizeUtil.getTitleSize());
53+
titleTv.setText(titleWithUserName);
54+
55+
TextView contentTv = holder.getTextView(R.id.msg_content_tv);
4856
if (!Check.isEmpty(reply.getContent())) {
49-
holder.getView(R.id.msg_content_tv).setVisibility(View.VISIBLE);
50-
// holder.setText(R.id.msg_content_tv, reply.getContent());
51-
RichText.from(reply.getContent())
52-
.into(holder.getTextView(R.id.msg_content_tv));
57+
contentTv.setVisibility(View.VISIBLE);
58+
contentTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, FontSizeUtil.getContentSize());
59+
RichText.from(reply.getContent()).into(contentTv);
5360
} else {
54-
holder.getView(R.id.msg_content_tv).setVisibility(View.GONE);
61+
contentTv.setVisibility(View.GONE);
5562
}
56-
holder.setText(R.id.time_tv, reply.getTime());
63+
64+
ViewHolderFontHelper.setTextWithSize(holder, R.id.time_tv,
65+
reply.getTime(), FontSizeUtil.getSubTextSize());
5766
}
5867

5968
@Override

app/src/main/java/me/ghui/v2er/injector/module/NodesNavModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import me.ghui.v2er.module.home.NodesNavFragment;
1010
import me.ghui.v2er.module.home.NodesNavPresenter;
1111
import me.ghui.v2er.network.bean.NodesNavInfo;
12+
import me.ghui.v2er.util.ViewHolderFontHelper;
13+
import me.ghui.v2er.util.FontSizeUtil;
1214
import me.ghui.v2er.widget.NavNodesWrapper;
1315

1416
/**
@@ -28,9 +30,13 @@ public CommonAdapter<NodesNavInfo.Item> provideAdapter() {
2830
return new CommonAdapter<NodesNavInfo.Item>(mNavFragment.getContext(), R.layout.nodes_nav_item) {
2931
@Override
3032
protected void convert(ViewHolder holder, NodesNavInfo.Item item, int position) {
31-
holder.setText(R.id.node_nav_category_tv, item.getCategory());
33+
// Apply font sizing for category title
34+
ViewHolderFontHelper.setTextWithSize(holder, R.id.node_nav_category_tv,
35+
item.getCategory(), FontSizeUtil.getTitleSize());
36+
3237
NavNodesWrapper nodesWrapper = holder.getView(R.id.nodes_nav_node_wrapper);
3338
nodesWrapper.setData(item.getNodes());
39+
// The NavNodesWrapper should handle its own font sizing internally
3440
}
3541
};
3642
}

app/src/main/java/me/ghui/v2er/module/home/MainActivity.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import me.ghui.v2er.util.UserUtils;
5454
import me.ghui.v2er.util.Utils;
5555
import me.ghui.v2er.util.ViewUtils;
56+
import me.ghui.v2er.util.FontSizeUtil;
5657
import me.ghui.v2er.widget.BaseToolBar;
5758
import me.ghui.v2er.widget.CSlidingTabLayout;
5859
import me.ghui.v2er.widget.FollowProgressBtn;
@@ -169,6 +170,12 @@ protected void init() {
169170
mAvatarImg.setOnClickListener(this);
170171
mUserNameTv.setOnClickListener(this);
171172
mCheckInBtn.setOnClickListener(this);
173+
174+
// Apply font size to navigation header
175+
mUserNameTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, FontSizeUtil.getTitleSize());
176+
177+
// Apply font size scaling to navigation menu items
178+
applyFontSizeToNavigationMenu();
172179
mNightMenuItem = mNavigationView.getMenu().findItem(R.id.day_night_item);
173180

174181
mAvatarImg.setOnLongClickListener(v -> {
@@ -298,6 +305,43 @@ private void initCheckIn() {
298305
mCheckInPresenter.start();
299306
}
300307

308+
private void applyFontSizeToNavigationMenu() {
309+
Menu menu = mNavigationView.getMenu();
310+
float scalingRatio = FontSizeUtil.getScalingRatio();
311+
312+
// Apply text scaling to NavigationView items
313+
// NavigationView uses internal text views that we need to scale
314+
ViewGroup menuView = (ViewGroup) mNavigationView.getChildAt(0);
315+
if (menuView != null && menuView instanceof RecyclerView) {
316+
RecyclerView recyclerView = (RecyclerView) menuView;
317+
recyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
318+
@Override
319+
public void onChildViewAttachedToWindow(View view) {
320+
applyScalingToView(view);
321+
}
322+
323+
@Override
324+
public void onChildViewDetachedFromWindow(View view) {
325+
// No action needed
326+
}
327+
});
328+
}
329+
}
330+
331+
private void applyScalingToView(View view) {
332+
if (view instanceof TextView) {
333+
TextView textView = (TextView) view;
334+
float currentSize = textView.getTextSize();
335+
float scaledSize = FontSizeUtil.getScaledSize(currentSize);
336+
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, scaledSize);
337+
} else if (view instanceof ViewGroup) {
338+
ViewGroup viewGroup = (ViewGroup) view;
339+
for (int i = 0; i < viewGroup.getChildCount(); i++) {
340+
applyScalingToView(viewGroup.getChildAt(i));
341+
}
342+
}
343+
}
344+
301345
private void updateDrawLayout() {
302346
UserInfo userInfo = UserUtils.getUserInfo();
303347
if (userInfo != null) {

app/src/main/java/me/ghui/v2er/widget/NavNodesWrapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import me.ghui.v2er.network.bean.NodesNavInfo;
1717
import me.ghui.v2er.util.UriUtils;
1818
import me.ghui.v2er.util.Utils;
19+
import me.ghui.v2er.util.FontSizeUtil;
20+
import android.util.TypedValue;
1921

2022
/**
2123
* Created by ghui on 22/05/2017.
@@ -44,6 +46,8 @@ public void setData(List<NodesNavInfo.Item.NodeItem> nodes) {
4446
view.setText(item.getName());
4547
view.setTag(item.getLink());
4648
view.setOnClickListener(this);
49+
// Apply font size scaling for node tags
50+
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, FontSizeUtil.getSubTextSize());
4751
}
4852
int childCount = getChildCount();
4953
int start = Utils.listSize(nodes);

0 commit comments

Comments
 (0)