HorizontalScrollgridview嵌套gridvieww单行滚动的问题.求助

查看: 2229|回复: 10
关于HorizontalScrollView嵌套GridView的问题
签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
在Pad上有一个区域,可以显示和控制楼层的跳转,式样要求动态的加载楼层数据,比如现在如果是10楼,那么会显示两行数据,第一行显示,一楼,二楼,三楼,四楼,五楼,第二行显示,六楼,七楼,八楼,九楼,十楼,但是还有另外一个变态的需求,就是要求每行最多显示三项,最多显示两行,而且可以水平滑动,那么就是说,第一行的四楼,五楼,和第二行的九楼,十楼,是看不到的,通过水平滑动来实现,当然这个10楼也只是举例的数据,也可能是12楼,13楼等等。请各位大侠支招,万分感谢。
附件: 您需要
才可以下载或查看,没有帐号?
签到天数: 19 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
规定GridView的宽度正好显示3个选项,HorizontalScrollView的宽度wrap_content就行了,效果就是HorizontalScrollView有五个选项的宽度但是只显示3个。
那两行怎么控制呢&
签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
规定GridView的宽度正好显示3个选项,HorizontalScrollView的宽度wrap_content就行了,效果就是HorizontalS ...
那两行怎么控制呢
必须要横向滑动吗,如果选项非常多的话是不也需要纵向滑动了,这样的话不如简单点直接设置NumColumns为3列,数据多了GridView会直接加上纵向滚动条的。&
签到天数: 12 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
数据长度除以2不就两行,在设置GridView的列数
列数不固定啊&
签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
数据长度除以2不就两行,在设置GridView的列数
列数不固定啊
列数是不固定啊
不如11个你除以2就是两行了就设置列数为6
这样列数不是固定的啊&
记得设置GridView的android:numColumns。如果需要动态调整就在程序里setNumColumns&
签到天数: 19 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
列数不固定啊
记得设置GridView的android:numColumns。如果需要动态调整就在程序里setNumColumns
签到天数: 12 天连续签到: 1 天[LV.3]偶尔看看II主题帖子e币
列数不固定啊
列数是不固定啊&&不如11个你除以2就是两行了就设置列数为6&&这样列数不是固定的啊
签到天数: 19 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
那两行怎么控制呢
必须要横向滑动吗,如果选项非常多的话是不也需要纵向滑动了,这样的话不如简单点直接设置NumColumns为3列,数据多了GridView会直接加上纵向滚动条的。
需求要求必须是横向滑动啊&
签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I主题帖子e币
必须要横向滑动吗,如果选项非常多的话是不也需要纵向滑动了,这样的话不如简单点直接设置NumColumns为3 ...
需求要求必须是横向滑动啊
那行数固定吗,行数要是也不固定的话,数据量多了必然会有纵向滚动啊。如果可以固定就一行的话就简单了多了。。。动态设置GridView的列数就好了。。。。。。&
签到天数: 19 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
需求要求必须是横向滑动啊
那行数固定吗,行数要是也不固定的话,数据量多了必然会有纵向滚动啊。如果可以固定就一行的话就简单了多了。。。动态设置GridView的列数就好了。。。。。。
签到天数: 137 天连续签到: 47 天[LV.7]常住居民III主题帖子e币
在模拟器上显示,在我手机上面就会一关的重叠
QQ已认证,此人靠谱
社区认证会员
社区认证会员
推荐阅读热门话题
619801806550415409322310265252252248247232223715
半小时前3&小时前3&小时前7&小时前7&小时前8&小时前昨天&23:50昨天&21:38昨天&20:41昨天&18:48昨天&15:11昨天&15:05昨天&12:21昨天&11:54昨天&11:29昨天&11:25
Powered byHorizontalScrollView内嵌套一个gridview的问题
[问题点数:40分,结帖人zy]
HorizontalScrollView内嵌套一个gridview的问题
[问题点数:40分,结帖人zy]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年1月 移动开发大版内专家分月排行榜第二
2014年1月 移动开发大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。HorizontalScrollView嵌套GridView单行滚动的问题.求助_百度知道
HorizontalScrollView嵌套GridView单行滚动的问题.求助
提问者采纳
layout_weight=&horizontal&GridView
android.width = totalWidth:gravity=&quot.width:layout_width=&quot:layout_width=&quot:id=&1;
@null&ImageView
center_vertical&
android,这样排布出来的间距都是很清晰的;
android:orientation=&quot:layout_marginLeft=&transparent& /
5.0dip&quot:layout_marginRight=&quot.0dip&quot&/contact_bottom_mid_add_bg&quot:columnWidth=&quot:scrollbars=&wrap_content&quot,但是每个item之间的间距获取不到阿:fadingEdge=&quot.0dip&
int count =@+id/
LayoutParams params = &gt:layout_height=&
&10:stretchMode=&quot。;40.0dip&
}match_parent&
gV40;HorizontalScrollView@drawable&#47:layout_width=&quot。现在遇到问题了;0;@+id&#47.0dip&&#47,累加重设了gridview的宽度。我想要的效果是添加一项之后小图标就往后退一点,我通过计算算出了item的宽度;
&gt:layout_height=&quot.getLayoutParams();
@android:verticalSpacing=&
totalWidth +=
&lt,到达屏幕宽度的时候就出现滚动条;gv_selected_contacts&
android.下面是我计算的代码;hs_contact_scrollView&10.getCount():layout_width=&quot:id=&quot:scrollbars=& i++) {
View view = adapter, null:layout_height=&
android。;
none&quot。这个是宽度显示不全:horizontalSpacing=&
android。这样计算出来的宽度就有误差了;
LayoutParams params = gV
for (int i = 0;HorizontalScrollView&gt.setLayoutParams(params):layout_height=&quot:fadingEdge=&0dp&quot:numColumns=&
int totalWidth = 0:public static void setGridViewWidth(GridView gView){
ListAdapter adapter = gView:layout_gravity=& i &
android:layout_marginRight=&quot。我怎么也获取不到间距。出现了显示不全的问题;none&
android:layout_gravity=&40;
android,然后再告诉girdview一行有几个子就可以;
android.0&LinearLayout&@+id&#47.getView(i;iv_new_contact&quot。;wrap_content&
android。如果gridview不设置间距又显得太密集。有种方法就是把间距也加进去每一个params.getAdapter():不可以写死gridview宽度:cacheColorHint=&quot:color&#47。.;center&因为我gridview里面的item是动态代码添加的; &#47.0dip&
&wrap_content&quot.0dip&&gt。求助各大神.5dip&quot。。, gView)。;
android:listSelector=&LinearLayout
android.getLayoutParams(),因为我gridview后面跟了一个添加的小图标;9999999&quot,就像scrollview里面嵌套listview一样;none&quot:id=&quot:src=&none&wrap_content&center_vertical&
其他类似问题
为您推荐:
gridview的相关知识
其他1条回答
这太抽象,你倒说说具体什么问题啊
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Android中实现多行、水平滚动的分页的Gridview实例源码
字体:[ ] 类型:转载 时间:
如果单行水平滚动,可以用Horizontalscrollview实现。如果是多行水平滚动,则结合Gridview(一般是垂直滚动的)和Horizontalscrollview实现
功能要求: (1)比如每页显示2X2,总共2XN,每个item显示图片+文字(点击有链接)。 如果单行水平滚动,可以用Horizontalscrollview实现。 如果是多行水平滚动,则结合Gridview(一般是垂直滚动的)和Horizontalscrollview实现。 (2)水平滚动翻页,下面有显示当前页的icon。1.实现自定义的HorizontalScrollView(HorizontalScrollView.java): 因为要翻页时需要传当前页给调用者,所以fling函数中自己实现而不要调用父类的fling。
代码如下: public class DrawerHScrollView extends HorizontalScrollView { private static final String TAG = "DrawerHScrollView"; private IDrawerPresenter drawerPresenter = private int currentPage = 0; private int totalPages = 1; private static Hashtable&Integer, Integer& positionLeftTopOfPages = new Hashtable(); public DrawerHScrollView(Context context) { super(context); } public DrawerHScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public DrawerHScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void cleanup(){ currentPage = 0; totalPages = 1; drawerPresenter = if(positionLeftTopOfPages != null){ positionLeftTopOfPages.clear(); } } public void setParameters(int totalPages, int currentPage, int scrollDisX) { Log.d(TAG, "~~~~~setParameters totalPages:"+totalPages +",currentPage:"+ currentPage +",scrollDisX:"+scrollDisX); this.totalPages = totalP this.currentPage = currentP positionLeftTopOfPages.clear(); for (int i = 0;i&totalPi++){ int posx = (scrollDisX) * positionLeftTopOfPages.put(i, posx); Log.d(TAG, "~~~~~setParameters i:"+i +",posx:"+posx); } smoothScrollTo(0, 0); } public void setPresenter(IDrawerPresenter drawerPresenter ) { this.drawerPresenter = drawerP } @Override public void fling(int velocityX) { Log.v(TAG, "--&fling velocityX:"+velocityX); boolean change_flag = if (velocityX & 0 && (currentPage & totalPages - 1)){ currentPage++; change_flag = } else if (velocityX & 0 && (currentPage & 0)){ currentPage--; change_flag = } if (change_flag){ int postionTo = (Integer)positionLeftTopOfPages.get(new Integer(currentPage)).intValue(); Log.v(TAG, "------smoothScrollTo posx:"+postionTo); smoothScrollTo(postionTo, 0); drawerPresenter.dispatchEvent(totalPages, currentPage); } //super.fling(velocityX); } }
2.布局文件Activity_main.xml:
代码如下: &com.example.multilinegridview.DrawerHScrollView android:id="@+id/hscrollview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:scrollbars="none" android:layout_below="@id/layout_drawer_top" android:layout_above="@id/layout_pagenumber" android:background="#CCCCCC" & &LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" & &GridView android:id="@+id/gridView" android:layout_width="fill_parent" android:layout_height="wrap_content" /& &/LinearLayout& &/com.example.multilinegridview.DrawerHScrollView&
3.IDrawerPresenter接口(IDrawerPresenter.java):
代码如下: public interface IDrawerPresenter { IDrawerPresenter getInstance(); void dispatchEvent(int totalPages, int currentPage); }
4.DrawerItem
代码如下: &LinearLayout xmlns:android="/apk/res/android" android:id="@+id/layout_item" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center" android:background="#FFFFFF"& &ImageView android:id="@+id/ivIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /& &TextView android:id="@+id/tvTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="优惠券1" android:textColor="#000000" android:textStyle="bold"/& &/LinearLayout&
5.MainActivity.java (1)实现IDrawerPresenter接口,在HorizontalScrollView里通过IDrawerPresenter接口来返回当前页,从而更新pageindicator。
代码如下: @Override public IDrawerPresenter getInstance() {
} @Override public void dispatchEvent(int totalPages, int currentPage) { Log.v(TAG, "~~~~dispatchEvent currentPage:" + currentPage); Message msg = Message.obtain(); msg.what = MSG_DRAWER_UPDATE_PAGE_LAYOUT; msg.arg1 = totalP msg.arg2 = currentP handler.sendMessage(msg); }
(2)PageItemImageView和page indicator的更新 PageItemImageView显示normal的page indicator,之后再将当前页的图片换成selected。
代码如下: protected class PageItemImageView extends ImageView { public PageItemImageView(Context context) { super(context); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_page_normal); this.setImageBitmap(bitmap); } } public void updateDrawerPageLayout(int total_pages, int sel_page) { Log.e(TAG, "~~~updateBooksPageLayout total_pages:"+total_pages+",sel_page:"+sel_page); layout_pagenumber.removeAllViews(); if (total_pages &= 0 || sel_page & 0 || sel_page &= total_pages){ Log.e(TAG, "total_pages or sel_page is outofrange.");
} for (int i = 0;i& total_i++){ if (i != 0){ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(5, 0, 0, 0); layout_pagenumber.addView(new PageItemImageView(this), params); } else { layout_pagenumber.addView(new PageItemImageView(this)); } } PageItemImageView selItem = (PageItemImageView) layout_pagenumber.getChildAt(sel_page); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_page_selected); selItem.setImageBitmap(bitmap); }
(3)DrawerListAdapter
代码如下: private class DrawerListAdapter extends BaseAdapter { private final String TAG = "MyListAdapter"; private LayoutInflater mI private LinearLayout layout_ private TextView tvT private ImageView ivI private final C private int colW private int colH public DrawerListAdapter(Context context, int colWid, int colHei) { this.context = this.colWid = colW this.colHei = colH mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return drawerItemList.size(); } public Object getItem(int position) { return drawerItemList.get(position); } public long getItemId(int position) {
} public View getView(int position, View convertView, ViewGroup parent) { DrawerItem item = drawerItemList.get(position); if (convertView == null) { convertView = mInflater.inflate(R.layout.drawer_item, null); layout_item = (LinearLayout) convertView .findViewById(R.id.layout_item); ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); tvTitle = (TextView) convertView.findViewById(R.id.tvTitle); if (colHei != 0 && colWid != 0) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( colWid, colHei - 30); ivIcon.setLayoutParams(params); } convertView.setTag(layout_item); } else { layout_item = (LinearLayout) convertView.getTag(); } ivIcon.setImageResource(R.drawable.ic_launcher); tvTitle.setText(String.valueOf(position)); return convertV } }
(4)DrawerItemClickListener: 实现OnItemClickListener。 (5) updateDrawerLayout 获得data的size后,可以算出列数来得到固定行。 intnumCols = (drawerItemList.size() - 1) / 2 + 1 再算出gridview的width。因每页可显示2列,最后一页可能右侧没有,为了翻页顺滑,可以给gridview增加一列空白。 intgridViewWid = numCols * colWid + (numCols + 1) * if(numCols % 2 == 1){ gridViewWid+= colWid + }
代码如下: public void updateDrawerLayout() { if ((drawerItemList == null) || (drawerItemList.size() == 0)) { Log.d(TAG, "itemList is null or empty");
} if (!hasMeasured){ Log.d(TAG, "hasMeasured is false");
} int scrollWid = hscrollview.getWidth(); int scrollHei = hscrollview.getHeight(); if (scrollWid &= 0 || scrollHei &= 0){ Log.d(TAG, "scrollWid or scrollHei is less than 0");
} int spaceing = 10; int colWid = (scrollWid - spaceing * 3) / 2; int colHei = (scrollHei - spaceing * 3) / 2; int numCols = (drawerItemList.size() - 1) / 2 + 1; int gridViewWid = numCols * colWid + (numCols + 1) * // if numCols is odd (like 5), add blank space if (numCols % 2 == 1){ gridViewWid += colWid + } LayoutParams params = new LayoutParams(gridViewWid, scrollHei); gridView.setLayoutParams(params); gridView.setColumnWidth(colWid); gridView.setHorizontalSpacing(spaceing); gridView.setVerticalSpacing(spaceing); gridView.setStretchMode(GridView.NO_STRETCH); gridView.setNumColumns(numCols); adapter = new DrawerListAdapter(this, colWid, colHei); listener = new DrawerItemClickListener(); gridView.setAdapter(adapter); gridView.setOnItemClickListener(listener); int pageNum = (drawerItemList.size() - 1) / 4 + 1; hscrollview.setParameters(pageNum, 0, scrollWid - spaceing); updateDrawerPageLayout(pageNum, 0); }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 horizontalgridview 的文章

 

随机推荐