android stdio 1

来源:互联网 发布:淘宝店铺橱窗位在哪 编辑:程序博客网 时间:2024/05/24 03:45

 Android控件GridView之仿支付宝钱包首页带有分割线九宫格实现

代码清晰,分包来实现。解耦。。




MainActivity的布局

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent"  
  4.     android:orientation="vertical" >  
  5.      
  6.      <ScrollView  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:fillViewport="true"  
  10.         android:scrollbars="none" >  
  11.   
  12.         <com.finddreams.alipay.MyGridView  
  13.             android:id="@+id/gridview"  
  14.             android:layout_width="fill_parent"  
  15.             android:layout_height="wrap_content"  
  16.             android:horizontalSpacing="0.0dip"  
  17.             android:listSelector="@null"  
  18.             android:numColumns="3"  
  19.             android:scrollbars="none"  
  20.             android:stretchMode="columnWidth"  
  21.             android:verticalSpacing="0.0dip" />  
  22.     </ScrollView>  
  23.   
  24. </LinearLayout>  

当gridView或listView被srollview嵌套时,只会显示第一行数据,这时

  1. public class MyGridView extends GridView {  
  2.     public MyGridView(Context context, AttributeSet attrs) {  
  3.         super(context, attrs);  
  4.     }  
  5.   
  6.     public MyGridView(Context context) {  
  7.         super(context);  
  8.     }  
  9.   
  10.     public MyGridView(Context context, AttributeSet attrs, int defStyle) {  
  11.         super(context, attrs, defStyle);  
  12.     }  
  13.   
  14.     @Override  
  15.     public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  16.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  17.                 MeasureSpec.AT_MOST);  
  18.         super.onMeasure(widthMeasureSpec, expandSpec);  
  19.     }  
  20.       
  21.       
  22. }  

重写onMeasure方法。。。。解决。。。

定义item分割线背景布局在drawable下selector.xml。


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  3.   
  4.     <item android:state_pressed="true"><shape android:shape="rectangle">  
  5.             <stroke android:width="1.0px" android:color="@color/line" />  
  6.   
  7.             <gradient android:angle="270.0" android:endColor="#ffe8ecef" android:startColor="#ffe8ecef" />  
  8.         </shape></item>  
  9.     <item android:state_focused="true"><shape android:shape="rectangle">  
  10.             <gradient android:angle="270.0" android:endColor="#ffe8ecef" android:startColor="#ffe8ecef" />  
  11.   
  12.             <stroke android:width="1.0px" android:color="@color/line" />  
  13.         </shape></item>  
  14.     <item><shape android:shape="rectangle">  
  15.             <gradient android:angle="270.0" android:endColor="#ffffffff" android:startColor="#ffffffff" />  
  16.   
  17.             <stroke android:width="1.0px" android:color="@color/line" />  
  18.         </shape></item>  
  19.   
  20. </selector> 

item_gridView布局


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:layout_margin="0.0dip"  
  6.     android:background="@color/griditems_bg" >  
  7.   
  8.     <RelativeLayout  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:layout_centerInParent="true"  
  12.         android:background="@drawable/bg_gv"  
  13.         android:padding="12.0dip" >  
  14.   
  15.         <ImageView  
  16.             android:id="@+id/iv_item"  
  17.             android:layout_width="58.0dip"  
  18.             android:layout_height="58.0dip"  
  19.             android:layout_centerHorizontal="true"  
  20.             android:contentDescription="@string/app_name" />  
  21.   
  22.         <TextView  
  23.             android:id="@+id/tv_item"  
  24.             android:layout_width="wrap_content"  
  25.             android:layout_height="wrap_content"  
  26.             android:layout_below="@id/iv_item"  
  27.             android:layout_centerHorizontal="true"  
  28.             android:layout_marginTop="5.0dip"  
  29.             android:maxLines="1"  
  30.             android:textColor="@color/commo_text_color"  
  31.             android:textSize="14.0sp" />  
  32.     </RelativeLayout>  
  33.   
  34. </RelativeLayout>  

其中第一个relativelayout的background为灰色,第二个为selector.xml。。。

其中ViewHolder优化


public View getView(int position, View convertView, ViewGroup parent) {    ViewHolder holder = null;    //如果缓存convertView为空,则需要创建View    if(convertView == null)    {        holder = new ViewHolder();        //根据自定义的Item布局加载布局        convertView = LayoutInflater.from(context).inflate(R.layout.item_gridview, null);        holder.img = (ImageView)convertView.findViewById(R.id.iv_item);        holder.title = (TextView)convertView.findViewById(R.id.tv_item);        //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag        convertView.setTag(holder);    }else    {        holder = (ViewHolder)convertView.getTag();    }    holder.img.setBackgroundResource(imgs[position]);    holder.title.setText(img_text[position]);    return convertView;}

ViewHolder代码简单

public  class ViewHolder{    public ImageView img;    public TextView title;}














0 0