将 ImageView 和 TextView 放入布局中

发布于 2024-12-18 09:47:25 字数 3717 浏览 3 评论 0原文

我有水平 ListView 和以下项目:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:src="@drawable/a" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="Title"
        android:textColor="#FFFFFF" />

</LinearLayout>

这基本上是缩略图和其下面的一些文本。问题是 - 当此项目显示在 ListView 中时,底部的文本仅部分可见 - 底部消失。看起来 ImageView 没有缩放以适合 TextView。

但是,如果将 TextView 放在 ImageView 之上,一切看起来都很好 - ImageView 会按比例缩小并且文本完美契合。那么..为什么?

让我举例说明:

TextView 位于底部

TextView at Bottom

TextView 位于顶部(图像完美缩放)

TextView at top

并根据要求 main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="100" >

    <LinearLayout
        android:id="@+id/linearLayout0"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Top Activity Header"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="90"
        android:orientation="vertical"
        android:weightSum="100" >

        <LinearLayout
            android:background="#6056CC"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="30"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Top"
                android:textAppearance="?android:attr/textAppearanceLarge" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="40" >

            <test.name.Coverflow
                android:id="@+id/coverflow"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent" />
        </LinearLayout>

        <LinearLayout
            android:background="#BF5E76"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="30"
            android:orientation="vertical" >

        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_height="65dp"
        android:id="@+id/linearLayout2"
        style="@style/TabPanel">

    </LinearLayout>

</LinearLayout>

I have horizontal ListView with with following item:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:src="@drawable/a" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="Title"
        android:textColor="#FFFFFF" />

</LinearLayout>

This is basically thumbnail and some text beneath it. The problem is - when this item is displayed in ListView the text at bottom is only partially visible - bottom part disappears. Looks like ImageView is not scaling to fit TextView.

But if you put TextView above ImageView everything looks fine - ImageView is scaled down and text fits perfectly. So..why?

Let me illustrate:

TextView at bottom

TextView at bottom

TextView at top (images scaled perfectly)

TextView at top

And as requested main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:weightSum="100" >

    <LinearLayout
        android:id="@+id/linearLayout0"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Top Activity Header"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="90"
        android:orientation="vertical"
        android:weightSum="100" >

        <LinearLayout
            android:background="#6056CC"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="30"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Top"
                android:textAppearance="?android:attr/textAppearanceLarge" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="40" >

            <test.name.Coverflow
                android:id="@+id/coverflow"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent" />
        </LinearLayout>

        <LinearLayout
            android:background="#BF5E76"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="30"
            android:orientation="vertical" >

        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_height="65dp"
        android:id="@+id/linearLayout2"
        style="@style/TabPanel">

    </LinearLayout>

</LinearLayout>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

dawn曙光 2024-12-25 09:47:26
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:gravity="center_vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical" >

        <TableRow
            android:layout_gravity="left"
            android:padding="5dp" >

            <ImageView
                android:id="@+id/thumbnail"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/a" 
                android:layout_gravity="left">
            </ImageView>
        </TableRow>

        <TableRow
            android:gravity="left"
            android:padding="5dp" >

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:textColor="@android:color/black"
                />
        </TableRow>
    </TableLayout>

</LinearLayout>

请尝试这个。希望这会有所帮助。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:gravity="center_vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical" >

        <TableRow
            android:layout_gravity="left"
            android:padding="5dp" >

            <ImageView
                android:id="@+id/thumbnail"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/a" 
                android:layout_gravity="left">
            </ImageView>
        </TableRow>

        <TableRow
            android:gravity="left"
            android:padding="5dp" >

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:textColor="@android:color/black"
                />
        </TableRow>
    </TableLayout>

</LinearLayout>

Please try this. Hope this would help.

我最亲爱的 2024-12-25 09:47:26

所以嘿,我遇到了同样的问题,这就是我为使其工作而所做的:

<LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical" 
            android:layout_gravity="center|center_vertical">

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="0dip"
                android:layout_weight="2"
                android:adjustViewBounds="true"
                android:scaleType="fitEnd"
                android:layout_gravity="center|center_vertical"
                android:src="@drawable/ic_pen" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:layout_gravity="center|center_vertical"
                android:text="@string/main_write"
                android:textColor="@color/color_darkgray"
                android:textSize="24sp" />
        </LinearLayout>

技巧是将 TextView 和 ImageView 的layout_height 设置为“0dip”。将ImageView 的layout_weight 设置为“2”,将TextView 的layout_weight 设置为“1”。将 ImageView 的scaleType 设置为“fitEnd”。将 adjustmentViewBounds 设置为“true”,瞧!甚至在您放大和缩小尺寸时也可以使用,这样您就不会丢失 TextView,并且只有图像会缩小。

So hey I had this same problem and this is what I did to get it work:

<LinearLayout
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical" 
            android:layout_gravity="center|center_vertical">

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="0dip"
                android:layout_weight="2"
                android:adjustViewBounds="true"
                android:scaleType="fitEnd"
                android:layout_gravity="center|center_vertical"
                android:src="@drawable/ic_pen" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:layout_gravity="center|center_vertical"
                android:text="@string/main_write"
                android:textColor="@color/color_darkgray"
                android:textSize="24sp" />
        </LinearLayout>

The trick is to set the TextView and the ImageView's layout_height to "0dip". Set the ImageView's layout_weight to "2" and the TextView's layout_weight to "1". Set the ImageView's scaleType to "fitEnd". Set adjustViewBounds to "true" et voila! Even works when you size up and down so you don't lose the TextView and only the image scales down.

夜血缘 2024-12-25 09:47:26

您可以为此使用相对布局。它可能对您有帮助。下面的代码

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:orientation="vertical" >

   <ImageView
     android:id="@+id/thumbnail"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"
     android:paddingRight="5dp"
     android:src="@drawable/a" />

   <TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="Title"
    android:textColor="#FFFFFF" 
    android:layout_below="@id/thumbnail"/>

    </RelativeLayout>

通过使用relativelayout,可以将textview设置在imageview的下方,这样imageview和textview就可以换行了。

编辑:

  <RelativeLayout>
       <LinearLayout
         android:id="@+id/linearlayout1">
          //here the textview and imageview code
       </LinearLayout>
      <LinearLayout
       android:layout_below="@id/linearlayout1"
       >
      //here the redblock code
     </LinearLayout>

所以现在整个红块将位于之前的布局下方..可能有帮助

You can use relative layout for this.it may helpfull for you. The below code

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:orientation="vertical" >

   <ImageView
     android:id="@+id/thumbnail"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:paddingLeft="5dp"
     android:paddingRight="5dp"
     android:src="@drawable/a" />

   <TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="Title"
    android:textColor="#FFFFFF" 
    android:layout_below="@id/thumbnail"/>

    </RelativeLayout>

By using relativelayout, you can set textview below the imageview so that imageview and textview can wrap.

Edit:

  <RelativeLayout>
       <LinearLayout
         android:id="@+id/linearlayout1">
          //here the textview and imageview code
       </LinearLayout>
      <LinearLayout
       android:layout_below="@id/linearlayout1"
       >
      //here the redblock code
     </LinearLayout>

so now entire redblock will come below the previous layout..may b helpful

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文