इस उत्तर के लिए कुछ अतिरिक्त स्वाद जोड़ना, क्योंकि यह थोड़ा भ्रम में चला गया। आपको अपनी परियोजना में होने वाले किसी भी परीक्षण में इस परीक्षा को छोड़ने में सक्षम होना चाहिए@RunWith(AndroidJUnit4.class)
(आपको अपने डिमेंस को अपने डिमेंस.एमपीएम में जोड़ना होगा)।
नोट: ये सभी परीक्षण पास हैं
@Test public void testScaledFontSizes() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
final Context context = InstrumentationRegistry.getTargetContext();
Configuration configuration = context.getResources().getConfiguration();
configuration.fontScale = 2.0f;
configuration.densityDpi = 160; // mdpi, 1:1
context.getResources().updateConfiguration(configuration, null);
float scaledTextSize = context.getResources().getDimensionPixelSize(R.dimen.sp_15);
assertEquals(30.0f, scaledTextSize);
// Create a new TextView with the explicitly set configuration
TextView textView = new TextView(context);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, scaledTextSize);
// 30, because font size is scaled
assertEquals(30.0f, textView.getTextSize());
// This is what we *don't* want, it's scaled *twice*!
textView.setTextSize(scaledTextSize);
assertEquals(60.0f, textView.getTextSize());
// DP instead of SP tests
float fifteenDp = context.getResources().getDimensionPixelSize(R.dimen.dp_15);
assertEquals(15.0f, fifteenDp);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, fifteenDp);
// Still 15, because it's DP, not SP
assertEquals(15.0f, fifteenDp);
textView.setTextSize(fifteenDp);
// 30, because setTextSize DOES font scaling
assertEquals(30.0f, textView.getTextSize());
}
}
मेरे द्वारा पाया गया बड़ा टेकअवे TextView.setTextSize(float)
फॉन्ट स्केलिंग को लागू करता है , इसलिए यदि आप डीपी के बजाय एसपी के रूप में पहले से ही लेबल किए गए डिमॉन थॉट में पास होते हैं, तो यह फ़ॉन्ट स्केलिंग को दो बार प्राप्त करेगा ।