【问题标题】:Align 3 stretched Textview in a row in Relative Layout prgramatically以编程方式在Relativelayout中连续对齐3个拉伸的Textview
【发布时间】:2014-05-14 14:56:51
【问题描述】:

请不要将此问题标记为重复。为什么?因为我要解释为什么不是。

以下是我完成的步骤:

  1. 创建一个相对布局
  2. 为其创建了 LayoutPArams 作为 wrap_content 和 wrap_content
  3. 创建第一个 TextView ,给它一个 id
  4. 为第一个 textview 创建 LayoutParams 并将其添加到 RelativeLAyout
  5. 创建第二个 TextView
  6. 为其创建了 LayoutParams,添加了一条规则为 id_for_first_tetview 的 right_Of
  7. 第三个 Textview 的步骤相同,但它是第二个 textview 的 right_of

这里的问题是:第一个文本视图的文本延伸到第二行,当文本延伸到第二行时,这个的宽度,即第一个文本视图占据了整个宽度,因此另一个文本视图要么重叠或低于它。 让我用一张图来证明:

想要:

正在发生的事情:

简而言之,有没有办法将 textviews 保持在一行中,即使一个 textview 占用两行,第二个 textview 也可以在 forst Textview 的文本结束后立即开始?

提前谢谢你。我真的可以使用一些帮助。

【问题讨论】:

  • 我认为您无法通过相对布局实现这一目标。当您为第一个 textView 设置 wrap_content 宽度时,它将测量其内容的宽度(它不会换行并填充父视图)。第二个 textView ,它将定位在第一个的右侧将具有奇怪的宽度。为了实现你想要的,最好使用带有 Layout_weight 参数的 LinearLayout 。
  • 感谢您的回答。我确实想到了,但是三个文本视图包含连续的文本,所以用户看起来像是一大行,但在源代码中,我希望将文本分成 3 个文本视图。使用 layout_width,第一个 textview 将包含内容,并且看起来不连续。

标签: android-layout android-relativelayout textview android


【解决方案1】:

这可以通过LinearLayout 和weight 轻松完成。

方法 1 - XML(提供所需的填充或边距)

<LinearLayout
    android:layout_width="match_parent"
    android:weightSum="3"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0px"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="TextViewTextViewTextViewTextView" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="0px"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0px"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

方法 2 - 以编程方式(提供所需的填充或边距)

tv2 = (TextView)findViewById(R.id.textView2);
tv3 = (TextView)findViewById(R.id.textView3);
tv4 = (TextView)findViewById(R.id.textView4);

android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);

tv2.setLayoutParams(params);
tv3.setLayoutParams(params);
tv4.setLayoutParams(params);

【讨论】:

  • 感谢您的回答,我会试试这个并回复您。
  • 对@Sudhanshu 有帮助吗
  • 嗯,它确实在一定程度上帮助了我,但我希望文本是连续的,就像一个句子一样。这完美地分为三列,但它不会使文本连续。即第一个文本视图延伸到第二行的中间,然后第二个文本视图从那里开始,然后到第三行的中间,然后第三个文本视图的内容从那里开始,一直到第四行。
  • 另外,如果您想实现我想要的,我可能走错了路,请随时指出并提出另一种方法:)
  • 使用上面的方法我终于可以做到了,谢谢 :) 虽然不可能将 3 textview 中的文本对齐为连续线,直到使用填充,这会破坏你的不同 UI设备。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多