Uygulamamda kendi metin boyutumu belirtmek istiyorum, ancak bunu yaparken bir sorun yaşıyorum.
Cihaz ayarlarında yazı tipi boyutunu değiştirdiğimde, uygulamamın yazı tipi boyutu TextView
da değişir.
Uygulamamda kendi metin boyutumu belirtmek istiyorum, ancak bunu yaparken bir sorun yaşıyorum.
Cihaz ayarlarında yazı tipi boyutunu değiştirdiğimde, uygulamamın yazı tipi boyutu TextView
da değişir.
Yanıtlar:
Aslında, Ayarlar yazı tipi boyutu yalnızca içindeki boyutları etkiler sp
. Tanımlamak - tüm Yani sen yapmanız gereken textSize
içinde dp
yerine sp
, daha sonra ayarları Kişisel uygulamasında kısa boyutunu değiştirmez.
Dokümanlara bir link: Boyutlar
Ancak, beklenen davranışın tüm uygulamalardaki yazı tiplerinin kullanıcının tercihlerine saygı duyması olduğunu lütfen unutmayın. Bir kullanıcının yazı tipi boyutlarını ayarlamak istemesinin birçok nedeni olabilir ve bazıları tıbbi - görme engelli kullanıcılar bile olabilir. Metin dp
yerine kullanmak sp
, uygulamanızın bazı kullanıcılarına isteksizce ayrımcılığa yol açabilir.
yani:
android:textSize="32dp"
sp
ve ne zaman kullanmam gerektiğine dair bir kural olup olmadığını bilmek istedim dp
. Burada gerçekten iyi bir yanıt aldım: stackoverflow.com/questions/11638691/…
Bunu yapmanın en kolay yolu basitçe aşağıdaki gibi bir şey kullanmaktır:
android:textSize="32sp"
textSize
Mülk hakkında daha fazla bilgi edinmek istiyorsanız Android geliştirici dokümanlarına bakabilirsiniz .
Kaynakları ( DOCS ) dimension
kullandığınız gibi kaynak türlerini kullanın .string
Senin içinde dimens.xml
dosyanın, senin boyut değişkenleri bildirmek:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
Sonra şu değerleri kullanabilirsiniz:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
dimens.xml
Farklı ekran türleri için farklı dosyalar bildirebilirsiniz . Bunu yapmak uygulamanızın farklı cihazlarda istenen görünümünü garanti eder.
Belirtmediğinizde android:textSize
sistem varsayılan değerleri kullanır.
Bir dimen.xml dosyasında önceden tanımlandığında DIP veya SP'yi kodla tekrar belirtmek iyi bir şey değildir.
En iyi seçenek bir dimen.xml değeri kullanırken PX kullanmak olduğunu düşünüyorum:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
Bu şekilde, dimen.xml dosyasında gerekirse herhangi bir kodu değiştirmek zorunda kalmadan DP'den SP'ye geçebilirsiniz.
tüm uygulamanın sistem yazı tipi boyutundan etkilenmesini önlemenin basit bir yolu, bir temel etkinlik kullanarak yapılandırmayı güncellemektir.
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
bu yardımcı olabilir. kodu özel Uygulamanıza veya BaseActivity'ye ekleyin
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
ancak, Kaynak # updateConfiguration API düzeyi 25'te açıklanmıştır, bu da gelecekte bir gün desteklenmeyeceği anlamına gelir.
Bu kodu kullanabilirsiniz:
android:textSize="32dp"
sorununuzu çözer, ancak kullanıcı kararlarına uymanız gerektiğini bilmelisiniz. bu şekilde, metin boyutunu cihaz ayarlarından değiştirmek bu değeri değiştirmez. bu yüzden dp yerine sp kullanmanız gerekir . Bu yüzden önerim uygulamanızı farklı sistem yazı tipi boyutlarıyla (küçük, normal, büyük, ...) incelemektir.
kotlin için, benim için çalışıyor
priceTextView.textSize = 12f
Kullanılan birimler DP değil SP ise ve sistem yazı tipi ölçeklendirmesini geçersiz kılmak istiyorsanız, tek yapmanız gereken etkinlikteki bir yöntemi geçersiz kılmaktır - bu gönderiye bakın .
resources.updateConfiguration kullanımdan kaldırıldı ve buggy (Oreo'da biçimlendirilmiş metinle ilgili sorunlar yaşadım).
android 8'de bu çözüm benim için çalışıyor
bu kodu temel etkinliğe ekle
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}