0 Comments

模拟UCWeb效果菜单(2)

发布于:2012-11-20  |   作者:广州网站建设  |   已聚集:人围观
模拟UCWeb效果菜单(2)

在上面代码中使用了一个GridAdapter类,该类用于向GridView对象提供数据,代码如下:

广州网站建设
  1. package mobile.android.ch06_ucweb.menu;  
  2.  
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.BaseAdapter;  
  8. import android.widget.ImageView;  
  9. import android.widget.TextView;  
  10.  
  11. public class GridAdapter extends BaseAdapter  
  12. {  
  13.     private Context mContext;  
  14.     private LayoutInflater mLayoutInflater;  
  15.     public GridAdapter(Context context)  
  16.     {  
  17.         mContext = context;  
  18.         mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_  
  19.         INFLATER_SERVICE);  
  20.     }  
  21.     @Override  
  22.     public int getCount()  
  23.     {  
  24.         return Const.GRID_ITEM_ICON_ID_LIST.length;  
  25.     }  
  26.     @Override  
  27.     public Object getItem(int position)  
  28.     {  
  29.         // TODO Auto-generated method stub  
  30.         return null;  
  31.     }  
  32.     @Override   
  33.     public long getItemId(int position)  
  34.     {  
  35.         return 0;  
  36.     }  
  37.     @Override  
  38.     public View getView(int position, View convertView, ViewGroup parent)  
  39.     {  
  40.         //  此方法返回一个包含ImageView和TextView的View对象  
  41.         if (convertView == null)  
  42.             convertView = mLayoutInflater.inflate(R.layout.grid_item, null);  
  43.         ImageView ivGridItemIcon = (ImageView) convertView  
  44.                 .findViewById(R.id.ivGridItemIcon);  
  45.         TextView tvGridItemText = (TextView) convertView  
  46.                 .findViewById(R.id.tvGridItemText);  
  47.         //  设置在ImageView对象中显示的图像  
  48.         ivGridItemIcon.setImageResource(Const.GRID_ITEM_ICON_ID_LIST[position]);  
  49.         //  设置在TextView中显示的文本  
  50.         tvGridItemText.setText(Const.GRID_ITEM_TEXT_LIST[position]);  
  51.         return convertView;  
  52.     }  
  53. }  

在使用getView方法返回View对象时要注意,每一个View对象用于显示当前位置(position指定的位置)的内容,对于GridView来说,就是一个单元格。对于ListView来说,就是一个列表项。不过如果每一个单元格或列表项中的控件都一样的话(如本例每一个单元格都只有一个ImageView和TextView),并不需要总是创建新的View对象。getView方法有一个convertView参数,如果该参数不为null,则表示曾经创建的View对象。我们只需要获得这个View对象,并重新设置其中控件的值即可。从这一点可以看出,系统在创建每一个View对象后,并不会释放它们,而是将这些View对象保存了起来。当GridView或ListView进行滚动时,会将这些曾经创建的View对象再次传入getView方法,这样就可以重新利用这些View对象了。通过这种方式可以大大节省系统的资源(虽然Java有垃圾回收机制,但一般只有在系统资源快要耗尽时才会回收不需要的内存资源)。广州网站建设

本例还涉及一些图像文件,并且在Const类中定义了这些图像文件以及相对应的文本,以便在代码中使用它们。Const类的代码如下:

广州网站设计
  1. package mobile.android.ch06_ucweb.menu;  
  2. public class Const  
  3. {  
  4.     public final static int[] GRID_ITEM_ICON_ID_LIST = new int[]  
  5.     { R.drawable.intercept_list, R.drawable.intercept_rule, R.drawable.intercepted_   
  6.     record,   
  7.             R.drawable.location, R.drawable.incoming_and_outgoing_setting,  
  8.             R.drawable.privacy_manager, R.drawable.ip, R.drawable.dial,  
  9.             R.drawable.useful};   
  10.     public final static String[] GRID_ITEM_TEXT_LIST = new String[]  
  11.     { "拦截名单", "拦截规则","拦截记录" , "归属地查询", "来去电设置", "隐私管理", "IP电话设置", "  
  12.     通讯记录", "常用号码"};  
  13. }  

除此之外,本例还涉及两个布局文件popup_window.xml和grid_item.xml,其中popup_window.xml用于弹出窗口的布局,grid_item.xml用于GridView对象中每一个单元格的布局。这两个布局文件的代码如下:

广州网站设计
  1. popup_window.xml  
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <GridView android:id="@+id/gvPopupWindow" 
  4.     xmlns:android="http://schemas.android.com/apk/res/android" 
  5.     android:gravity="center" android:padding="10dp" android:layout_width="fill_parent" 
  6.     android:layout_height="fill_parent" android:horizontalSpacing="10px" 
  7.     android:verticalSpacing="10px" android:stretchMode="columnWidth" 
  8.     androidandroid:columnWidth="80dp"android:numColumns="auto_fit"  android:background="@drawable/popup_window_border"/> 
  9. grid_item.xml  
  10. <?xml version="1.0" encoding="utf-8"?> 
  11. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  12.     android:orientation="vertical" android:layout_width="wrap_content" 
  13.     android:layout_height="wrap_content" android:gravity="center"> 
  14.     <ImageView android:id="@+id/ivGridItemIcon" 
  15.         android:layout_width="50dp" android:layout_height="50dp" /> 
  16.     <TextView android:id="@+id/tvGridItemText" 
  17.         android:layout_width="wrap_content" android:layout_height="wrap_content" android:   
  18.         textColor="#FFF" /> 
  19. </LinearLayout> 

运行本程序,按下"menu"菜单,显示效果如图6.11所示。

图6.11  模拟UCWeb的弹出菜单
飞机