前面說完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方法中就要進行尋找控件,寫點擊事件的邏輯