GridView项目未展开以显示内容

时间:2015-05-21 15:03:46

标签: android android-layout gridview nine-patch

这可能是来自Android GridView Items Resizing

的相反问题

我有一个GridView,它设置为显示由具有9补丁背景和TextView的LinearLayout制作的自定义布局。 LinearLayout具有10dp填充集,因此TextView保留在中心补丁中。

当我测试数据以扩展TextView时,LinearLayout也会出现扩展(yay!),但GridView正在切断底部。在下图中,您可以看到右下角元素的右下曲率被截断。

Screenshot of GridView

MyClasses.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_classes);
    notebookGrid = (GridView)findViewById(R.id.NotebookGrid);

    ArrayList<String> class1 = new ArrayList<>(Arrays.asList("1", "Ms. Soldan's Class"));
    ArrayList<String> class2 = new ArrayList<>(Arrays.asList("2", "Ms. Perry's Class"));
    ArrayList<String> class3 = new ArrayList<>(Arrays.asList("3", "Ms. Panjwani's Class"));
    ArrayList<String> class4 = new ArrayList<>(Arrays.asList("4", "Ms. Smith's Really Awesome Super Cool Class of Many Geniuses"));

    ArrayList<ArrayList<String>> classArray = new ArrayList<>();
    classArray.add(class1);
    classArray.add(class2);
    classArray.add(class3);
    classArray.add(class4);
    notebookGrid.setAdapter(new MyClassesAdapter(this, classArray));
}

MyClassesAdapter.java:

public View getView(int position, View convertView, ViewGroup parent) {
    ArrayList<String> thisClass = getItem(position);
    ViewHolder vh;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.grid_class_notebook, parent,false);
        vh = new ViewHolder(convertView,R.id.NotebookTitle);
        convertView.setTag(vh);
    } else {
        vh = (ViewHolder)convertView.getTag();
    }
        vh.TitleView.setText(thisClass.get(1));
    return convertView;
}

grid_class_notebook.xml:

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

    <Space
        android:layout_width="wrap_content"
        android:layout_height="10dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:background="@color/White"
        android:padding="10dp"
        android:textStyle="bold"
        android:textSize="12sp"
        android:id="@+id/NotebookTitle"
        />
</LinearLayout>

activity_my_classes:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:gravity="left"
        android:padding="25dp"
        android:text="@string/classes_title"
        android:textStyle="bold"/>

    <GridView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="2"
        android:padding="15dp"
        android:id="@+id/NotebookGrid"/>
</LinearLayout>

如何让元素或行长大以响应更大的TextView子项?

1 个答案:

答案 0 :(得分:0)

所以这只花了我一个月的时间来回答我自己。这里发生的事情是GridView本身很短,但项目本身实际上是正确的大小。我尝试滚动笔记本电脑从未想过,但我今天就这样做了,剩下的图像出现了。

基本上错误是GridView的高度为&#34; wrap_content&#34;。我已将其更改为0dp的高度,并添加了权重= 1的标记,因为我最终会在GridView下面添加一些其他元素。 activity_my_classes的新xml代码:

<GridView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:numColumns="2"
    android:padding="15dp"
    android:id="@+id/NotebookGrid"/>