2012-12-27 18 views
6

TextviewのgetTextSize()がどのように測定されているかについてはどこにもわかりません。視覚テストから、それはディセンダを含むようには見えないが、オーケンダを含むように見える。それはベースラインからも正確に始まるとは思われません。Android TextView getTextSize()には、ディセンダ、アセンダが含まれています

http://en.wikipedia.org/wiki/Descender

これはそれの最も近い言及であるが、Googleからのロマン・ガイは、ちょうど質問のその部分を無視します。

http://www.mail-archive.com/[email protected]/msg08514.html

Iは、化合物ドローアブルを使用していますように私はこれを必要と私は別のデバイス上のテキストに描画可能に合わせることができるようにする必要がありますとおり。ここで

は、私が化合物上のエッジここで

tvData.setTextSize(TypedValue.COMPLEX_UNIT_PX, 100); 
tvData.setText("agB5ãÂ"); 

int size = (int)tvData.getTextSize(); 
Drawable img = getResources().getDrawable(R.drawable.circle_white_full_72).mutate(); 
img.setBounds(0 , 0 , size , size); 
tvData.setCompoundDrawables(null, null, img, null); 

に触れる描画可能な円をテストするために使用されるコードであるあなたはディセンダを使用していないようだ見ることができるように、結果 http://i.imgur.com/zUEzB.png

ですおよび上昇者。ここで

は描画イメージは、他の人がここで

int size = (int)tvData.getTextSize() *80/100; 

を使用して文字サイズの80%に画像を変更する場合 http://i.imgur.com/Yhf8b.png

をテストしたい場合は、画像は上の転置で、結果であり、あります100%画像の上部。たぶんsetCompoundrawablesは、それが

enter image description here

をスケーリング所有していますやっている私は、フォントの中点を測定しようとした描画可能、それがオフになっています。ここでenter image description here

最後に、私は出力を測定しsetTextSizeが100pxにに設定したとして、それは、ベースラインにフォントテキストのベースラインの半分の高さであった、左に描画可能50pixelsを移動し、強調画像です。

Androidは、複合ドロアブルの位取りと位置を決めるために、他のレイアウトを使用している必要があります。たぶん私はこれのために別の質問を作成する必要があります。 ベースラインまでの画像強調表示があります。 enter image description here

+0

フォントの高さが "昇順を含むが、ディケンダーは含まれていません"という意味ですが、私はあなたの質問に答えるための信頼できる参照を見つけることができないようです。だから、今のところ、事例の証拠があります:私はいつもあなたが描写していることを意味する "フォントの高さ"を理解してきました。 – Barend

+0

「ベースラインからベースラインまで」は同等であり、ドメイン内ではより意味を成しています。 – Barend

+0

@BarendGarvelink私はそれが主導的であると信じています。 – kcoppock

答えて

3

軽いテストでは、上昇から下降(テキストサイズ=降下 - 上昇)のようです。 TextPaintといくつかのデバッグが検証するためでしたし、もう少し具体的には、私がやった:

Paint.FontMetricsInt metrics; 
for(int i = 1; i < 100; i++) { 
    mTextPaint.setTextSize(i); 
    metrics = mTextPaint.getFontMetricsInt(); 
    if((metrics.descent - metrics.ascent) != i) Log.v("type", "Not equal"); 
} 

そして、それは、各値のために真のままでした。

+0

ここに私が行ったテストです tvData.setTextSize(TypedValue.COMPLEX_UNIT_PX、100); \t \t tvData.setText( "agB5ãÂ"); \t \t \t \t INTサイズ=(INT)tvData.getTextSize(); \t \t描画領域IMG = getResources()getDrawable(R.drawable.circle_white_full_72).mutate()。 \t \t img.setBounds(0、0、size、size); \t \t tvData.setCompoundDrawables(NULL、NULL、IMG、NULL);あなたはディセンダおよびアセンダを使用していないようだ見ることができるようにここで は結果 http://i.imgur.com/zUEzB.png です。 – pt123

+0

私は、メインの質問 – pt123

+1

'metrics.descentで私のテストコードを追加した - 私は必要なものだけだmetrics.ascent'! – amram99

関連する問題