我想显示 3x3 大小的网格视图。我想根据设备大小设置高度和宽度。我从这个链接中获取参考。
主要活动-
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
活动_主要-
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
编辑-
就像首先得到屏幕高度和宽度,然后每个项目的高度和宽度是我得到的屏幕高度和宽度值的1/3。
当我必须调整我的活动
s时,我使用以下方法,我假设这同样适用于您的情况:
// I'm storing the size of the window in the display var, so I can then play around
final Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
// In your case, you'll probably need something like this:
GridView gv = (GridView) findViewById(R.id.gridview);
gv.setWidth((int) size.x * 0.75); // Whis would resize the grid width to the 75%
gv.setHeight((int) size.y * 0.5); // Same with the height, but to the 50%
您可以获得如下屏幕尺寸:
final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels;
Log.WTF("ScreenWidth", "width: "+screenWidthInDp+", menuWidth: "+screenWidthInDp/3);
对于gridview,我建议你看看这个很棒的库,叫做交错网格视图。他们的样本在这里。
不要使用屏幕大小,在多窗口上下文中此方法无效。如果您的网格是固定的 3x3 项目大小,请使用自定义布局 ViewGroup,如下所示:(并设置相对布局
项目内容)
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle state) {
setContentView(new ViewGroup(this) {
private RelativeLayout[] items = new RelativeLayout[9];
private int width, height, itemWidth, itemHeight;
{
Random r = new Random();
for (int i = 0; i < 9; i++) {
items[i] = new RelativeLayout(getContext());
float[] hsv = new float[] {360 * r.nextFloat(), .50f, .75f};
items[i].setBackgroundColor(Color.HSVToColor(hsv));
addView(items[i]);
// UPDATE ////////////////////////////////////
ImageView image = new ImageView(getContext());
switch (i) {
case 0: // top left
case 1: // top center
case 2: // top right
case 3: // center left
case 4: // center center
case 5: // center right
case 6: // bottom left
case 7: // bottom center
case 8: // bottom right
image.setImageResource(R.drawable.ic_launcher);
break;
}
image.setScaleType(ScaleType.FIT_XY);
image.setLayoutParams(new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT
));
items[i].addView(image);
//////////////////////////////////////////////
}
}
@Override
protected void onMeasure(int wMS, int hMS) {
width = MeasureSpec.getSize(wMS);
height = MeasureSpec.getSize(hMS);
itemWidth = width / 3;
itemHeight = height / 3;
wMS = MeasureSpec.makeMeasureSpec(itemWidth, MeasureSpec.EXACTLY);
hMS = MeasureSpec.makeMeasureSpec(itemHeight, MeasureSpec.EXACTLY);
measureChildren(wMS, hMS);
setMeasuredDimension(width, height);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < 9; i++) {
l = itemWidth * (i % 3);
t = itemHeight * (i / 3);
r = l + itemWidth;
b = t + itemHeight;
items[i].layout(l, t, r, b);
}
}
});
super.onCreate(state);
}
}
编辑:请参阅我的代码更新,您只需将图像添加到项目容器中。使用此方法,无需XML布局文件,因为您可以自己管理内容和大小。
编辑:极简主义的方式:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle state) {
setContentView(new ViewGroup(this) {
private static final int SIZE_X = 3;
private static final int SIZE_Y = 3;
private ImageView[] items = new ImageView[SIZE_X * SIZE_Y];
private int itemWidth, itemHeight;
{
setBackgroundColor(Color.DKGRAY);
for (int i = 0; i < items.length; i++) {
items[i] = new ImageView(getContext());
items[i].setScaleType(ScaleType.CENTER);
items[i].setImageResource(R.drawable.ic_launcher);
addView(items[i]);
}
}
@Override
protected void onMeasure(int wMS, int hMS) {
int width = MeasureSpec.getSize(wMS);
int height = MeasureSpec.getSize(hMS);
itemWidth = width / SIZE_X;
itemHeight = height / SIZE_Y;
wMS = MeasureSpec.makeMeasureSpec(itemWidth, MeasureSpec.EXACTLY);
hMS = MeasureSpec.makeMeasureSpec(itemHeight, MeasureSpec.EXACTLY);
measureChildren(wMS, hMS);
setMeasuredDimension(width, height);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < items.length; i++) {
l = itemWidth * (i % SIZE_X);
t = itemHeight * (i / SIZE_X);
r = l + itemWidth;
b = t + itemHeight;
items[i].layout(l, t, r, b);
}
}
});
super.onCreate(state);
}
}
结果:
@坎瓦尔吉特·辛格:
在主活动项目创建循环中:
final int id = i;
items[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getContext(), NextActivity.class).putExtra("id", id));
}
});
在下一个活动中:
int id = getIntent().getIntExtra("id", -1);
我见过很多关于如何分别设置ImageView和GridView的高度和宽度的问题。这里,这里,还有这里 但是,我想知道如何设置两者。 这是我的设置。在我的GridView中,我有一个ImageView和一个TextView。我有一些不同宽度和大小的图像,我想调整它们的大小,使其始终是屏幕正方形大小的1/3。下面,我有一段文字描述。 这是我到目前为止的代码。。。 gallerygridview.xm
我正在使用一个库从url获取图像并将其作为位图图像保存到缓存中。但是当我检索该图像时,它非常小。如何根据手机屏幕增加位图图像的高度和宽度?这是创建位图的类。
我有一个可折叠的导航条构建与bootstrap 4。我使用了col-sm-2和navbar-expand-sm来使它以相同的屏幕尺寸折叠成一个汉堡包,它应该占据整个宽度。 问题是在sm屏幕尺寸以上,我希望它有h-100,所以它是一个侧栏,但作为sm/xs,我希望它只是占用拨动按钮所需的空间。 有没有办法用bootstrap来实现这一点,或者我被困在jquery中添加/删除h-100类?
问题内容: 我正在使用SwiftUI绘制一个表,该表的行和列太多,无法容纳 屏幕宽度/高度。在这种情况下,我无法将视图对齐为 领先,但总是以某种方式居中。我该如何调整他们的领先地位?这 是绘制表格的视图: 这是GridStack: 这就是应用程序中的外观。请注意,边缘不适合 屏幕内部。即使我尝试滚动到那里,它也会反弹回来。 问题答案: 这是一个可能的方法演示(以及改进的方向,因为我 没有测试所有情
问题内容: 我的元素: 风格: 脚本,使其保持方形: 问题是要在纯CSS中做同样的事情。没有脚本。 问题答案: 我知道有两种技术可以根据元素的高度保持元素的长宽比: 当 高度相对于视口时 : 您可以使用vh单位: 对于 基于父元素的高度的高度 : 您可以使用具有所需纵横比的虚拟图像。宽高比为1:1的示例可以使用1 * 1透明.png图像,也可以使用@vlgalik注释为1 * 1 base64编码
我正在尝试将CardView宽度与屏幕宽度匹配,但CardView的宽度与屏幕宽不匹配。我一次又一次地检查了我的代码,甚至使所有属性的宽度等于匹配的父级。 Recyclerview xml-- 卡片视图xml - 膨胀代码 这是屏幕截图