Mümkünse ben de boy almak isterim.
Mümkünse ben de boy almak isterim.
Yanıtlar:
getTextBounds(String text, int start, int end, Rect bounds)
Bir Paint nesnesinin yöntemini kullanabilirsiniz . Bir tarafından sağlanan boya nesnesini kullanabilir TextView
veya istediğiniz metin görünümüyle kendiniz bir tane oluşturabilirsiniz.
Bir Metin Görünümü kullanarak şunları yapabilirsiniz:
Rect bounds = new Rect();
Paint textPaint = textView.getPaint();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int height = bounds.height();
int width = bounds.width();
textView.setTextSize()
.
Sadece genişliğe ihtiyacınız varsa kullanabilirsiniz:
float width = paint.measureText(string);
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
. textSize
piksel cinsindendir.
Bir metin için iki farklı genişlik ölçüsü vardır. Biri genişlikte çizilen piksel sayısı, diğeri ise metin çizildikten sonra imlecin ilerletilmesi gereken 'piksel' sayısıdır.
paint.measureText ve paint.getTextWidths , verilen dizeyi çizdikten sonra imlecin ilerletilmesi gereken piksel sayısını (float olarak) döndürür. Boyanan piksel sayısı için diğer cevapta belirtildiği gibi paint.getTextBounds'u kullanın. Buna yazı tipinin 'İlerlemesi' denildiğine inanıyorum.
Bazı yazı tipleri için bu iki ölçü farklıdır (çok), örneğin Black Chancery yazı tipi diğer harfleri geçen (üst üste binen) harflere sahiptir - büyük 'L'ye bakın. Pikselleri boyamak için diğer yanıtta belirtildiği gibi paint.getTextBounds'u kullanın .
Genişliği şu şekilde ölçtüm:
String str ="Hiren Patel";
Paint paint = new Paint();
paint.setTextSize(20);
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica.ttf");
paint.setTypeface(typeface);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
paint.getTextBounds(str, 0, str.length(), result);
Log.i("Text dimensions", "Width: "+result.width());
Bu sana yardımcı olur.
Büyük olasılıkla, belirli bir yazı tipine sahip belirli bir metin dizesi için boyanmış boyutları bilmek istersiniz (yani belirli Typeface
bir BOLD_ITALIC stiline sahip "sans-serif" yazı tipi ailesi ve sp veya px cinsinden belirli bir boyut).
Tamamen şişirmek yerine, daha TextView
düşük seviyeye geçebilir ve tek satırlık metin Paint
için doğrudan bir nesneyle çalışabilirsiniz , örneğin:
// Maybe you want to construct a (possibly static) member for repeated computations
Paint paint = new Paint();
// You can load a font family from an asset, and then pick a specific style:
//Typeface plain = Typeface.createFromAsset(assetManager, pathToFont);
//Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD);
// Or just reference a system font:
paint.setTypeface(Typeface.create("sans-serif",Typeface.BOLD));
// Don't forget to specify your target font size. You can load from a resource:
//float scaledSizeInPixels = context.getResources().getDimensionPixelSize(R.dimen.mediumFontSize);
// Or just compute it fully in code:
int spSize = 18;
float scaledSizeInPixels = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP,
spSize,
context.getResources().getDisplayMetrics());
paint.setTextSize(scaledSizeInPixels);
// Now compute!
Rect bounds = new Rect();
String myString = "Some string to measure";
paint.getTextBounds(myString, 0, myString.length(), bounds);
Log.d(TAG, "width: " + bounds.width() + " height: " + bounds.height());
İçin çoklu-hattı veya yayılmış metin ( SpannedString
), bir kullanmayı StaticLayout
hangi genişliği sağlamak ve yüksekliği elde. Metni ölçmek ve bunu özel bir görünümde bir tuvale çizmekle ilgili çok ayrıntılı bir yanıt için bkz .: https://stackoverflow.com/a/41779935/954643
Ayrıca, @ arberg'in aşağıdaki yanıtını, ilerletme genişliğine karşı boyanmış pikseller hakkında ("verilen dizgiyi çizdikten sonra imlecin ilerletilmesi gereken piksel sayısı (float olarak)"), bununla ilgilenmeniz gerektiğinde dikkate almaya değer.
Statik sınıf kullanımıyla çizilmiş bir metnin ( ) tam genişliğini elde etmenin daha iyi bir yolunu (mevcut kabul edilen cevaptan daha çok yönlü) paylaşmak istiyorum :String
StaticLayout
StaticLayout.getDesiredWidth(text, textPaint))
Bu yöntem, çok textView.getTextBounds()
satırlı tek bir satırın genişliğini hesaplayabileceğinizden TextView
veya TextView
başlamak için kullanamayacağınızdan (örneğin özel bir View
uygulamada) daha doğrudur .
Bu yol benzer textPaint.measureText(text)
, ancak nadir durumlarda daha doğru görünmektedir.