我希望有一个带有按钮的2x2网格.这只是ICS所以我试图使用给定的新GridLayout.
这是我的布局的XML:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/favorites_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ff00"
android:rowCount="2"
android:columnCount="2">
<Button
android:text="Cell 0"
android:layout_row="0"
android:layout_column="0"
android:textSize="14dip" />
<Button
android:text="Cell 1"
android:layout_row="0"
android:layout_column="1"
android:textSize="14dip" />
<Button
android:text="Cell 2"
android:layout_row="1"
android:layout_column="0"
android:textSize="14dip" />
<Button
android:text="Cell 3"
android:layout_row="1"
android:layout_column="1"
android:textSize="14dip" />
</GridLayout>
Run Code Online (Sandbox Code Playgroud)
问题是我的视图不能均匀地拉伸到每一行.这会在GridLayout的右侧产生大量额外空间.
我试过设置,layout_gravity="fill_horizontal"
但只适用于行的最后一个视图.这意味着Cell 1一直延伸为Cell 0提供足够的空间.
关于如何解决这个问题的想法?
我必须使用网格在Android中实现Photo Browser,我想知道GridView和GridLayout之间的区别.
我正在使用GridView动态显示图像.
我正在尝试用两列制作gridview.我的意思是每排并排两张照片,就像这张照片一样.
但是我的照片之间有空格,因为它的大小不一样.这是我得到的.
如您所见,第一张图片隐藏了显示联系人姓名和电话号码的图例.而其他图片未正确拉伸.
这是我的GridView xml文件.如您所见,columnWidth
设置为200dp.我希望它是自动的,所以图片会自动调整每个屏幕尺寸的大小.
<?xml version="1.0" encoding="utf-8"?>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridViewContacts"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="2"
android:columnWidth="200dp"
android:stretchMode="columnWidth"
android:gravity="center" />
Run Code Online (Sandbox Code Playgroud)
这是项目xml文件,它代表每个项目本身.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageViewContactIcon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" />
<LinearLayout
android:id="@+id/linearlayoutContactName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="#99000000"
android:layout_alignBottom="@+id/imageViewContactIcon">
<TextView
android:id="@+id/textViewContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:textSize="15sp"
android:text="Lorem Ipsum" />
<TextView
android:id="@+id/textViewContactNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_marginLeft="5dp"
android:focusable="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:textSize="10sp"
android:text="123456789" />
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
所以我想要的是每行显示两个图像,并且无论屏幕大小如何,图像都会自动调整大小.我在布局上做错了什么?
谢谢.
所以我之前遇到过这个问题,我自然就在这里寻求帮助.Luksprog的答案很棒,因为我不知道ListView和GridView如何通过回收视图优化自身.因此,根据他的建议,我能够改变将Grid添加到GridView的方式.问题是现在我有一些没有意义的事情.这是getView
我的BaseAdapter
:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height …
Run Code Online (Sandbox Code Playgroud) 像以前的人一样,我在GridView项目之间有不必要的重叠:
请注意除最右边的列之外的每个列中的文本.
我与前一个问题的不同之处在于我不想要一个恒定的行高.我希望行高可以变化以适应每行中最高的内容,以有效利用屏幕空间.
查看GridView的源代码(不是权威副本,但kernel.org仍然是down),我们可以在fillDown()和makeRow()中看到最后一个View看到的是"引用视图":行的高度是从视图的高度,而不是最高的视图.这解释了为什么最右边的列没问题.不幸的是,GridView没有很好的设置让我通过继承来解决这个问题.所有相关领域和方法都是私人的.
所以,在我采取"克隆和拥有"这条破旧的臃肿路径之前,我在这里缺少一个技巧吗?我可以使用TableLayout,但这需要我自己实现numColumns="auto_fit"
(因为我想在电话屏幕上只需要一个长列),它也不会是一个AdapterView,这应该是它应该是.
编辑:事实上,克隆和自己在这里不实用.GridView依赖于其父类和兄弟类的不可访问部分,并导致至少导入6000行代码(AbsListView,AdapterView等)
我注意到新的RecyclerView类,虽然它使事情变得更清洁,但缺乏我熟悉的许多功能:
这些是我使用的,但也许还有其他我错过了.
是否有任何教程或一些指导如何替换这些东西?
android android-listview android-gridview android-recyclerview
GridView是一个扩展 AdapterView的类,这意味着它可以有效地显示网格样式的单元格,并在用户滚动时回收旧视图以显示为新视图.
有时,您希望获得一个特殊的UI,它类似于Windows Phone Tiles UI,具有不同大小的单元格.
像这样的东西:
AABB
AACC
AADD
AADD
Run Code Online (Sandbox Code Playgroud)
每个字母代表其细胞的一部分,因此细胞A是2x4,细胞B和细胞C各占2x1,细胞D是2x2.
它可能甚至更多,其中单元格D比我所示的稍微高一点,并且在它下方有另一个单元格,因此D的末端和A的末尾不必对齐.
具有这种风格的应用程序的一个例子是pinterest.
GridView不允许这样的事情.
事实上,我尝试的每个解决方案都有问题.想问一下是否有其他替代品或更好的解决方案.
有多种方法可以解决此问题:
作为扩展AdapterView 的类,GridView可以为每个项目设置一个类型(使用BaseAdapter),这将允许您设置如何布局单元格.
但是,它仍会限制你,因为你会得到一排物品,一个在另一个之下.你必须让它们对齐.
GridLayout是一个相对较新的布局,它非常灵活.谷歌为它发布了一个很好的兼容性库,支持API7及更高版本.
但是,它不使用任何视图的回收,因此如果您希望显示大量项目,这是一个糟糕的选择.
如果您有很多项目,则需要为它们创建所有视图.
QuiltView库 - 从GridLayout扩展,所以基本上有类似的问题.
StaggeredGridView - 看起来最有前途,但有很多错误,特别是在改变方向时.这样的错误包括空单元格,坏滚动和NPE(罕见但仍然发生).我也不确定它是否支持单独使用自定义单元而不是imageView.
其他解决方案,如此处所述.
有谁知道这个问题的另一种替代方案?对于我展示的任何解决方案,可能有一些解决方法吗?
编辑:我认为关于StaggeredGridView,滚动和异常可以通过使用在getView中设置其大小的普通ImageView来解决.我认为它以一种奇怪的方式工作的原因是样本在从互联网加载后更新了imageview的大小.
但是,空单元格问题仍然存在于此库中.不仅如此,即使不改变方向,它们的尺寸也会发生很大变化.
编辑:目前,我认为最好的解决方案是使用 PinterestLikeAdapterView库.
它没有我能找到的任何问题.
但是,它不能使项目占用超过1个单元格宽度.尽管如此,这还是非常好的.
编辑:遗憾的是它与notifyDataSetChanged有问题.我在这里报道了这件事.
android cells android-gridview android-adapterview android-gridlayout
我找不到向GridView行添加外边距的方法.我找到了在GridView行之间添加内部填充的setHorizontalSpacing
和setVerticalSpacing
属性,但它不适用于行的外边框.
我希望得到一个结果,因为它在Google Play商店中有特色:
谢谢!
一个简单的问题:
在ListView
我使用此代码:
list.addHeaderView(headerView);
Run Code Online (Sandbox Code Playgroud)
工作时如何处理gridview
?
谢谢.
如何在我的应用程序中创建这种视图?(截图实际上是Android市场上可用的Android应用程序).
我很困惑,因为我假设我们可以使用Gridview或使用ListView创建相同类型的布局.
从您的专家方面,请建议我为Android应用程序设计和创建相同类型的布局的可能解决方案.