安卓开发小练手之手机卫士开发(2)——主界面

前面说完Splash界面,接下来就是主界面,可以使用ListView或者GridView进行加载,其实ListView就是一种特殊的GridView,因为GrideView可以指定一行中可以放置多少个,现在我们采用一行三列的方式,首先还是老规矩,新建Activity,注册,new布局文件
第一步,先从布局文件开始
布局文件我们做的很简单,只有一个标题栏,然后就是一个GridView,指定高度宽度,设置一行是几个格子,android:numColumns=”3”,其他的照常,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="@drawable/bigwhite_4"
    android:orientation="vertical"
    tools:context=".ui.MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/titilecolor"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <TextView
            style="@style/text_title"
            android:gravity="center_horizontal"
            android:text="手机卫士" />
    </LinearLayout>

    <GridView
        android:id="@+id/gv_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
       <!--设置一行中的列数-->
        android:numColumns="3" >
    </GridView>

</LinearLayout>

由于我们在GridView中还要设置里面的item的内容,待会使用Adapter取数据的时候可以用到,所以我们还需要定义GridView中的item的样式,同样是新建一个XML文件,上面是一个ImageView,下面是一个TextView,待会可以进行加载的时候可以用到,代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="240dp"
    android:layout_height="240dp"
    android:layout_marginTop="10dp"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" >

    <ImageView
        android:id="@+id/iv_item_icon"
        android:layout_width="100dp"
        android:layout_height="90dp"
        android:paddingLeft="10dp"
        android:scaleType="fitXY" />

    <TextView
        android:id="@+id/tv_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="15dp"
        android:layout_marginLeft="28dp"
        android:textColor="#ffCCBD00"
        android:textSize="16sp" />

</LinearLayout>

第二步,接下来是主界面的Activity的代码编辑,在这里只是一个将item在GridView进行展示而已,思路如下,首先我们可以找到布局文件中的LinearLayout的GridView,给GridView设置适配器Adapter,这里我们采用的是中等复杂的继承自BaseAdapter的Adapter,代码基本框架如下

package developer.yupeibiao.mobilesafe.ui;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

import developer.yupeibiao.mobilesafe.R;
import developer.yupeibiao.mobilesafe.adapter.MainUiAdapter;

public class MainActivity extends Activity implements OnItemClickListener  {
    private GridView gv_main;
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        gv_main=(GridView) findViewById(R.id.gv_main);
        gv_main.setAdapter(new MainUiAdapter(this));
        gv_main.setOnItemClickListener(this);
    }
    //设置点击启动的界面
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        switch (position) {
        case 0:
            Intent intent=new Intent(this,LoadprotectActivity.class);
            startActivity(intent);
            break;
        case 1:
            Intent intent_blackNumber=new Intent(this,SafeNumberActivity.class);
            startActivity(intent_blackNumber);
            break;
        case 2:
            Intent intent_appmanager=new Intent(this,AppManagerActivity.class);
            startActivity(intent_appmanager);
            break;
        case 3:
            Intent intent_taskmanager=new Intent(this,TaskManagerActivity.class);
            startActivity(intent_taskmanager);
            break;
        case 4:
            Intent intent_flowmanager=new Intent(this,FlowManagerActivity.class);
            startActivity(intent_flowmanager);
            break;
        case 5:
            Intent intent_virus=new Intent(this,VirusProtectingActivity.class);
            startActivity(intent_virus);
            break;
        case 6:
            Intent intent_advanced=new Intent(this,NumberAddressQueryActivity.class);
            startActivity(intent_advanced);
            break;
        case 7:
            Intent intent_soft=new Intent(this,SoftAllActivity.class);
            startActivity(intent_soft);
            break;
        case 8:
            Intent intent_about_soft=new Intent(this,AboutSoftActivity.class);
            startActivity(intent_about_soft);
            break;

        }

    }


}
//适配器的代码
package developer.yupeibiao.mobilesafe.adapter;

import java.util.zip.Inflater;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import developer.yupeibiao.mobilesafe.R;

public class MainUiAdapter extends BaseAdapter {
    private Context context;
    private LayoutInflater inflater;
     public MainUiAdapter(Context context) {
        super();
        this.context = context;
        inflater=LayoutInflater.from(context);
    }

    public String [] names={"手机防盗","通讯卫士","软件管理","任务管理",
    "上网管理","手机杀毒","归属查询","软件推荐","关于软件"};
    //我们的图标资源文件是放在drawable文件夹下面的,会自动生成id
    public static int[] icons={R.drawable.protect_1,R.drawable.address_2,R.drawable.software_3,R.drawable.soft_4,R.drawable.globe_8,
     R.drawable.antivirus_6,R.drawable.home_7,R.drawable.store_8,R.drawable.about_9};

    public int getCount() {
        // TODO Auto-generated method stub
        return names.length;
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View view=inflater.inflate(R.layout.main_screen_item,null);
        TextView tv_icon=(TextView) view.findViewById(R.id.tv_item_icon);
        ImageView iv_icon=(ImageView) view.findViewById(R.id.iv_item_icon);
        tv_icon.setText(names[position]);
        iv_icon.setImageResource(icons[position]);
        return view;
        /*第二种方式,我们可以对内存进行优化,上面的代码很容易产生垃圾,会让虚拟机的垃圾回收机制很累
        View view;
        if(convertView!=null&&convertView instanceof LinearLayout){
        //如果回收了一个view,我们可以进行复用
        view=convertView;
        }else{
        view=View.inflate(this,R.layout.main_screen_item,null);
        }*/

    }

}

这样我们就完成了主界面的设定,并且给每一个item设置点击事件,通过给GridView设置点击监听,通过setOnItemClickListener();
在界面有多个控件可以进行点击的时候,为了方便我们给他们增加点击事件,我们可以通过判断id的点击事件进行判断,进而知道是触发哪个事件,利用switch语句
总结:1、GridView增加点击事件的方法是setOnItemClick(),复写其中的click方法
2、GridView进行界面的加载,我们使用一个适配器Adapter,复写适配器里面的方法
3、复写适配器getView方法的时候,为了提高程序的流畅,我们使用判断convertView是否为空的方式进行判断,如果为空,那么就new一个view对象出来,如果不为空的话,也就是有待回收的view对象,我们就可以使用view复用的方法进行重新包装成我们要的view对象
4、注意,如果是要在条目中的某一个控件增加点击事件,我们在getView方法中就要进行寻找控件,写点击事件的逻辑

发布了32 篇原创文章 · 获赞 1 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章