【问题标题】:Custom GridView Item自定义 GridView 项
【发布时间】:2015-07-15 05:35:26
【问题描述】:

如何创建如下所示的自定义 GridView 项目?

我写的布局 -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/round_corner_drawable">

<ImageView
    android:id="@+id/market_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:src="@drawable/default_image"/>

    <TextView

        android:id="@+id/nameTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Text 1"/>

    <TextView
        android:id="@+id/priceTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Text 2"/>
</LinearLayout>

为了使它成为正方形,我在适配器的 getView() 方法中添加了这些行 -

GridView grid = (GridView)parent;
int size = grid.getColumnWidth();
view.setLayoutParams(new GridView.LayoutParams(size, size));

在设备上运行它后,我得到了以下结果。 imageview 下面的文本被裁剪并且不可见。我还希望 imageview 超出布局,如上图所示。请帮忙

我正在使用的图像 -

【问题讨论】:

  • 使用 FrameLayout 代替 LinearLayout
  • 我尝试使用 FrameLayout 但我必须在图像视图下方显示两个文本。

标签: android android-layout gridview android-linearlayout android-gridview


【解决方案1】:

尝试将 weight=1 赋予图像布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/round_corner_drawable">

<ImageView
    android:id="@+id/market_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:src="@drawable/default_image"/>

    <TextView

        android:id="@+id/nameTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Text 1"/>

    <TextView
        android:id="@+id/priceTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Text 2"/>
</LinearLayout>

按照上面的xml。

【讨论】:

    【解决方案2】:

    尝试使用以下布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <View
        android:id="@+id/anchor"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true" />
    
    <ImageView
        android:id="@+id/market_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/nameTV"
        android:layout_below="@+id/anchor"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:src="@drawable/ic_launcher" />
    
    <TextView
        android:id="@+id/nameTV"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_above="@+id/priceTV"
        android:gravity="center_horizontal"
        android:text="Text 1" />
    
    <TextView
        android:id="@+id/priceTV"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dp"
        android:gravity="center_horizontal"
        android:text="Text 2" />
    
    </RelativeLayout>
    

    【讨论】:

      【解决方案3】:

      或使用以下布局

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:weightSum="100"
      android:orientation="vertical">
      
      <ImageView
      android:id="@+id/market_image"
      android:layout_width="wrap_content"
      android:layout_height=match_parent
      android:layout_marginLeft="5dp"
      android:layout_marginRight="5dp"
      android:layout_weight="10"
      android:src="@drawable/ic_launcher"/>
      
      <TextView
      
          android:id="@+id/nameTV"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:layout_marginLeft="5dp"
           android:layout_weight="45"
          android:text="Text 1"/>
      
      <TextView
          android:id="@+id/priceTV"
          android:layout_width="wrap_content"
          android:layout_height="match_parent"
          android:layout_marginLeft="5dp"
           android:layout_weight="45"
          android:text="Text 2"/>
      </LinearLayout>
      

      【讨论】:

      • 您尝试过我给出的第二种解决方案吗?您可以尝试将 android:scaleType="centerInside" 放在图像视图中。图片的高度是多少?
      • 我也尝试过第二种解决方案。在问题中添加了图像,以便您检查它。此外,我强制 gridview 仅绘制两列,然后按照问题中的说明将 gridview 项目设为正方形
      【解决方案4】:

      终于可以解决了。 我已经写了下面的布局以获得所需的输出

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/rootView"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >
      
      <RelativeLayout
          android:layout_width="210dp"
          android:layout_height="240dp"
          android:background="@drawable/round_corner_drawable"
          android:layout_marginTop="15dp">
      
          <TextView
      
              android:id="@+id/nameTV"
              android:layout_above="@+id/priceTV"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="5dp"
              android:text="Latin American Republic"/>
      
          <TextView
              android:id="@+id/priceTV"
              android:layout_alignParentBottom="true"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="5dp"
              android:text="65$"/>
      </RelativeLayout>
      
      <ImageView
          android:id="@+id/market_image"
          android:layout_width="190dp"
          android:layout_height="200dp"
          android:layout_marginLeft="5dp"
          android:layout_marginRight="5dp"
          android:scaleType="fitXY"
          android:src="@drawable/default_marketplace"/>
      
      
      
      
      </RelativeLayout>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        相关资源
        最近更新 更多