文字列の中央座標配置?方法を教えてください☆

1,076 views
Skip to first unread message

P

unread,
Sep 28, 2011, 12:09:24 AM9/28/11
to 日本Androidの会
言葉で何と言うのかがわからず、グーグル等の検索でも見つけることが出来ませんでした。

文字列スタート位置を決めて、改行したときにその位置を中心にして文字をバランスよく配置する
方法が知りたいです。

・1行のとき

中心位置  テキスト1行目


・2行のとき
        テキスト1行目
中心位置
        テキスト2行目

・3行のとき
        テキスト1行目
中心位置  テキスト2行目
        テキスト3行目

と、いうふうに中心位置が決められていて、そこを中心に改行されていく、みたいなものは
どのように作ったらいいでしょうか?


よろしくお願いします☆

Satoru Isomoto

unread,
Sep 28, 2011, 12:12:50 AM9/28/11
to android-g...@googlegroups.com
Pさん

「android gravity」 で検索すると見つかりますよ。


---
Satoru Isomoto


2011年9月28日13:09 P <h.m.090...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

P

unread,
Sep 28, 2011, 10:25:11 AM9/28/11
to 日本Androidの会
返信ありがとうございます。

サンプルを作り、試したんですが、
RelativeLayout で文字列の開始位置を決めて、改行してみましたが、
思うようにいきません。

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:layout_marginLeft="110dip"
  android:layout_marginTop="110dip"
android:gravity="center"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button"
android:id="@+id/button1"
android:layout_marginLeft="40dip"
android:layout_marginTop="100dip"
/>
</RelativeLayout>

下のボタンは改行位置の確認のため配置しています。
android:gravity="center"がまずいのでしょうか?

よろしくお願いします。

On 9月28日, 午後1:12, Satoru Isomoto <isomoto.sat...@gmail.com> wrote:
> Pさん
>
> 「android gravity」 で検索すると見つかりますよ。
>
> ---
> Satoru Isomoto
>
> 2011年9月28日13:09 P <h.m.09053977...@gmail.com>:

Kazuya

unread,
Sep 28, 2011, 11:14:10 AM9/28/11
to 日本Androidの会
普段XMLでレイアウトを書かないのでちゃんと理解していないですが
的外れだったら申し訳ないですが、
android:layout_gravity とかじゃダメですかね?

P

unread,
Sep 28, 2011, 11:24:37 AM9/28/11
to 日本Androidの会
返信ありがとうございます。

android:layout_gravity に変更して、試してみましたが、変わりません。

別の方法ご存知ないでしょうか?

天霧智哉

unread,
Sep 28, 2011, 11:34:49 AM9/28/11
to android-g...@googlegroups.com
天霧と申します。

~引用~


<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
android:layout_marginLeft="110dip"
  android:layout_marginTop="110dip"
android:gravity="center"
/>

~引用ここまで~

でTextViewにmarginLeftで110dipをつけているので、"android:layout_marginLeft="110dip""
を消してみてはいかかでしょうか?

※おそらく現状marginLeftの110dip+文字列の長さを足し合わせたものをセンター表示すると
思われますので、真ん中よりだけどどっちかというと右寄りというような状況かなと。

お試しいただいたら是非とも結果を教えていただけると助かります。

では。

2011年9月29日0:24 P <h.m.090...@gmail.com>:

Kazuya

unread,
Sep 28, 2011, 11:51:29 AM9/28/11
to 日本Androidの会
実際に書いたりはしてないんで妄想ですけど、
Layout自体にGravity、Marginを設定して調整する、
あるいはボタンが絡むかなとおもうので別レイアウトとして
入れ子のLinearLayout等を作って
そこにGravity,Marginを設定してTextViewを配置するとか・・・。
完全に妄想だけのものですので、スルーしていただいてもいいです

P

unread,
Sep 28, 2011, 2:06:49 PM9/28/11
to 日本Androidの会
天霧さん、Kazuyaさん、返信ありがとうございます。

TextViewにmarginLeftで110dipをつけているの
で、"android:layout_marginLeft="110dip""
を消してみてはいかかでしょうか?

多分僕の説明が悪くて、勘違いされてるのかもしれません。
中心位置をいうのは、レイアウトの中心ではなくて、あくまでテキストの絶対的配置位置?のことです。
改行しても、その位置から上下に分かれて配置しなおされるみたいな感じです。

あと、これを画像の中に埋め込む形?で使いたいので、レイアウトとして作るのは応用がきかなくなる可能性があります。

せっかく教えていただいたのに、活かせずにごめんなさい。

難しいですね☆

kobadroid

unread,
Sep 28, 2011, 8:44:22 PM9/28/11
to android-g...@googlegroups.com
Kobadroidと申します。

テキストに関わらず、A面に対してBを縦または横方向で中央ぞろえ
する例です。割と定石的です。

前提:左上を座標原点とした場合

(A面のサイズ - Bのサイズ) / 2 =Bの左端または上端の座標位置

テキストで縦方向で中央ぞろえをやるならば
Bはテキスト全体の高さ合計とします。

(描画先の高さ - (全テキストの高さの合計)) / 2 =
1行目のテキストを描画すべき上端の座標位置
→これをαとし
2行目以降は
α + 1行目のテキストの高さ
3行目
α + 2行目のテキストの高さ
・・・
とします。
ただし、androidの場合drawtextの描画位置はbaseline
ですのでご注意ください。

テキスト間にマージンを取りたければ、それぞれの高さと
全体の高さ合計にマージンを加算します。
テキストの高さはascent,descentでとれます(もっと簡単に取れる方法
もどこかでみましたが失念)

以上、参考になれば幸いです。

--
KobadroID Web
http://kobadroid.web.fc2.com/


2011年9月29日3:06 P <h.m.090...@gmail.com>:

Satoru Isomoto

unread,
Sep 28, 2011, 9:41:57 PM9/28/11
to android-g...@googlegroups.com
もしかして、

android:gravity="center|left"

で実現できるかもしれません。

---
Satoru Isomoto


2011年9月28日23:25 P <h.m.090...@gmail.com>:

Aska

unread,
Sep 28, 2011, 11:27:48 PM9/28/11
to 日本Androidの会
Askaです.

> android:gravity="center|left"
> で実現できるかもしれません。

上記のような指定を行った場合にどのように表示されるかは, こちらが参考になると思います.

http://wiki.livedoor.jp/moonlight_aska/d/%CA%B8%BB%FA%A4%CE%B0%CC%C3%D6%A4%F2%A4%AB%A4%A8%A4%EB

On 9月29日, 午前10:41, Satoru Isomoto <isomoto.sat...@gmail.com> wrote:
> もしかして、
>
> android:gravity="center|left"
>
> で実現できるかもしれません。
>
> ---
> Satoru Isomoto
>
> 2011年9月28日23:25 P <h.m.09053977...@gmail.com>:
>
>
>
> > 返信ありがとうございます。
>
> > サンプルを作り、試したんですが、
> > RelativeLayout で文字列の開始位置を決めて、改行してみましたが、
> > 思うようにいきません。
>
> > <TextView
> > android:layout_width="fill_parent"
> > android:layout_height="wrap_content"
>
> > android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aa"
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Ishikawa Hiromi

unread,
Sep 28, 2011, 11:38:20 PM9/28/11
to android-g...@googlegroups.com
こんにちは。

他の方も書いていらっしゃいますが、

android:gravity="center"

で実現できます。
サンプルでうまく行かなかったのはおそらく、layout_height が wrap_content になっているせいです。
layout_height をちゃんと固定サイズにしてあげれば、その高さの中間座標を基準にセンタリングされるはずです。


2011年9月28日13:09 P <h.m.090...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages