首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

九宫格菜单格局

2012-09-29 
九宫格菜单布局这里要介绍一下制作九宫格菜单的两种方法:第一种就是直接使用布局文件。在ScrollView中嵌套B

九宫格菜单布局

这里要介绍一下制作九宫格菜单的两种方法:

第一种就是直接使用布局文件。在ScrollView中嵌套Button即可,这种做法适用于按钮位置不变,功能固定的情况。

第二种使用的是GridView,通过设置数据源来动态生成布局,这种做法灵活性比较大,适用于功能不固定的情况,比如用户的权限不够的时候,设置某些按钮不可见等。

?

我将这两种做法整理到一个Demo中。下面是效果图:

九宫格菜单格局

?

下面先介绍第一种做法(使用布局文件)的主要代码:

布局文件activity_common.xml

?

CommonActivity.java

?

MainActivity.java

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.TextView;/** * This Five Direction Pad is made by the widget of GridView and Button *  * 这个就宫格菜单采用的是GridView和Button来实现的 *  * @author MichaelYe * @since 2012-9-4 * */public class MainActivity extends Activity {private ViewHolder viewHolder;private final static String STR_WORKBANCH = "工作台";private final static String STR_COMPANY = "公司概况";private final static String STR_ZHIXINLI = "执行力";private final static String STR_MANAGE = "人才管理";private final static String STR_ARCHIVE = "员工档案";private final static String STR_ADDRESS_BOOK = "通讯录";private final static String STR_PLACARD = "公告";private final static String STR_MY_ARCHIVE = "我的档案";private final static String STR_SET = "设置";class ViewHolder{private Button btnLogout;private TextView tvAdd;private GridView gvGridView;}    @Override    public void onCreate(Bundle savedInstanceState)     {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                viewHolder = new ViewHolder();        iniComponent();        viewHolder.gvGridView.setSelector(R.drawable.main_icon_bg_selector);//设置GridView自身的Item点击效果        viewHolder.gvGridView.setAdapter(new GridViewAdapter(stringList));        viewHolder.gvGridView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {Log.e("++++++++++++++++:", ""+position);}});    }        private List<String> stringList;    private void iniComponent()    {    viewHolder.btnLogout = (Button)findViewById(R.id.btn_logout);    viewHolder.tvAdd = (TextView)findViewById(R.id.tv_add);    viewHolder.gvGridView = (GridView)findViewById(R.id.gv_gridview);    viewHolder.btnLogout.setOnClickListener(clickListener);    viewHolder.tvAdd.setOnClickListener(clickListener);        stringList = new ArrayList<String>();    stringList.add("工作台");    stringList.add("公司概况");    stringList.add("执行力");    stringList.add("人才管理");    stringList.add("员工档案");    stringList.add("通讯录");    stringList.add("公告");    stringList.add("我的档案");    stringList.add("设置");    }        private class GridViewAdapter extends BaseAdapter    {    List<String> stringList;    int textColor;    Drawable iconBg;    public GridViewAdapter(List<String> stringList)    {    this.stringList = stringList;    textColor = MainActivity.this.getResources().getColor(R.color.main_button_color);//文字颜色        iconBg = MainActivity.this.getResources().getDrawable(R.drawable.main_icon_bg_normal);//透明背景    }    public int getCount() {return this.stringList.size();}public Object getItem(int position) {return null;}public long getItemId(int position) {return position;}class ViewHolder{private Button btn;}public View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if(convertView == null){//另外一种通过布局文件加载Item的做法//LayoutInflater myInflater = LayoutInflater.from(Act_Main.this);  //            convertView = myInflater.inflate(R.layout.gridview_item, null);//viewHolder = new ViewHolder();//viewHolder.btn = (Button)convertView.findViewById(R.id.button);//convertView.setTag(viewHolder);viewHolder = new ViewHolder();viewHolder.btn = new Button(MainActivity.this);viewHolder.btn.setClickable(false);viewHolder.btn.setFocusable(false);convertView = viewHolder.btn;convertView.setTag(viewHolder);}else{viewHolder = (ViewHolder)convertView.getTag();}String str = this.stringList.get(position);if(str.equals(STR_WORKBANCH)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_workbench),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_WORKBANCH);}if(str.equals(STR_COMPANY)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_company),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_COMPANY);}if(str.equals(STR_ZHIXINLI)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_zxl),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_ZHIXINLI);}if(str.equals(STR_MANAGE)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_manage),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_MANAGE);}if(str.equals(STR_ARCHIVE)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_record),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_ARCHIVE);}if(str.equals(STR_ADDRESS_BOOK)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_addlist),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_ADDRESS_BOOK);}if(str.equals(STR_PLACARD)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_placard),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_PLACARD);}if(str.equals(STR_MY_ARCHIVE)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_myrecord),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_MY_ARCHIVE);}if(str.equals(STR_SET)){viewHolder.btn.setCompoundDrawablesWithIntrinsicBounds(null,MainActivity.this.getResources().getDrawable(R.drawable.main_icon_set),null,null);viewHolder.btn.setBackgroundDrawable(iconBg);viewHolder.btn.setTextColor(textColor);viewHolder.btn.setText(STR_SET);//viewHolder.btn.setOnClickListener(new OnClickListener() {////public void onClick(View v) {//// TODO Auto-generated method stub//Log.e("111111111111111", "");//}//});}return convertView;}        };        private View.OnClickListener clickListener = new View.OnClickListener()     {public void onClick(View v) {switch (v.getId()) {case R.id.btn_logout:Intent intent = new Intent();intent.setClass(MainActivity.this, CommonActivity.class);startActivity(intent);break;case R.id.tv_add:break;}}    };}

?

具体使用哪种可以根据情况而定。

项目下载地址:

https://github.com/michaelye/DemoGridView

热点排行