2011年01月16日

ハードコーディングでmarginをViewに設定

TextViewにmarginを組み込みたい。
やいりたいのはそんだけ。
なのにPaddingは設定できるにも関わらず、どういう理屈からかTextViewにはmarginを設定できない。><;
しかし、attr.xmlに定義してナンタラしてナンタラすると独自のViewが出来るらしいがあんましドキュメント読む気力のわかない俺にはようわからん。

色々調べてみると、LinearLayoutを使用するとMarginが設定できるらしい。
なので早速トライするんだが旨くいかない。

//TextViewに設置するLinearlayoutの設定
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
layoutParams.setMargins(100, 200, 0, 0);

//TextViewの設定
scoreTextView = new TextView(this);
scoreTextView.setText("test text");
scoreTextView.setLayoutParams(layoutParams);

//最終的にメインの画面にscoreTextを追加
addContentView(scoreTextView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));

これだと旨くいかない。
margin設定しているにも関わらず、Androidの画面上にはそれが反映されない。

とりあえず現在のレイアウトの状態が知りたかったので調査。
Androidには便利なものがあって、tool/hierarchyviewerで現在の画面のレイアウトの構成がリアルタイムで見れる
これ、マジでクソ便利w

で、これで確認取った所、いっちばん最初の元となるレイアウトがFrameLayout
ここによると一番シンプルなレイアウトで一つのオブジェクトを画面いっぱいに表示させ、もう一つのViewが加えられたら重ねてしまうと。

FrameLayout -> TextView

なんかこいつがアヤシイんじゃないか?
FrameLayoutにTextViewがぶら下がってるんだが、スペースとかおかまい無しにTextViewをとりあえずいっぱいいっぱいに広げて表示してるんじゃないかと。
じゃ、marginの設定できるLinearLayoutを一つ噛ませてやれば旨くいくんじゃね?

FrameLayout -> LinearLayout -> TextView

コード的には、


//TextViewに設置するLinearlayoutの設定
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
layoutParams.setMargins(100, 200, 0, 0);

//TextViewの設定
scoreTextView = new TextView(this);
scoreTextView.setText("test text");
scoreTextView.setLayoutParams(layoutParams);

//FrameLayoutだとだめぽなんでLinearLayoutをFrameLayoutの上に敷く。
LinearLayout mainLayout = new LinearLayout(this);
mainLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
mainLayout.addView(scoreTextView);

//最終的にメインの画面にTextViewを追加したレイアウトを追加
addContentView(mainLayout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));

これで旨くいった。
FrameLayout -> LinearLayoutと二重にLayoutを定義するので気持ち悪いが、まぁ問題なく走るのでとりあえずはOK.
にしてもhierarchyviewerは使える!
レイアウトがおかしいと思ったらまずこれ起動。
エミュレータでも実機でも動く。
posted by 1.618 at 02:05| Comment(4) | Android | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ルブタン 取扱店 [url=http://www.guccielementjp.biz]財布 ウォレット[/url] <a href="http://www.guccielementjp.biz" title="財布 ウォレット">財布 ウォレット</a>
Posted by 財布 ウォレット at 2013年07月20日 18:48
楽天ショッピング [url=http://www.cleasyjp.biz]ブランド シューズ レディース[/url] <a href="http://www.cleasyjp.biz" title="ブランド シューズ レディース">ブランド シューズ レディース</a>
Posted by ブランド シューズ レディース at 2013年07月20日 18:49
下着 男性 [url=http://www.clestimatejp.biz]メンズ 靴 おしゃれ[/url] <a href="http://www.clestimatejp.biz" title="メンズ 靴 おしゃれ">メンズ 靴 おしゃれ</a>
Posted by メンズ 靴 おしゃれ at 2013年07月20日 18:49
高品質なモンクレール ダウン製品を驚きの低価格で提供してます。モンクレール 2014全品送料無料!http://www.mywebcomics.com/
Posted by モンクレール 2014 メンズ at 2014年02月09日 15:48
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: