- 显示主界面
res/layout目录下新建activity_main.xml布局,代码如下:
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="@drawable/bg_animal" >
<TabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</FrameLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
</LinearLayout>
</TabHost>
</RelativeLayout>
效果图:
在activity包下建立MainActivity继承Activity,代码如下:
public class MainActivity extends TabActivity {
private TabHost tabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//取消标题栏
setContentView(R.layout.activity_main);
tabHost=getTabHost();
addTab("study",R.string.title_study,R.drawable.search,StudyActivity.class);
addTab("search",R.string.title_search,R.drawable.search,StudyActivity.class);
addTab("game",R.string.title_game,R.drawable.game,StudyActivity.class);
addTab("save",R.string.title_save,R.drawable.save,StudyActivity.class);
addTab("help",R.string.title_help,R.drawable.search,StudyActivity.class);
}
private void addTab(String tag,int title_introduction, int title_icon,Class ActivityClass){
tabHost.addTab(tabHost.newTabSpec(tag)
.setIndicator(getString(title_introduction),
getResources().getDrawable(title_icon)).setContent(new Intent(this,ActivityClass)));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
TabHost介绍
TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计;
1. TabHost常用组件
TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;
TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中;
– 创建选项卡 : newTabSpec(String tag), 创建一个选项卡;
– 添加选项卡 : addTab(tabSpec);
出现的错误:
我一开始是在AndroidManifest.xml中使用
android:theme=”@android:style/Theme.NoTitleBar”
之后仔细查了查意思是:背景主题的没有标题栏的样式,默认如果没有设置的话,显示黑背景
解决这样的问题:
那就换成android:theme=”@android:style/Theme.Translucent.NoTitleBar
详细介绍请看http://blog.csdn.net/zhupengqq/article/details/51472682
效果图:
- 显示学习列表
定义一个实体类,作为ListView适配器的适配类型,entity包下新建类Category,代码如下:
public class Category {
private String name;//类别名称
private int imageid;//类别对应的图片
public Category(String name, int imageid) {
super();
this.name = name;
this.imageid = imageid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageid() {
return imageid;
}
public void setImageid(int imageid) {
this.imageid = imageid;
}
}
在layout下新建activity_study.xml文件 ,代码如下:
<RelativeLayout 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/bg_ling"
tools:context=".StudyActivity" >
<ListView
android:id="@+id/lvCategories"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/anim_layout_listview"
android:listSelector="#00000000"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" >
</ListView>
</RelativeLayout>
接着需要为ListView的子项指定一个自定义的布局,category_item.xml,代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/category_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/category_animal" />
<TextView
android:id="@+id/category_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="vb"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</LinearLayout>
接下来需要在应用的包下创建一个自定义适配器,新建CategoryAdapterLei 类,代码如下:
public class CategoryAdapter extends ArrayAdapter<Category>{
private int resourceid;
public CategoryAdapter(Context context, int resource,
List<Category> objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
resourceid=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder viewHolder;
Category category=getItem(position);//获取当前项的Category的当前示例
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceid, null);
viewHolder=new ViewHolder();
viewHolder.categoryImage=(ImageView) view.findViewById(R.id.category_image);
viewHolder.categoryName=(TextView) view.findViewById(R.id.category_name);
view.setTag(viewHolder);
}
else{
view=convertView;
viewHolder=(ViewHolder)view.getTag();//重新获得viewHolder
}
viewHolder.categoryImage.setImageResource(category.getImageid());
viewHolder.categoryName.setText(category.getName());
return view;
}
class ViewHolder{
ImageView categoryImage;
TextView categoryName;
}
}
下面在activity包下新建StudyActivity,代码如下:
public class StudyActivity extends Activity {
private List<Category> categoryList;
private String [] category_names;
private int [] category_images;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_study);
initCategories();//初始化类别
CategoryAdapter adapter=new CategoryAdapter(this,R.layout.category_item,categoryList );
ListView listView=(ListView) findViewById(R.id.lvCategories);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
switch (position) {
case 0:
Intent intent=new Intent(StudyActivity.this,StudyAnimalActivity.class);
startActivity(intent);
break;
default:
break;
}
}
});
}
private void initCategories() {
categoryList=new ArrayList<Category>();
Resources resources=getResources();
category_names=resources.getStringArray(R.array.category);
category_images=new int[]{R.drawable.category_animal,
R.drawable.category_nature,R.drawable.category_human,
R.drawable.category_season,R.drawable.category_number,
R.drawable.category_fable,R.drawable.category_other};
for(int i=0;i<category_names.length;i++){
categoryList.add(new Category(category_names[i],category_images[i]));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.study, menu);
return true;
}
}
页面的载入还有些僵硬,下面添加动态效果:
anim_listview.xml:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromAlpha="0.0"
android:toAlpha="1.0"
>
</alpha>
anim_layout_listview.xml:
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/anim_listview"
android:animationOrder="reverse"
android:delay="30%"
>
</layoutAnimation>
整体效果图: