安卓開發小練手之手機衛士開發(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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章