android中四大布局、ListView的用法和理解、RecyclerView的用法和理解、android中碎片的理解和用法
android中的四大布局;
LinearLayout(流式布局) 其中学到layout_weight权重值概念权重值概念relativeLayout(相对布局) 其中layout_alignParentTop/right/left/botton="true"....
layout_above/below="@id/button1" layout_toright/left="@id/button1"
FrameLayout(帧布局) 应用场景太少,基本就是固定模式主要用到gravity(定重心即可)
PercentFrameLayout(百分比布局) 为了解决百分比占用布局的问题而开发出来的,
首先这个需要引库在app/build.gradle文件,dependencies比包下添加内容compile'com.android.support:percent:24.2.1'即可,需要同步一下(Sync Now)
用到layout_gravity、layout_width/heightPercent="40%"来运用百分比。
TableLayout表格布局 AbsoluteLayout绝对布局
可以发现我们再android中使用的空间基本都是直接或者间接继承View的,当然除了自定义控件。
ListView控件:最常用也是最难的控件,主要用于数据的显示(主要是android的屏幕空间能够显示的内容太少了)
ListView用户允许用户上下滑动来展示数据。
通过构建适配器Adapter来构建索要显示的内容最后将适配器设置(ListView.setAdapter(adapter))到listview上去就搭建成功了。
例子:
activity_main.xml
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ldp.com.uicustomerviews.MainActivity">
<!-- <include layout="@layout/title"/> -->
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
fruit_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/fruit_name"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
FruitBean.class
package com.example.ldp.com.bean;
/**
* Created by Administrator on 2017/3/6.
*/
public class FruitBean {
private String name;
private int imageid;
public String getName() {
return name;
}
public FruitBean(String name,int imageid){
this.name = name;
this.imageid = imageid;
}
public int getImageid() {
return imageid;
}
}
FruitAdapter.class
package com.example.ldp.com.bean;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.ldp.com.uicustomerviews.R;
import java.util.List;
/**
* Created by Administrator on 2017/3/6.
*/
public class FruitAdapter extends ArrayAdapter<FruitBean> {
private int resourceId;
public FruitAdapter(Context context, int textViewResourceId, List<FruitBean> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//convertView用于将之前加载好的布局进行缓存,以便可以重用
FruitBean fruit = getItem(position);//获取当前项的fruit实例
View view;
ViewHolder viewholder;
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
viewholder = new ViewHolder();
viewholder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
viewholder.fruitName = (TextView)view.findViewById(R.id.fruit_name);
view.setTag(viewholder);//将viewHolder存储在View中
}else{
view = convertView;//所以当不为空的时候就重用,深化性能
viewholder = (ViewHolder) view.getTag();//重新获取ViewHolder
}
viewholder.fruitImage.setImageResource(fruit.getImageid());
viewholder.fruitName.setText(fruit.getName());
return view;
}
class ViewHolder{
/*第一步是缓存布局converView,第二步是缓存控件,当这个布局存在的情况下
,自然其中的控件也存在就不用每次都通过findViewById来找实例了,通过这两步实现这个ListView性能优化*/
ImageView fruitImage;
TextView fruitName;
}
}
MainActivity.class
package com.example.ldp.com.uicustomerviews;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import