2016-04-08 6 views
-2

this questionのコードをコピーしたところ、ほぼ完全に機能していましたが、著者がリスト項目の高さを固定値に設定していて、デバイスに正しく表示されません。Androidの - 高さを測定する

コードは150にリスト項目の高さを設定し、私は「ねえ、私はちょうど私のテキストの高さを測定するだろう」と思ったので、私は少しあるテキストの

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); 
Rect bounds = new Rect(); 
paint.getTextBounds("April 3, 2016", 0, 13, bounds); 
Log.d("Fragment.toggle", "Text height is " + bounds.height()); 

とを呼び出します150固定値より大きい場合、getTextBounds()から返されるテキストの高さは12です.12は150より少し大きいので、私は明らかに何か間違ったことをしました。

私は人生で多くのソフトウェアを書いたことがありますが、これはAndroid開発を始めた私の最初の日です。だから私はおそらく明らかに愚かなことをしています。私は、2つの値(150と12)が異なる単位であると思われますが、私はドキュメントを掘り下げていて、それを理解することはできません。

どのようにAbsListView.LayoutParamsが期待している単位でテキストの高さを計算できますか?

+0

この特定の呼び出しでPaintオブジェクトが何を返すと思いますか?私はあなたが何かが明らかに間違っているとどのように考えているのか分かりません。 –

+0

テキストを表示するにはTextViewを使用し、テキストサイズをsp(スケーリングされたピクセル)に設定すると、Androidは他のすべてを行います。 – ElDuderino

+0

みんなに飛び乗ってくれてありがとう、問題は私が質問する方法がわからないAndroidの初心者で十分だということです。 「この質問」へのリンクをたどってみると、別のStackOverflowページの「AndroidのListViewでどのようにセルを拡大/縮小することができますか?」というタイトルが付けられています。それは、リストアイテムの高さ(150などの数値)の値をハードコーディングしています。ハードコーディングする代わりにそれらの値を計算したいのです。 –

答えて

0

私は最終的にこの質問を提出に叩きました。

答えの最初の部分は、getTextBounds()からの戻りコードがポイントであることです(ドキュメンテーションがそれを言ったとしたらいいとは思いませんか?)。その答えを72で割ると、私のテキストの高さはインチになり、DisplayMetrics.densityDpiでそれを掛けると、ピクセル単位のテキストの高さが得られます。

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); 
Rect bounds = new Rect(0, 0, 10000, 10000); 
paint.getTextBounds("April 3, 2016", 0, 13, bounds); 
DisplayMetrics dm = getActivity().getResources().getDisplayMetrics(); 
float textHeightInches = bounds.height()/72.0f; 
float textHeightPixels = textHeightInches * dm.densityDpi; 

回答の2番目の部分は、リストアイテムの上端と下端にパディングがあり、これは合計高さを計算するときに含める必要があります。今

LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout listItemLayout = (LinearLayout)vi.inflate(R.layout.list_item, null); 
int collapsedHeight = (int)(textHeightPixels + 0.5f) + listItemLayout.getPaddingTop() + listItemLayout.getPaddingBottom(); 

私はのListItemオブジェクトを作成するときに、私の代わりに、一定数の私の計算高さを渡すことができます。

関連する問題