Anu*_*sha 12 android grid-layout
我创建了一个包含大量文本的网格.我希望文本根据屏幕大小自动调整.我试过以下代码,
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
int noOfColumns = (int) (dpWidth / 50);
return noOfColumns;
Run Code Online (Sandbox Code Playgroud)
我想输出这样的东西
] 2
小智 6
这是 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
只需像这样添加到您的 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>
Run Code Online (Sandbox Code Playgroud)
UsingcolumnWidth将尝试计算可以容纳多少列并自动设置最佳跨度数。如果未使用(或由于某种原因未能测量),columnCount将使用该属性。
希望这可以帮助!
使用FlexboxLayoutwithRecyclerView来处理这种类型的布局
RecyclerView recyclerView = (RecyclerView) context.findViewById(R.id.recyclerview);
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(context);
layoutManager.setFlexDirection(FlexDirection.COLUMN);
layoutManager.setJustifyContent(JustifyContent.FLEX_START);
recyclerView.setLayoutManager(layoutManager);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请检查FlexboxLayout,
FlexboxLayout还可以处理不同宽度高度的视图,就像中的图像一样Gallery
Vya*_*lav -1
对于网格布局
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:columnCount="4"
android:orientation="horizontal" >
<Button android:text="1" />
<Button android:text="2" />
<Button android:text="3" />
<Button android:text="4" />
<Button android:text="5" />
<Button android:text="6" />
<Button android:text="7" />
<Button android:text="8" />
<Button android:text="9" />
<Button android:text="10" />
<Button android:text="11" />
<Button android:text="12" />
<Button android:text="13" />
<Button android:text="14" />
<Button android:text="15" />
<Button android:text="16" />
</GridLayout>
Run Code Online (Sandbox Code Playgroud)
以编程方式:
GridLayout gridLayout = new GridLayout(this);
gridLayout .setColumnCount(4);
///...
Run Code Online (Sandbox Code Playgroud)
一个例子:https ://stackoverflow.com/a/14715333/1979882
要调整 gridview 使用此方法:
private void adjustGridView() {
gv.setNumColumns(GridView.AUTO_FIT);
gv.setColumnWidth(70);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18840 次 |
| 最近记录: |