Jeff Lee blog: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks

今天我们来Android UI第二讲:实现DridView的菜单样式

下载链接:

http://files.cnblogs.com/Alandre/AndroidUI2.rar

效果图:

image

第一步:实现Guid Item

首先确定的是,里面有四个元素。每个元素的组合为 图片+文字。所以我们先定义一个xml:

/AndroidUI2/res/layout/main_menu_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" ><ImageView     android:id="@+id/ItemImageView"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_gravity="center"/><TextView     android:id="@+id/ItemTextView"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:gravity="center"/></LinearLayout>

第二步:通过定义的适配器SimpleAdapter 将你需要的Item add进GridView

先在视图中定义GridView:

/AndroidUI2/res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <LinearLayout     android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginLeft="12dp"android:layout_marginRight="12dp"    android:background="@color/white"    android:orientation="horizontal"    android:gravity="top">        <GridView         android:id="@+id/gridview_main_menu"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:columnWidth="90dp"        android:stretchMode="columnWidth"        android:numColumns="4"        android:horizontalSpacing="10dp"        android:gravity="center_horizontal"        >    </GridView>        </LinearLayout></RelativeLayout>

然后Activity核心代码:

package com.example.androidui2;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity{private GridView mainMenuGridView;private int[] mainMenuImageRes = {R.drawable.circle,R.drawable.circle,R.drawable.circle,R.drawable.circle};private String[] mainMenuStrs  = {"拨号","所有联系人","使用说明","退出"};@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mainMenuGridView = (GridView)findViewById(R.id.gridview_main_menu);initView();}// init viewsprivate void initView(){// init main-menu List<HashMap<String, Object>> datas = new ArrayList<HashMap<String,Object>>();int length = mainMenuStrs.length;for (int i = 0; i < length; i++){HashMap<String, Object> map = new HashMap<String, Object>();map.put("ItemImageView", mainMenuImageRes[i]);map.put("ItemTextView", mainMenuStrs[i]);datas.add(map);}SimpleAdapter menuAdapter = new SimpleAdapter(MainActivity.this,datas, R.layout.main_menu_item, new String[]{"ItemImageView","ItemTextView"},new int[]{R.id.ItemImageView,R.id.ItemTextView} );mainMenuGridView.setAdapter(menuAdapter);mainMenuGridView.setOnItemClickListener(new MainMenuItemOnClick());}// Main Menu Item On Click Functionpublic class MainMenuItemOnClick implements OnItemClickListener{/** arg0 : The AdapterView where the click happened  *arg1 : The view within the AdapterView that was clicked*   arg2 : The position of the view in the adapter*arg3 : The row id of the item that was clicked**/public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3){HashMap<String, Object> item = (HashMap<String, Object>)arg0.getItemAtPosition(arg2);if (item.get("ItemTextView").equals(mainMenuStrs[0])){ Toast.makeText(getApplicationContext(), mainMenuStrs[0],                      Toast.LENGTH_SHORT).show();  }if (item.get("ItemTextView").equals(mainMenuStrs[1])){ Toast.makeText(getApplicationContext(), mainMenuStrs[1],                      Toast.LENGTH_SHORT).show();  }if (item.get("ItemTextView").equals(mainMenuStrs[2])){ Toast.makeText(getApplicationContext(), mainMenuStrs[2],                      Toast.LENGTH_SHORT).show();  }if (item.get("ItemTextView").equals(mainMenuStrs[3])){ Toast.makeText(getApplicationContext(), mainMenuStrs[3],                      Toast.LENGTH_SHORT).show();  }}}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

解释:

定义所需要的 item 数组:

private int[] mainMenuImageRes = {R.drawable.circle,R.drawable.circle,R.drawable.circle,R.drawable.circle};private String[] mainMenuStrs  = {"拨号","所有联系人","使用说明","退出"};

初始化用SimpleAdapter添加

SimpleAdapter menuAdapter = new SimpleAdapter(MainActivity.this,datas, R.layout.main_menu_item, new String[]{"ItemImageView","ItemTextView"},new int[]{R.id.ItemImageView,R.id.ItemTextView} );mainMenuGridView.setAdapter(menuAdapter);

然后添加动作的时候,我们巧妙的获取到ItemImageView的值进行判断,然后动作。

HashMap<String, Object> item = (HashMap<String, Object>)arg0.getItemAtPosition(arg2);if (item.get("ItemTextView").equals(mainMenuStrs[0]))

总结

GridView 可以作为平面化菜单的好东西。

更多相关文章

  1. android中checkbox自定义样式
  2. 自定义类似于listView中Item背景
  3. android webview 自定义404错误页面!
  4. 关于android的animation的xml定义中的android:interpolator属性
  5. Android中自定义带图标和清空内容按钮的EditText控件
  6. Android 导航条效果实现(四) ViewPager+自定义导航条
  7. Android 更新升级下载 自定义Updates 兼容版
  8. 【android】checkedTextView形成自定义ListView

随机推荐

  1. Android(安卓)中自定义控件和属性(attr.x
  2. Android中图像变换Matrix的原理、代码验
  3. Android中的线程机制
  4. 亲测Android横竖屏切换小结,带测试结果
  5. addStatesFromChildren 和跑马灯
  6. android中wifi原理及流程分析
  7. view的clickable属性和点击background颜
  8. android testing (一)
  9. Ionic2 在Android设备上的部署
  10. Android倒计时CountDownTimer小记