读书人

课表_android创新班作业

发布时间: 2012-11-07 09:56:10 作者: rapoo

课程表_android创新班作业

作业要求是用tab和grid做一个课程表app,而且要在grid下显示一个虚拟时钟,要求比较简单而且自由,我自己加了些其他功能进去,这次自我学习让我学习到了很多东西,包括动态生成UI等的实现方法,效率方面是我编程生涯一直以来时刻都在考虑的东西,这次的代码也能很好的体现出来,当然里面的TextView控件可以控制在一个tab内的级别,由于有些疏懒而直接把所有Grid内的TextView都独立出来了.


界面视图:

(虚拟机下)

课表_android创新班作业

课表_android创新班作业


(实机测试)

课表_android创新班作业



MainActivity代码:

package com.fp.homework2;import android.os.Bundle;import android.app.AlertDialog;import android.app.TabActivity;import android.widget.BaseAdapter;import android.widget.TabHost;import android.widget.TextView;import android.widget.GridView;import android.widget.AnalogClock;import android.widget.LinearLayout;import android.widget.Toast;import android.widget.EditText;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.Gravity;import android.content.DialogInterface;import android.content.SharedPreferences;  import android.content.SharedPreferences.Editor;  public class MainActivity extends TabActivity implements TabHost.TabContentFactory {private TabHost tabHost;private GridView grid;@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                getGridTextViews();        tabHost = getTabHost();        tabHost.addTab(tabHost.newTabSpec("tab1")                .setIndicator("星期一", getResources().getDrawable(R.drawable.star_big_on))                .setContent(this));        tabHost.addTab(tabHost.newTabSpec("tab2")                .setIndicator("星期二", getResources().getDrawable(R.drawable.star_big_on))                .setContent(this));        tabHost.addTab(tabHost.newTabSpec("tab3")                .setIndicator("星期三", getResources().getDrawable(R.drawable.star_big_on))                .setContent(this));        tabHost.addTab(tabHost.newTabSpec("tab4")                .setIndicator("星期四", getResources().getDrawable(R.drawable.star_big_on))                .setContent(this));        tabHost.addTab(tabHost.newTabSpec("tab5")                .setIndicator("星期五", getResources().getDrawable(R.drawable.star_big_on))                .setContent(this));                Toast.makeText(MainActivity.this, "点击可修改具体课程",Toast.LENGTH_SHORT).show();            } @Override  protected void onDestroy() { saveToFile(); Toast.makeText(MainActivity.this, "已保存课表信息",Toast.LENGTH_SHORT).show(); super.onDestroy();  }  public void saveToFile(){SharedPreferences preferences = getSharedPreferences("classinfo",0);        Editor edit=preferences.edit();        for(int i=0;i<5;i++)        {        for(int j=0;j<35;j++)        {        if(((j>5)&&(j<9))||((j>10)&&(j<14))||((j>15)&&(j<19))||((j>20)&&(j<24))||((j>25)&&(j<29))||((j>30)&&(j<34)))        {        if(tv[i][j].getText().toString()!="点击添加")        edit.putString(i+","+j, tv[i][j].getText().toString());        }        }        }        edit.commit();  }//创建用于网格视图的TextViewspublic TextView tempview;private void getGridTextViews(){tv = new TextView[5][35];SharedPreferences preferences = getSharedPreferences("classinfo",0);View.OnTouchListener tl = new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if(event.getAction()==MotionEvent.ACTION_DOWN){v.setBackgroundColor(0xffCDCDFF);}elsev.setBackgroundColor(0xffffffff);return false;}};View.OnClickListener cl = new View.OnClickListener() {@Overridepublic void onClick(View v) {tempview = (TextView)v;LinearLayout ll = new LinearLayout(MainActivity.this);TextEntry = new EditText(MainActivity.this);TextEntry.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));ll.addView(TextEntry);new AlertDialog.Builder(MainActivity.this).setTitle("请输入").setView(ll).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {tempview.setText(TextEntry.getText().toString());tempview.setTextColor(0xff000000);tempview.setTextSize(15);}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {}}).create().show();}};        for(int i=0;i<5;i++)        {        int constrid = 0;        for(int j=0;j<35;j++)        {        tv[i][j] = new TextView(this);                tv[i][j].setGravity(Gravity.CENTER);        tv[i][j].setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.FILL_PARENT, 100));        tv[i][j].setBackgroundColor(0xffffffff); //设置背景颜色                if(((j>5)&&(j<9))||((j>10)&&(j<14))||((j>15)&&(j<19))||((j>20)&&(j<24))||((j>25)&&(j<29))||((j>30)&&(j<34)))        {        //从配置文件中读取储存的信息        String pstr = preferences.getString(i+","+j, "");            if(pstr!="")                    {            tv[i][j].setText(pstr);            tv[i][j].setTextColor(0xff000000);            tv[i][j].setTextSize(15);                    }                    else                    {                    tv[i][j].setText("点击添加");                    tv[i][j].setTextColor(0xffdcdcdc);                    tv[i][j].setTextSize(10);                    }                    //响应触摸事件        tv[i][j].setOnTouchListener(tl);        //响应click事件        tv[i][j].setOnClickListener(cl);        }        else        {        tv[i][j].setText(constr[constrid]);        tv[i][j].setTextColor(0xff000000);        tv[i][j].setTextSize(15);        constrid++;        }                }        }}    public int gettab(String tab) {if(tab=="tab1")        return 0;        else if(tab=="tab2")        return 1;        else if(tab=="tab3")        return 2;        else if(tab=="tab4")        return 3;        else if(tab=="tab5")        return 4;return -1;}public int temptab,tempposition;public EditText TextEntry;    public View createTabContent(String tab) {        grid = new GridView(this);        grid.setNumColumns(5);        grid.setBackgroundColor(0xffDCDCDC);        grid.setHorizontalSpacing(1);        grid.setVerticalSpacing(1);        temptab = gettab(tab);        grid.setAdapter(new TextAdapter());                AnalogClock dc = new AnalogClock(this);        dc.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));//创建线性布局LinearLayout ll = new LinearLayout(this);ll.setOrientation(LinearLayout.VERTICAL);ll.setHorizontalGravity(Gravity.CENTER);ll.addView(grid);ll.addView(dc);        return ll;    }        //自定义配适器    public class TextAdapter extends BaseAdapter {        public TextAdapter() {        }        public int getCount() {            return 35;        }        public Object getItem(int position) {            return position;        }        public long getItemId(int position) {            return position;        }        public View getView(int position, View convertView, ViewGroup parent) {            return tv[temptab][position];        }    }        public TextView[][] tv;    public String[] constr = {    "节次","课程名称","周次","上课地点","上课时间",    "第一大节","8:30-10:05",    "第二大节","10:25-12:00",    "第三大节","13:50-15:25",    "第四大节","15:45-17:20",    "第五大节","18:20-19:55",    "第六大节","20:00-20:45"    };}

源码下载:http://dl.vmall.com/c03wzyimgy

读书人网 >Android

热点推荐