您的位置:首页 > 其它

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

2015-04-29 21:09 375 查看
前面说完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方法中就要进行寻找控件,写点击事件的逻辑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: