Androidのテキストビューの文字表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Androidのテキストビューの文字表示について

#1

投稿記事 by 海Sea » 11年前

こんにちは!
いつもありがとうございます!

早速質問です。
現在Textviewにて
アドベンチャーゲームのテキストを
マルチスクリーンで同じ場所で同じように表示させようとしています。

しかし、dpの単位を取得しテキストビューの大きさを

コード:

//densityは取得したdpの値

addView(text,new FrameLayout.LayoutParams((int)(500*density),(int)(90*density),Gravity.BOTTOM));
と、このようにじかに設定して、試してはいるのですが、
ある特定の端末ではちゃんと表示されたり、
また、別の端末では表示できなかったりとまちまちになってしまいます。
テキストビューにてマルチスクリーンでメッセージを上手く表示させるためには
どうすればいいでしょうか?
アドバイス等ございましたら、よろしくお願い致します。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: Androidのテキストビューの文字表示について

#2

投稿記事 by Dixq (管理人) » 11年前

表示されない時は全く表示されないのですか?
その時の、w,hは何が指定されているのですか?(densityは正常に取得できているのでしょうか)

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: Androidのテキストビューの文字表示について

#3

投稿記事 by 海Sea » 11年前

Dixq (管理人) さんが書きました:表示されない時は全く表示されないのですか?
その時の、w,hは何が指定されているのですか?(densityは正常に取得できているのでしょうか)
ちゃんと表示されないというのは、端末によって位置がずれていたり
文字列が途中が切れていたりということがおきています。
wとhは取得したdensityに対してwとhの位置を決めるための掛け算をしています。
TextViewをレイアウトにaddする際に、例えば100*densityという風な感じでwやhの指定を行っています。

コード:

                                              ここでTextViewのwとhの指定
addView(text,new FrameLayout.LayoutParams((int)(500*density),(int)(90*density),Gravity.BOTTOM));

が、何度か数値を変更しては試しての繰り返しを行い、
やはり直に設定していること自体が駄目なことだと思いました。

動的に端末のディスプレイの種類がmdpの場合はこの表示、xdpの時はこの表示、
という形でアプリ起動時にビューの設定を行うという方法が適切なのかもしれません・・・

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: Androidのテキストビューの文字表示について

#4

投稿記事 by Dixq (管理人) » 11年前

> wとhは取得したdensityに対してwとhの位置を決めるための掛け算をしています。
> TextViewをレイアウトにaddする際に、例えば100*densityという風な感じでwやhの指定を行っています。

そうですね、そのw,hに何が代入されているのか確認して欲しかったのです。(densityの確認)
addViewしているもののx,yとw,hが分かればどこに描画しているか分かりますよね。
途中で切れているのはwが足らないのではないでしょうか。
また、その領域に長方形なりを描画してみれば視覚的に分かりやすいのではないでしょうか。

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: Androidのテキストビューの文字表示について

#5

投稿記事 by 海Sea » 11年前

Dixq (管理人) さんが書きました:> wとhは取得したdensityに対してwとhの位置を決めるための掛け算をしています。
> TextViewをレイアウトにaddする際に、例えば100*densityという風な感じでwやhの指定を行っています。

そうですね、そのw,hに何が代入されているのか確認して欲しかったのです。(densityの確認)
addViewしているもののx,yとw,hが分かればどこに描画しているか分かりますよね。
途中で切れているのはwが足らないのではないでしょうか。
また、その領域に長方形なりを描画してみれば視覚的に分かりやすいのではないでしょうか。
返信が遅くなりました。
現在densityは

コード:

windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); 
display = windowManager.getDefaultDisplay(); 
metrics = new DisplayMetrics(); 
display.getMetrics(metrics); 
density = metrics.density; 

Log.e(""+density,"density");

//テキストビューのw
int w=(int)(500*density);
Log.e(""+w,"w");

//テキストビューのh
int h=(int)(90*density);
Log.e(""+h,"h");
Logcatを見てみるとdensityは2.0という値になっています。
そして、wに500を掛けたりすると、当然ですが1000になっています。
私自身はdensityはdipの計算なので
どの端末でも同じになると思っていたのですが、間違っていました。
同じ文字数*4行を維持するのは難しいですね・・・

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: Androidのテキストビューの文字表示について

#6

投稿記事 by 海Sea » 11年前

とりあえずまだ何もできてませんが、
解決ということにしておきます。
試行錯誤するということで。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: Androidのテキストビューの文字表示について

#7

投稿記事 by Dixq (管理人) » 11年前

> どの端末でも同じになると思っていたのですが、間違っていました。

どの端末でも同じ固定値なら動的に計算する意味がなくなりませんか?
densityは解像度の低い古いタブレットや新しいフルHDのスマホ等ではかなり異なってくるかと思います。
上でも書いた通りですが、描画している「x,y」は何になっているのでしょうか?

描画している「x,y,w,h」が分かればどこに描画しているかはっきりしますよね?
そこに長方形を描画するなどして視覚的にも明確にできませんか?

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: Androidのテキストビューの文字表示について

#8

投稿記事 by 海Sea » 11年前

Dixq (管理人) さんが書きました:
どの端末でも同じ固定値なら動的に計算する意味がなくなりませんか?
densityは解像度の低い古いタブレットや新しいフルHDのスマホ等ではかなり異なってくるかと思います。
上でも書いた通りですが、描画している「x,y」は何になっているのでしょうか?
描画している「x,y,w,h」が分かればどこに描画しているかはっきりしますよね?
そこに長方形を描画するなどして視覚的にも明確にできませんか?
>どの端末でも同じ固定値なら動的に計算する意味がなくなりませんか?
最初はdipをとって計算すれば、どの端末でも同じ位置と幅になると思っていたのです。
しかし現状は全然違うので、どうしようか、というところでした。

>描画している「x,y」は何になっているのでしょうか?
設定しているのはwとhだけで、
TextViewの位置はGravityのBotomで設定しているので
xとyはこちらでは何も触っていないはずなのですが。
とにかく考え方そのものが間違っていることはわかりました。
自分自身では、色々理解して文字を表示させるのに時間がかかりそうなので、
質問自体は、とりあえず今回はここで終わろうと思います。
何度も返信ありがとうございました。
問題が解決できれば、また何かで掲載してみます。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Androidのテキストビューの文字表示について

#9

投稿記事 by ISLe » 11年前

海Sea さんが書きました:最初はdipをとって計算すれば、どの端末でも同じ位置と幅になると思っていたのです。
しかし現状は全然違うので、どうしようか、というところでした。
ディスプレイに定規を当ててみたら同じ幅になっているのではないでしょうか。
ピクセル密度を使った計算とはそういうものですが、たぶん海Seaさんがやりたいことはそういうことではないでしょうね。

単純に解像度からレイアウトを決めることができない理由が他にもあるのでしょうか。

それとは別に、一行の文字数を固定したいなら、自前で一文字ずつ描画するのがいちばん近道だと思います。
コンポーネントやフォントのサイズ調整では不確定要素が多くて無理があります。

閉鎖

“C言語何でも質問掲示板” へ戻る