码迷,mamicode.com
首页 > 其他好文 > 详细

ListView中镶嵌GridView实现时间线功能问题总汇

时间:2015-06-02 22:11:20      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:android   listview   gridview   显示不全   item不可点击   

看了网上的时间线,基本都非常的差劲,不如自己写一个,实现的效果如下,在实现的过程中遇到了2个大的问题:1、gridView显示不全2、listview的item不可点击,那么下面写出我解决这两个问题的办法


一、GridView显示不全的问题

GridView 显示不全是因为ListView和GridView都是可以滚动的,在android中不可以在一个可以滚动的控件中镶嵌另一个可以滚动的控件,那么我们可以通过自定义GridView设置为不滚动。

  • MyGridView
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 * 自定义的GridView对付listview中镶嵌GirdView的情况
 * @author zsl
 * @github https://github.com/yy1300326388
 * @blog http://blog.csdn.net/yy1300326388
 */
public class MyGridView extends GridView {

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 设置不滚动
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}
  • XML
<!--使用自定义的MGridView实现ListView当中镶嵌一个GridView的情况  -->
<com.huahuacaocao.flowerpot.view.MyGridView
    android:id="@+id/timeline_gv_update"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:numColumns="4"
    android:scrollbars="none" />
  • 初始化View
MyGridView gv_update = (MyGridView) findViewById(R.id.timeline_gv_update);

二、ListView的Item不可点击

ListView的Item不可点击 的原因是GridView抢占了焦点,那么我们可以不让它抢占焦点,我们在Item中的根节点添加如下属性,设置聚焦点不向下传递。

  • descendantFocusability
android:descendantFocusability="blocksDescendants"
  • 示例(timeline_item.xml)
<?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:background="@color/app_color"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/timeline_item_tv_report"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/app_marge_10"
        android:text="测试"
        android:textColor="@color/garywrite"
        android:textSize="@dimen/textsize_14" />

    <com.huahuacaocao.flowerpot.view.MyGridView
        android:id="@+id/timeline_gv_update"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:numColumns="4"
        android:scrollbars="none"
        android:verticalSpacing="@dimen/app_marge_5" />

</LinearLayout>

/**
 * --------------
 * 欢迎转载   |  转载请注明
 * --------------
 * @author zsl
 * @github https://github.com/yy1300326388
 * @blog http://blog.csdn.net/yy1300326388
 */

ListView中镶嵌GridView实现时间线功能问题总汇

标签:android   listview   gridview   显示不全   item不可点击   

原文地址:http://blog.csdn.net/yy1300326388/article/details/46333323

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!