自定义GridView

时间:2015-11-17 17:57:40

标签: android android-layout gridview

我正在尝试设计Layout,就像这张图片一样:

enter image description here

我认为最好的方法是为每个项目使用LinearLayout,我错了,因为它看起来像这样:

enter image description here

问题是ImageView不在中间,我试图把它放在边缘,但是当我尝试在三星s2上启动这个APP时,它会弄乱Layout然后我的Lg g3我在底部看到的ImageView(没有边距)和s2我看到它在中间......

这是我的layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardElevation="5dp"
android:layout_margin="7dp">

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
  <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/LinearImageView">
    <ImageView android:id="@+id/image_holder"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:scaleType="fitXY" />
  </LinearLayout>

    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@id/LinearImageView"
        android:background="@android:color/darker_gray"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/LinearTitulo"
        android:layout_below="@+id/divider"
        android:layout_marginLeft="5dp"
        >
    <TextView
        android:id="@+id/info_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SOME TEXT HERE"
        android:textSize="16sp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/LinearPrice"
        android:layout_marginLeft="5dp"
        android:layout_below="@+id/LinearTitulo">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tvPrice"
            android:text="SOME TEXT HERE"
            android:layout_below="@+id/info_text"/>
    </LinearLayout>

    <ImageView
    android:layout_width="24dp"
    android:layout_height="24dp"
    android:src="@mipmap/ic_launcher"
    android:layout_marginRight="5dp"
        android:layout_alignBottom="@+id/LinearPrice"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />


</RelativeLayout>

我认为GridView就是重点,我看到像AsymmetricGridView这样的库,但它不是我需要的,因为你把它放在代码(java)中,我不想要它

我想这是一个GridView,有两列,第一列有2行,第二列有一行,但我不知道这是否是最好的方法,你能引导我吗?

4 个答案:

答案 0 :(得分:3)

这里的另一个布局没有与相对定位混淆。我在我的一个应用程序中使用了类似的布局,它工作正常,但你可能想根据自己的喜好进行调整;)

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

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

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:textColor="#000000" />

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@android:color/black" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:textColor="#000000" />

        </LinearLayout>

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="@android:color/black" />

        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="10dp" />

    </LinearLayout>

</android.support.v7.widget.CardView>

编辑:添加了输出图片

enter image description here

答案 1 :(得分:2)

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="7dp"
    app:cardElevation="5dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >

        <LinearLayout
            android:id="@+id/LinearImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/image_holder"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:scaleType="fitXY"/>
        </LinearLayout>

        <View
            android:id="@+id/divider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@id/LinearImageView"
            android:background="@android:color/darker_gray"/>

        <LinearLayout
            android:id="@+id/bottomLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_below="@+id/divider">

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:layout_weight="80">


                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Text 1"
                    android:id="@+id/textView3"
                    android:textSize="40sp"
                    android:paddingLeft="30dp"/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Text2"
                    android:id="@+id/textView4"
                    android:textSize="20sp"
                    android:paddingLeft="30dp"/>
            </LinearLayout>

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:src="@drawable/ic_action_armchair"
                android:layout_weight="20"/>

        </LinearLayout>

    </RelativeLayout>

</android.support.v7.widget.CardView>

Rendering

答案 2 :(得分:1)

删除android:layout_alignBottom="@+id/LinearPrice"并将android:layout_centerVertical="true"添加到您的ImageView

答案 3 :(得分:1)

作为参考如何:

heroku:Build and Deploy with Docker

   <?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="wrap_content"
    android:orientation="horizontal"
    android:background="#111">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="#fff"
            android:textSize="18sp"
            android:text="TextView1"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#fff"
            android:padding="10dp"
            android:textSize="18sp"
            android:text="TextView2"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="right">
        <ImageView
            android:layout_width="50sp"
            android:layout_height="50sp"
            android:layout_gravity="center"
            android:background="@drawable/placeholder_loader"
            />
    </LinearLayout>




</LinearLayout>