2017-08-11 9 views
2

レイアウトがパーセントであるアクティビティを想像して、画面の中央に完全な四角形を描画して画面を満たします。 (1440x2560の画面を持つPixel XLの電話機をお持ちの場合は、1440x1440pxの電話機の中央に完全な四角形が表示されます)。ディスプレイの種類(電話、タブレット、時計、テレビなど)に関係なく、電話機の中央の四角形で表示する必要があります。Android:PercentLayout/ConstraintLayoutを基準にしたテキストのフォントサイズの設定方法

これは、layout_constraintGuide_percentを使用してPercentRelativeLayout(API 23)またはConstraintLayoutを使用して簡単に行うことができます。そして、この技術はほぼすべてのビューに適用できます。それはすべて素晴らしいです。

しかし、テキストと同じようにする必要はありますか?たとえば、「Applesauce」という語を中央に置く場合は、と同じ割合でボックスを配置します。この動作を模倣するようにフォントサイズを設定する方法はありますか?文字の高さは、常にコンテナの10%、または画面のピクセルの幅/高さの10%と言わなければなりません。


私はこれが合うように、そのボックス内のないオートフィルやAutoSizeプロパティのテキストだと思います。 (すなわち、https://developer.android.com/preview/features/autosizing-textview.htmlを実行しようとしていません)。私は、ボックス内に "Hi"という言葉を入れることは、同じボックスの中に "Applesause"という言葉よりも大きくするという意味で、うまくいくとは思えません。私はテキストサイズを常に自分自身と同じにしておきたいが、コンテナに相対的な大きさにしたい。

DP/DIP/SPを使用してテキストサイズを設定すると機能しません。これは物理的な寸法に基づいてスケールされるためです。通常のユースケースでは大丈夫ですが、ここで達成したいのと正反対です。テキストは、たとえそれがすべての正常な読みやすさに逆らっても、そしてそれがユーザーのフォント設定を無視したとしても、レイアウトに対して常に同じサイズにする必要があります。


今のところ、種類が近いテキストサイズの特定のピクセル値を計算するために計算を行うことができます。 (つまり、720pxワイド画面では30px、1440px画面では60pxにする必要があります)。しかし、私はこれをDPIの値で動作させるのに問題があります。 Androidは「あまりにもスマート」なものにしようとしており、同じピクセル幅であっても、HDPI画面の30PXフォントとは異なり、TVDPI画面で30pxフォントを描画しています。


Androidでこれを行う方法がわかりません。しかし、Windows UWP XAMLでは、フォントをレイアウトにハードコーディングしてから、<Viewbox Stretch="Uniform">を使用すると、子ビューポートのピクセルサイズ精度がリサイズされます。 CSS3を使用しているWebブラウザでは、Viewport Sized Typography(1vmin、1vmax)でこれを行うことができます。これは同じ動作ではありませんが、ほとんどの用途では十分です。

私の質問は、ネイティブAndroid TextViewsを使用してそれを行う適切な方法は何ですか?

+1

に役立ちます。非常に長いテキストをサポートする必要がありますか?同様に、複数の行。そして、その行動は何でしょうか? –

+0

長いテキストは無視することができます - 私はそれを他の場所で扱うことができます。 私はTextViewのフォントサイズを設定する信頼できる方法を探しています。そのフォントは常にコンテナと一致します。 CNNのニュース見出し/ティッカーを想像してみてください。これはテレビのビデオストリームに焼き付けられているので、CNNビデオストリームの規模をいかに小さくしても、そのニュースティッカーは常にビデオと同じサイズになります。 私はAndroidでまったく同じことをやろうとしています。 ConstraintLayoutはビューを完全に処理しますが、フォントサイズは処理しません。私はネイティブのTextViewを使用してフォントサイズを処理する良い方法を見つけることを試みています。 – maxsilver

+0

@maxsilverこれには解決策がありましたか? –

答えて

1

あなたが言うように何かするのは難しいです。

SPユニットhttps://material.io/guidelines/layout/units-measurements.html#units-measurements-scaleable-pixels-sp、それは(DPとして)ので、働いています。 さらにpxがある場合は、同じサイズのpxが増えます。

ビュー/ウィンドウの幅を取得し、この幅でフォントサイズを計算すると、自分で取得できます。

val width = resources.displayMetrics.widthPixels 
val defaultWidth = 100 //px 
val defaultFontForDefaultWidth = 2 //px So for a window 100px you get a 2px font (it's an example) 
val fontSize = (width * defaultFontForDefaultWidth)/defaultWidth 

しかし、私はかなり確信しています、これはdpとアンドロイドの関係です。あなたは2dpを設定し、画面が大きくなるとサイズが大きくなり、収縮すると逆になります。

・ホープこれはあなたが自動サイズ変更を使用すると、「こんにちは」にし、「アップルソース」は、異なるサイズであろうと言及

関連する問題