android - 在网格布局android中根据屏幕尺寸自动调整

标签 android grid-layout

我创建了一个包含全部文本的网格。我希望文本根据屏幕尺寸自动调整。我试过下面的代码,

    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
    int noOfColumns = (int) (dpWidth / 50);
    return noOfColumns;

我想要这样的输出

image ] 2

imag2 它不按我的需要工作。请帮忙 。提前致谢。

最佳答案

这是 GridLayout 的自定义实现,它将满足您的需要:AutoGridLayout

public class AutoGridLayout extends GridLayout {

    private int defaultColumnCount;
    private int columnWidth;

    public AutoGridLayout(Context context) {
        super(context);
        init(null, 0);
    }

    public AutoGridLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs, 0);
    }

    public AutoGridLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(attrs, defStyleAttr);
    }

    private void init(AttributeSet attrs, int defStyleAttr) {
        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.AutoGridLayout, 0, defStyleAttr);
        try {
            columnWidth = a.getDimensionPixelSize(R.styleable.AutoGridLayout_columnWidth, 0);

            int[] set = { android.R.attr.columnCount /* id 0 */ };
            a = getContext().obtainStyledAttributes(attrs, set, 0, defStyleAttr);
            defaultColumnCount = a.getInt(0, 10);
        } finally {
            a.recycle();
        }

        /* Initially set columnCount to 1, will be changed automatically later. */
        setColumnCount(1);
    }

    @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        super.onMeasure(widthSpec, heightSpec);

        int width = MeasureSpec.getSize(widthSpec);
        if (columnWidth > 0 && width > 0) {
            int totalSpace = width - getPaddingRight() - getPaddingLeft();
            int columnCount = Math.max(1, totalSpace / columnWidth);
            setColumnCount(columnCount);
        } else {
            setColumnCount(defaultColumnCount);
        }
    }
}

只需像这样添加到您的 XML 布局文件中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="match_parent">

    <com.km.myproject.customview.AutoGridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="5"
        app:columnWidth="50dp"/>

</FrameLayout>

使用 columnWidth 将尝试计算可以容纳多少列并自动设置最佳跨度数。如果未使用(或由于某种原因无法测量),将使用 columnCount 属性。

希望这对您有所帮助!

关于android - 在网格布局android中根据屏幕尺寸自动调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39436115/

相关文章:

php - Asynctask 不适用于 PHP Post Image

java - Android Firebase 更新现有值而不是 setValue 创建新记录

android - sdk 管理器中没有包或平台

c# - Android Xamarin NavigationView 处理事件错误

html - 如何卡住具有无限行和列的表格数据网格列表的标题和第一列?

java - Java GridLayout 和添加按钮的问题

Android - popUpWindow 中的 DatePicker

java - 有没有办法强制 GridLayout 留下空单元格?

CSS 高级 float /网格布局

html - 我的按钮的文字没有调整大小?