【问题标题】:fill parent on a textview doesn't apply在 textview 上填充父级不适用
【发布时间】:2014-02-22 05:41:58
【问题描述】:

我知道这个问题已被多次询问,但我查看了所有我能看到的解决方案,但没有一个有效。 我在相对布局中有一个文本视图。 textview 有一个 height : fill_parent 属性不起作用。双关语是它们是这个相对布局中的其他几个文本视图,除了这个之外,它们都设法填充父视图。 这是 XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/customshape"
    android:orientation="horizontal" >
    <TextView
        android:id="@+id/mainlistdescription"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:scrollHorizontally="true"
        android:maxLines="4"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/mainlistquantite"
        android:layout_gravity="center_vertical"
        android:textSize="12sp"
        android:padding="10dp"
         />
<TextView
        android:id="@+id/mainlistquantite"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:maxLines="4"
        android:layout_toLeftOf="@+id/consultaffichelayoutdroit"
        android:textSize="12sp"
        android:padding="10dp"
         />
<TextView
        android:id="@+id/consultafficheseparator" <!-- the one not working-->
        android:layout_width="2dp"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@+id/imageView1"
        android:background="#777777"
        android:maxWidth="2dp" />
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="15dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical|right"
        android:src="@drawable/fleche" /> 
    <LinearLayout
        android:id="@+id/consultaffichelayoutdroit"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_toLeftOf="@+id/consultafficheseparator"
        android:orientation="vertical"
        android:paddingLeft="5dp"
         >
        <TextView
            android:id="@+id/mainlistnumero"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_gravity="right"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:textSize="12sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/mainlistprix"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_gravity="right"
            android:layout_marginRight="10dp"
            android:layout_weight="1" />
    </LinearLayout>
</RelativeLayout>

这是我得到的:

灰色条应该一直走,但实际上在模拟器上运行时不会(它在 eclipse 工具中)

因为这个 xml 实际上是在列表视图中调用的,所以我似乎无法使用 JAVA 代码解决问题,因此理想的解决方案是在 XML 文件上。到目前为止,我尝试了 android:clipChildren="false" 没有成功,并且更改了 XML 中元素的顺序,这让事情变得更糟。

经过实验,我可以说什么都没有,所以不是它不能去,因为那里已经有一个视图,只是没有扩展那么远

感谢您的帮助

【问题讨论】:

  • android:layout_toLeftOf="@+id/mainlistquantite" 为什么?
  • 确实,没用,我把它拿出来,谢谢你的编辑!编辑:删除它后,它并没有用:它可以防止文本覆盖所有内容......但它在代码上看起来确实很糟糕,我同意你的观点
  • 你能分享一下显示你的问题的截图吗
  • 如果您没有显示所需的 UI,我们怎么能说是什么问题?
  • @wazaminator 您上面的代码运行良好,行扩展填充整个页面

标签: android android-relativelayout fill-parent


【解决方案1】:

为什么要使用 TextView 来绘制分隔符?尝试像下面的代码这样的普通视图。

此外,如果分隔符必须与描述视图的底部对齐,您可以像这样使用RelativeLayoutlayout_alignBottom-property:

android:layout_alignBottom="@+id/mainlistdescription"

所以分隔符看起来像下面的代码:

<View
     android:id="@+id/consultafficheseparator"
     android:layout_width="2dp"
     android:layout_height="match_parent"
     android:layout_toLeftOf="@+id/imageView1"
     android:layout_alignBottom="@+id/mainlistdescription"
     android:background="@color/separator_bg" />

以下是一些其他提示:

  1. 最好在某个资源文件(例如colors.xml)中定义一种颜色,然后在布局中引用该颜色。尤其是在ListView中使用它时

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="separator_bg">#777777</color>
    </resources>
    

    在你的布局文件中android:background="@color/separator_bg"

  2. 使用match_parent 而不是fill_parent,因为它已被弃用。

  3. 我在TextView 之一看到android:scrollHorizontally="true"。这仅在 TextView 可编辑时有效。如果您希望内容滚动,因为它不适合 TextView,请尝试使用以下代码:

    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    

    在你的adapter.getView():

    final TextView description = (TextView) view.findViewById(R.id.mainlistdescription);
    description.setSelected(true);
    

【讨论】:

    【解决方案2】:

    您的 TextView 似乎不在顶层,也许您可​​以在代码中尝试以下操作:

    consultafficheseparatorTextView.bringToFront();
    

    【讨论】:

    • 我的问题是,整个 xml 都包含在列表视图中并且重复了很多时间。这使得通过 JAVA 代码访问变得非常困难。如果您通过 XML 代码知道解决方案,我会很高兴
    • 根据下面的问题,你可以试试这个:android:clipChildren="false"。这是我得到这个解决方案的地方:stackoverflow.com/questions/4392179/…
    【解决方案3】:

    遇到了同样令人讨厌的问题,顺便说一句,这毫无意义。最后对我有用的是像这样将RelativeLayout标签中的android:layout_height更改为fill_parent

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:background="@drawable/customshape"
        android:orientation="horizontal">
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      尝试设置以下一项(或全部),看看是否有任何改变:

      android:maxHeight="100dp"
      

      android:layout_height="100dp"
      

      android:text="a"
      android:textColor="#777777"
      

      如果这些选项中的任何一个更改了大小,请告诉我,我们可以制定适当的解决方案!

      【讨论】:

      • 照片实际上放大了很多,所以我更改了 100dp 以查看:第一个使它变小(必须使用 10dp 而不是 100)。第二个达到 100dp,按照您的想法进行扩展。第三个已经试过了,还是不行
      • 等等,你把我弄丢了!什么照片?
      • 图片有问题,抱歉
      【解决方案5】:

      你看到这个布局很奇怪,因为在复制和粘贴你的布局代码后,我得到了这个。

      您的解决方案有效,我做了一些小的改进。就像你的代码,但是如果你只需要背景颜色就不需要使用TextView,可以使用View来代替。

      <View
           android:id="@+id/consultafficheseparator"
           android:layout_width="2dp"
           android:layout_height="match_parent"
           android:layout_toLeftOf="@+id/imageView1"
           android:background="#777777"
      />
      

      唯一的建议是设置根布局高度“match_parent”或 dp 中的某个值,如 thiagolr 建议的那样。我已将此屏幕截图设置为“100dp”。

      【讨论】:

      • 好吧,另一个问题是,它的大小完全取决于 mainlistdescription 中的很多内容,你可以轻松地从 1 到 4 行
      【解决方案6】:

      这是你应该做的,

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/customshape"
      android:orientation="horizontal" >
      <TextView
          android:id="@+id/mainlistdescription"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:scrollHorizontally="true"
          android:maxLines="4"
          android:layout_alignParentLeft="true"
          android:layout_toLeftOf="@+id/mainlistquantite"
          android:layout_gravity="center_vertical"
          android:textSize="12sp"
          android:padding="10dp"
           />
      <TextView
          android:id="@+id/mainlistquantite"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:maxLines="4"
          android:layout_toLeftOf="@+id/consultaffichelayoutdroit"
          android:textSize="12sp"
          android:padding="10dp"
           />
      
      <ImageView
          android:id="@+id/imageView1"
          android:layout_width="wrap_content"
          android:layout_height="15dp"
          android:layout_alignParentRight="true"
          android:layout_centerVertical="true"
          android:gravity="center_vertical|right"
          android:src="@drawable/fleche" /> 
      <TextView
          android:id="@+id/consultafficheseparator" <!-- this will work now -->
          android:layout_width="2dp"
          android:layout_height="fill_parent"
          android:layout_toLeftOf="@+id/imageView1"
          android:background="#777777"
          android:maxWidth="2dp" />
      <LinearLayout
          android:id="@+id/consultaffichelayoutdroit"
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_toLeftOf="@+id/consultafficheseparator"
          android:orientation="vertical"
          android:paddingLeft="5dp"
           >
          <TextView
              android:id="@+id/mainlistnumero"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:layout_gravity="right"
              android:layout_marginRight="10dp"
              android:layout_weight="1"
              android:textSize="12sp"
              android:textStyle="bold" />
          <TextView
              android:id="@+id/mainlistprix"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:layout_gravity="right"
              android:layout_marginRight="10dp"
              android:layout_weight="1" />
      </LinearLayout>
      </RelativeLayout>
      

      【讨论】:

      • 你能解释一下你做了什么改变吗?这样我就可以理解我在哪里做错了?
      • 你能解释一下不同之处吗?试了下还是不行,不好意思
      【解决方案7】:

      1)尝试使您的线性布局方向垂直 或者 2)尝试使您的相对布局方向垂直

      它可以提供帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多