仿QQ临时群组成员界面GridView的使用
来源:互联网 发布:网络歌手大赛 编辑:程序博客网 时间:2024/06/02 23:45
这几天在做一个临时群组的功能,看见QQ的临时群组的界面的功能和我想做的几乎差不错,于是抄起来吧。刚开始一直纠结在TableLayout和TableRow
中,但是一直无法实现类型下面的效果:
上图的效果为:左右距离边框的距离是相等的(这个是比较容易实现的),但是无法实现每个ITem之间的距离等距,尝试了很多办法,还是无法完全实现
上面相同的效果(还是发散思维不好啊,应该早就想到了GridView了),后来将QQ的所有讨论组相关的xml文件全部找出来,然后反编译出来,终于找到
了这个界面的xml文件:chat_option_discussioninfo.xml,反编译后我们能够看见他们的布局架构(只贴出了部分xml代码)
<com.tencent.mobileqq.customviews.NonFocusingScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@7F0902A8"android:layout_width="-1"android:layout_height="-2"><LinearLayoutandroid:orientation="1"android:id="@7F090093"android:layout_width="-1"android:layout_height="-2"><RelativeLayoutandroid:layout_width="-1"android:layout_height="-1"android:layout_marginLeft="0.0dip"android:layout_marginTop="15.0dip"android:layout_marginRight="0.0dip"><com.tencent.mobileqq.widget.MyGridViewandroid:gravity="0x00000011"android:id="@7F0902A9"android:paddingLeft="10.0dip"android:paddingTop="20.0dip"android:paddingRight="10.0dip"android:paddingBottom="20.0dip"android:scrollbars="0x00000000"android:layout_width="-1"android:layout_height="-1"android:listSelector="@7F0A002A"android:horizontalSpacing="3.0dip"android:verticalSpacing="15.0dip"android:stretchMode="1"android:columnWidth="66.0dip"android:numColumns="-1"></com.tencent.mobileqq.widget.MyGridView></RelativeLayout><RelativeLayoutandroid:id="@7F0902AA"android:background="@7F02022F"android:layout_width="-1"android:layout_height="44.0dip"android:layout_marginLeft="0.0dip"android:layout_marginTop="15.0dip"android:layout_marginRight="0.0dip"><TextViewandroid:id="@7F0900B0"android:duplicateParentState="true"android:layout_width="-2"android:layout_height="-2"android:layout_marginLeft="10.0dip"android:text="@7F0C0A88"android:layout_alignParentLeft="true"android:layout_centerVertical="true"style="@7F0D007F"></TextView><TextViewandroid:gravity="0x00000005"android:id="@7F0902AB"android:duplicateParentState="true"android:layout_width="-2"android:layout_height="-2"android:layout_marginLeft="30.0dip"android:layout_marginRight="26.0dip"android:singleLine="true"android:layout_toRightOf="@7F0900B0"android:layout_alignParentRight="true"android:layout_centerVertical="true"style="@7F0D008C"></TextView><ImageViewandroid:duplicateParentState="true"android:layout_width="-2"android:layout_height="-2"android:layout_marginRight="10.0dip"android:src="@7F0201F4"android:layout_alignParentRight="true"android:layout_centerVertical="true"></ImageView></RelativeLayout>
我们可以看见这个xml文件开头的控件就是一个自定义的GridView控件,于是果断转向GridView,基本的边距也根据他的文件去设计(他这个边距,长宽
高设计肯定是经过精心设计的,为什么不跟随他呢),于是我马上使用GridView,由于使用了SrollView和GridView,出现下面这样的警告:
The vertically scrolling ScrollView should not contain another vertically scrolling widget (GridView)
查了一下,引起这个警告的原因是:一个页面中放置了两个滚动控件,系统无法判断该那个控件获取滚动焦点。于是只有自定义GridView,正好我们能够
看见QQ的这个控件也是自定义的。并且由于GridView只显示部分,不是显示所有的子控件。
public class MyGridView extends GridView{ public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if(ev.getAction() == MotionEvent.ACTION_MOVE){ return true; //forbid its child(gridview) to scroll}return super.dispatchTouchEvent(ev);}}
然后在xml中引入此控件,定义其属性:
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10.0dp" android:layout_marginRight="10.0dp" android:layout_marginTop="15.0dp" android:background="@drawable/bg_list_border_whitebg"> <italkie.phoenix.view.MyGridView android:id="@+id/temp_group_members" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="#00000000" android:horizontalSpacing="20.0dp" android:verticalSpacing="10.0dp" android:paddingLeft="10.0dip"android:paddingTop="20.0dip"android:paddingRight="10.0dip"android:paddingBottom="20.0dip" android:numColumns="5" android:dividerHeight="0.5dip" android:scrollbars="none"> </italkie.phoenix.view.MyGridView></RelativeLayout>
设置好子控件距离内边距的距离,重写dispatchTouchEvent方法禁止其子控件滚动,这样GridView就完美的嵌套在ScrollView中了,并且外边距以及内边
距和QQ的一样。
- 仿QQ临时群组成员界面GridView的使用
- 仿qq界面的实现
- 仿QQ界面的切换
- android仿QQ的UI界面
- 基于JAVA的界面开发:仿QQ
- 仿QQ登录界面的QComboBox
- 界面超级华丽的仿QQ项目
- 仿QQ概念版的登陆界面
- Android 仿QQ界面的实现
- 高仿QQ运动的周报界面
- 仿QQ界面
- 仿腾讯QQ界面
- 仿qq登录界面
- 仿qq界面
- 仿qq登陆界面
- android 仿QQ界面
- 仿qq聊天界面
- Fragment仿qq界面
- 存储之直连存储Dell Powervault MD 3000
- MathMemo
- 能上QQ无法上网
- SQL中关于select
- 飞机大战小游戏
- 仿QQ临时群组成员界面GridView的使用
- 编程之美 2014 格格取数(最小费用最大流)
- Java设计模式之从[打飞机游戏中的控制器]分析命令(Command)模式
- nginx log 记录请求的头信息
- SQL语句
- UML简说——类图
- Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)
- JSP/Servlet文件上传下载
- 发布的Qt工程无法显示图标和图片的问题