4

FrameLayout を使用して (オンデマンドで) 画面にテキストを表示しています。テキストを特定の場所に配置したいので、 setGravity() でうまくいくと思いました...しかし、いいえ、テキストの移動先には何の影響もないようです(ImageViewのような他のオブジェクトにはありません)この方法)。

まず、TextView.setGravity()は正確には何に使用されるのでしょうか。(編集:私は今これをよりよく理解しています、ありがとう!ただし、質問の次の部分についてはまだ明確ではありません。)

次に、この方法で FrameLayout を更新する唯一の方法は、必要な設定で新しい FrameLayout.LayoutParams オブジェクトを作成し、それを setLayoutParams() メソッドを使用して適用することです。(これはビューを自動的に更新するように見えるので、requestLayout() 呼び出しが必要ですか?)そして、FrameLayout でこれを達成するためのより簡単で簡単な方法はありますか? ?

ありがとう!参考までに、この FrameLayout と TextView をどのように設定しているかを示す (動作中の) コード スニペットを以下に示します。

    FrameLayout fl1 = new FrameLayout(this);
    FrameLayout.LayoutParams flp1 = new FrameLayout.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    fl1.setId(9001);
    fl1.setLayoutParams(flp1);
      .....
    tv1 = new TextView(this);
    FrameLayout.LayoutParams tvp1 = new FrameLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
        (Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
    tv1.setId(9006);
    tv1.setLayoutParams(tvp1); // This works
    tv1.setBackgroundColor(Color.GRAY);
    tv1.setTextColor(Color.BLACK);
    tv1.setText("Dynamic layouts ftw!");
    tv1.setGravity(Gravity.CENTER); // This does NOT work
     .....
    fl1.addView(tv1);
4

2 に答える 2

3

1) view.setGravity は、子の場合にビューを配置する方法を意味します。テキストビューの場合は、テキストの配置を指します。linearlayouts または viewgroups では、子ビューを参照します。

2) あなたのコードを確認しました。すでに textview.setGravity メソッドを使用しています。その場合、FrameLayout.LayoutParams コンストラクターで重力パラメーターを指定する必要はありません。

私が気付いた他のことは、テキストのサイズのみを取るラップコンテンツとしてテキストビューに幅と高さを与えたことです。したがって、テキストビューにはテキストを中央に配置するための余分な領域がないため、重力を与える意味はありません。テキストビューの幅をfill_parentとして指定する必要があります。これにより、重力プロパティが機能するはずです。

ところで、これはGravitiesに関する非常に優れた記事です。重力と layout_gravity 属性の両方について説明します。

テキストビューでコンテンツをラップする場合は、テキストビューを線形レイアウトに追加し、重力を線形レイアウトに設定する必要があります。

これはあなたがやろうとしていることを与えるはずです

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
FrameLayout fr = new FrameLayout(this);
fr.setLayoutParams(lp);
fr.setBackgroundColor(Color.RED);

LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
LinearLayout l = new LinearLayout(this);
l.setLayoutParams(lp2);
l.setGravity(Gravity.CENTER);
l.setBackgroundColor(Color.BLUE);

ViewGroup.LayoutParams vp = new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT);
TextView t = new TextView(this);
t.setLayoutParams(vp);
t.setText("Blessan Mathew");
t.setBackgroundColor(Color.CYAN);

l.addView(t);
fr.addView(l);
于 2011-09-24T09:30:34.507 に答える
3

tv1.setGravity(Gravity.CENTER);

内のTEXTの重力に属しTextViewます。

ドキュメントに記載されているように:

テキストの水平方向の配置と、TextView にテキスト自体に必要なスペースを超える余分なスペースがある場合に使用される垂直方向のグラビティを設定します。

于 2011-09-24T08:38:19.213 に答える