android.widget.GridView#getLayoutParams ( )源码实例Demo

下面列出了android.widget.GridView#getLayoutParams ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: MissZzzReader   文件: ListViewHeight.java
/**
 * 日期gridview的高度
 * @param gridView
 * @return
 */
public static int setDateGridViewHeightBasedOnChildren(GridView gridView) {
    ListAdapter listAdapter = gridView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return 0;
    }
    int totalHeight = 0;
    for (int i = 0; i < (listAdapter.getCount()/7); i++) {
        View listItem = listAdapter.getView(i, null, gridView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = totalHeight + (1 * (listAdapter.getCount()/7 - 1));
    gridView.setLayoutParams(params);
    return totalHeight + (1 * (listAdapter.getCount()/7 - 1));
}
 
源代码2 项目: JKCalendar   文件: JKCalendar.java
/**
 * 重新計算GridView的高度
 *
 * @param gridView
 */
public static void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {

    ListAdapter listAdapter = gridView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount() / columns; i++) {
        View listItem = listAdapter.getView(i, null, gridView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = totalHeight + (listAdapter.getCount() - 1);
    gridView.setLayoutParams(params);
    gridView.requestLayout();
}
 
源代码3 项目: styT   文件: WidgetUtils.java
public static void setListViewHeightBasedOnChildren(GridView listView) {
    // 获取listview的adapter
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    // 固定列宽,有多少列
    int col = 3;// listView.getNumColumns();
    int totalHeight = 0;
    // i每次加4,相当于listAdapter.getCount()小于等于4时 循环一次,计算一次item的高度,
    // listAdapter.getCount()小于等于8时计算两次高度相加
    for (int i = 0; i < listAdapter.getCount(); i += col) {
        // 获取listview的每一个item
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        // 获取item的高度和
        totalHeight += listItem.getMeasuredHeight();
    }

    // 获取listview的布局参数
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    // 设置高度
    params.height = totalHeight;
    // 设置margin
    ((MarginLayoutParams) params).setMargins(10, 10, 10, 10);
    // 设置参数
    listView.setLayoutParams(params);
}
 
源代码4 项目: MVPAndroidBootstrap   文件: GridViewUtil.java
/**
 * Resizes the gridview.
 * @param gridView
 * @param items count
 * @param columns column number
 */
public static void resizeGridView(GridView gridView, int columns) {
    ListAdapter listAdapter = gridView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    int items = listAdapter.getCount();
    int rows = 0;

    int maxHeight = 0;

    for(int i = 0; i< listAdapter.getCount(); i++ ){
        View listItem = listAdapter.getView(i, null, gridView);
        listItem.measure(0, 0);
        totalHeight = listItem.getMeasuredHeight();
        if(maxHeight < totalHeight){
            maxHeight = totalHeight;
        }
    }



    float x = 1;
    if( items > columns ){
        x = items/columns;
        rows = (int) (x + 1);
        maxHeight *= rows;
    }

    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = maxHeight;
    gridView.setLayoutParams(params);

}
 
源代码5 项目: RxAndroidBootstrap   文件: GridViewUtil.java
/**
 * Resizes the gridview.
 * @param gridView
 * @param items count
 * @param columns column number
 */
public static void resizeGridView(GridView gridView, int columns) {
    ListAdapter listAdapter = gridView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    int items = listAdapter.getCount();
    int rows = 0;

    int maxHeight = 0;

    for(int i = 0; i< listAdapter.getCount(); i++ ){
        View listItem = listAdapter.getView(i, null, gridView);
        listItem.measure(0, 0);
        totalHeight = listItem.getMeasuredHeight();
        if(maxHeight < totalHeight){
            maxHeight = totalHeight;
        }
    }



    float x = 1;
    if( items > columns ){
        x = items/columns;
        rows = (int) (x + 1);
        maxHeight *= rows;
    }

    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = maxHeight;
    gridView.setLayoutParams(params);

}
 
源代码6 项目: DevUtils   文件: ListViewUtils.java
/**
 * 计算 GridView 高度
 * @param gridView  {@link GridView}
 * @param setParams 是否 setLayoutParams
 * @return GridView 高度
 */
public static int calcGridViewHeight(final GridView gridView, final boolean setParams) {
    if (gridView == null) return 0;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) return 0;
    try {
        // Adapter
        ListAdapter listAdapter = gridView.getAdapter();
        // Item 总条数
        int itemCount = listAdapter.getCount();
        // 没数据则直接跳过
        if (itemCount == 0) return 0;
        // 高度
        int height = 0;
        // 获取一共多少列
        int numColumns = gridView.getNumColumns();
        // 每列之间的间隔 |
        int horizontalSpacing = gridView.getHorizontalSpacing();
        // 每行之间的间隔 -
        int verticalSpacing = gridView.getVerticalSpacing();
        // 获取倍数 ( 行数 )
        int lineNumber = NumberUtils.getMultiple(itemCount, numColumns);
        // 计算总共的宽度 - (GridView 宽度 - 列分割间距 ) / numColumns
        int childWidth = (gridView.getWidth() - (numColumns - 1) * horizontalSpacing) / numColumns;

        // 记录每行最大高度
        int[] rowHeightArrays = new int[lineNumber];
        // 临时高度 - 保存行中最高的列高度
        int tempHeight;
        // 循环每一行绘制每个 Item 并保存 Bitmap
        for (int i = 0; i < lineNumber; i++) {
            // 清空高度
            tempHeight = 0;
            // 循环列数
            for (int j = 0; j < numColumns; j++) {
                // 获取对应的索引
                int position = i * numColumns + j;
                // 如果大于总数据则跳过
                if (position < itemCount) {
                    View childView = listAdapter.getView(position, null, gridView);
                    WidgetUtils.measureView(childView, childWidth);

                    int itemHeight = childView.getMeasuredHeight();
                    // 保留最大高度
                    tempHeight = Math.max(itemHeight, tempHeight);
                }

                // 记录高度并累加
                if (j == numColumns - 1) {
                    height += tempHeight;
                    rowHeightArrays[i] = tempHeight;
                }
            }
        }
        // 追加子项间分隔符占用的高度
        height += (verticalSpacing * (lineNumber - 1));

        // 是否需要设置高度
        if (setParams) {
            ViewGroup.LayoutParams params = gridView.getLayoutParams();
            params.height = height;
            gridView.setLayoutParams(params);
        }
        return height;
    } catch (Exception e) {
        LogPrintUtils.eTag(TAG, e, "calcGridViewHeight");
    }
    return 0;
}
 
源代码7 项目: MissZzzReader   文件: ListViewHeight.java
/**
 * 计算gridview的高度
 * @param gridView
 */
public static void setGridViewHeightBasedOnChildren(GridView gridView) {
    // 获取GridView对应的Adapter
    ListAdapter listAdapter = gridView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    int rows;
    int columnWidths;
    int columns=0;
    int horizontalBorderHeight = 0;
    int verticalBorderHeight = 0;

    Class<?> clazz=gridView.getClass();
    try {
        //利用反射,取得横向分割线高度
        Field vertical=clazz.getDeclaredField("mVerticalSpacing");
        vertical.setAccessible(true);
        verticalBorderHeight =(Integer)vertical.get(gridView);

        //利用反射,取得纵向分割线高度
        Field horizontalSpacing=clazz.getDeclaredField("mRequestedHorizontalSpacing");
        horizontalSpacing.setAccessible(true);
        horizontalBorderHeight=(Integer)horizontalSpacing.get(gridView);

        //利用反射,取得每行显示的个数
        Field column=clazz.getDeclaredField("mRequestedNumColumns");
        column.setAccessible(true);
        columns=(Integer)column.get(gridView);

        if(columns == -1 || columns == 0){
            Field columnWidth = clazz.getDeclaredField("mRequestedColumnWidth");
            columnWidth.setAccessible(true);
            columnWidths = (Integer)columnWidth.get(gridView);
            int pad = gridView.getPaddingLeft() * 2;
            int width = BaseActivity.width - pad * 2;
            columns = width  / (columnWidths /*+ horizontalBorderHeight*/);
            if(horizontalBorderHeight * (columns - 1) + columnWidths * columns > width){
                columns --;
            }
        }

    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    //判断数据总数除以每行个数是否整除。不能整除代表有多余,需要加一行
    if(listAdapter.getCount()%columns > 0){
        rows=listAdapter.getCount()/columns+1;
    }else {
        rows=listAdapter.getCount()/columns;
    }
    int totalHeight = 0;
    for (int i = 0; i < rows; i++) { //只计算每项高度*行数
        View listItem = listAdapter.getView(i, null, gridView);
        listItem.measure(0, 0); // 计算子项View 的宽高
        totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
    }
    ViewGroup.LayoutParams params = gridView.getLayoutParams();
    params.height = totalHeight  + gridView.getPaddingTop() + + gridView.getPaddingBottom() + verticalBorderHeight * (rows-1);//最后加上分割线总高度
    gridView.setLayoutParams(params);
}
 
源代码8 项目: emerald   文件: MainLayout.java
public static RelativeLayout get(Context context, SharedPreferences options) {
	RelativeLayout mainLayout = new RelativeLayout(context);
	LayoutInflater layoutInflater = (LayoutInflater) 
		context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

	addDockBar(mainLayout, layoutInflater, options);

	boolean kitkatNoImmersiveMode = (Build.VERSION.SDK_INT == 19 && !options.getBoolean(Keys.FULLSCREEN, false));
	FrameLayout mainBar = (FrameLayout) layoutInflater.inflate(R.layout.main_bar, mainLayout, false);
	RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(mainBar.getLayoutParams());
	
	GridView grid = (GridView) layoutInflater.inflate(R.layout.apps_grid, mainLayout, false);
	initAppsGrid(grid, options);
	
	if (options.getBoolean(Keys.BOTTOM_MAIN_BAR, true)) {
		layoutParams.addRule(RelativeLayout.ABOVE, R.id.dock_bar);
		mainBar.setLayoutParams(layoutParams);
		mainLayout.addView(mainBar);
		
		if (kitkatNoImmersiveMode) {
			mainLayout.addView(getFakeStatusBar(mainLayout, layoutInflater, options));
		}
		layoutParams = new RelativeLayout.LayoutParams(grid.getLayoutParams());
		if (kitkatNoImmersiveMode) {
			layoutParams.addRule(RelativeLayout.BELOW, R.id.kitkat_status_bar);
		} else {
			layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		}
		layoutParams.addRule(RelativeLayout.ABOVE, R.id.main_bar);
		grid.setLayoutParams(layoutParams);
		mainLayout.addView(grid);
	} else {
		if (!kitkatNoImmersiveMode) {
			layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
		} else {
			mainLayout.addView(getFakeStatusBar(mainLayout, layoutInflater, options));
			layoutParams.addRule(RelativeLayout.BELOW, R.id.kitkat_status_bar);
		}
		
		mainBar.setLayoutParams(layoutParams);
		mainLayout.addView(mainBar);
		
		layoutParams = new RelativeLayout.LayoutParams(grid.getLayoutParams());
		layoutParams.addRule(RelativeLayout.ABOVE, R.id.dock_bar);
		layoutParams.addRule(RelativeLayout.BELOW, R.id.main_bar);
		grid.setLayoutParams(layoutParams);
		mainLayout.addView(grid);
	}
	if (options.getBoolean(Keys.HIDE_MAIN_BAR, false)) {
		mainBar.setVisibility(View.GONE);
	}
	mainBar.setBackgroundColor(options.getInt(Keys.BAR_BACKGROUND, 0x22000000));
	
	return mainLayout;
}