LinearView的大/小长度文本的LinearLayout权重问题

时间:2016-07-14 10:44:33

标签: android android-linearlayout

我在LinearLayout中有2个texview,如下所示:

<LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal">

      <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

       <TextView
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"/>
</LinearLayout>

如果文本很大,上面的代码会为textview和椭圆分配相等的空格。 但是如果文本长度较短,则TextView之间会有空格。

{LargeTextFromTextView1... LargeTextFromTextView2...}

{TextView1TextTextVeiw2Text            }

如何通过大文本案例处理摆脱这种情况。

显示文字的逻辑:

案例1:TextView1的文本长度+ TextView2的文本长度&lt; =屏幕宽度 只需显示textview的文本

案例2:TextView1的文本长度+ TextView2的文本长度&gt;屏幕宽度 TextView1的文本在上半部分,椭圆和TextView2的文本在下半部分与椭圆

4 个答案:

答案 0 :(得分:0)

Create like this 

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2">
    <TextView
    android:layout_width="@dimen/size_10dp"
    android:layout_height="wrap_content" 
    android:layout_weight="1"/>
    <TextView
    android:layout_width="@dimen/size_10dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>
</LinearLayout>

Edit:

If textview should be single line and should end with ellipses use this:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2">
<TextView
    android:layout_width="@dimen/size_10dp"
    android:layout_height="wrap_content"
    android:text="sdjhafdshfgdsfaudxzcxzcvvcvcvsfuafsdf"
    android:layout_weight="1"
    android:lines="1"
    android:ellipsize="end"/>
<TextView
    android:layout_width="@dimen/size_10dp"
    android:layout_height="wrap_content"
    android:text="ddff"
    android:layout_weight="1"
    android:lines="1"
    android:ellipsize="end"/>

答案 1 :(得分:0)

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <TextView
        android:id="@+id/tx1"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="sdjhatfjhgjdhhvfygkjhkkkgftddrtyrtrd"
        android:lines="1"
        android:ellipsize="end"
        android:textSize="20sp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="ddff"
        android:id="@+id/tx2"
        android:layout_toRightOf="@+id/tx1"
        android:lines="1"
        android:ellipsize="end"/>
</RelativeLayout>

您可以使用相对布局来满足此要求。如果改变布局不是问题.. 你正面临着这个错误,因为你正在给予weightSum,它正在划分屏幕,因此如果第一个字符串长度很小它就不重要它只是将第二个文本形式分配给它的另一半所以你得到了空间他们之间。

答案 2 :(得分:0)

使用android:lines="1"android:ellipsize="end"不会达到您的期望。它宁愿限制文本。例如,如果文本为“ Remove”,您将看到“ Rem ...”。

要解决此问题,请将每个TextView放在RelativeLayout中。像这样:

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">

  <RelativeLayout
     android:layout_width="0sp"
     android:layout_height="wrap_content"
     android:layout_weight="1">
     <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
       android:layout_centerVertical="true"
       android:text="Text"/>
  </RelativeLayout>

  <RelativeLayout
     android:layout_width="0sp"
     android:layout_height="wrap_content"
     android:layout_weight="1">
     <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
       android:layout_centerVertical="true"
       android:text="Text"/>
  </RelativeLayout>

答案 3 :(得分:0)

您应该使用Google flexboxlayout

示例中使用的这项技术是按照上述说明设置flexWrap =“ wrap”,

<com .google.android.flexbox.flexboxlayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:flexwrap="wrap"> 

然后,您将获得以下布局,其中子视图与新行对齐,而不会使父行溢出。

或者您应该使用 FlowLayout

FlowLayout

Android的FlowLayout,当空间不足时,它允许子视图流到下一行。子视图之间的间距可以通过FlowLayout进行计算,以使视图均匀放置。

等级依赖性

compile 'com.nex3z:flow-layout:1.2.4'