行接触这些东西,有很多理解不到位,感觉自己像个蜗牛一样,哎,弄吧弄吧。
ListView
引用点击打开链接
ListView,以列表的形式来展示
列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
看一个简单的demo(以ArrayAdapter为例)
package el.com.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(
this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private List<String> getData() {
List<String> data = new ArrayList<String>();
data.add("测试1");
data.add("测试2");
data.add("测试3");
data.add("测试4");
return data;
}
}
效果图
RecyclerView
RecyclerView,可以回收复用view,有缓存机制,可以代替ListView
引用一个比较简单的例子点击打开链接
上一个demo
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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="el.com.myapplication.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#44ff0000"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/id_num"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="1" />
</FrameLayout>
MainActivity.java
package el.com.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String> mDatas;
private RecyclerView recyclerView;
private FishAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycle_view);
initData();
initRecycleView();
}
private void initRecycleView() {
adapter = new FishAdapter(this);
//必须指定adaoter
recyclerView.setAdapter(adapter);
//必须指定layoutmanager
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter.setData(mDatas);
}
protected void initData() {
mDatas = new ArrayList<String>();
for (int i = 'A'; i < 'z'; i++) {
mDatas.add("" + (char) i);
}
}
}
FishAdapter.java
package el.com.myapplication;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by fish on 16/6/4.
*/
public class FishAdapter extends RecyclerView.Adapter<FishViewHolder> {
private List<String> data;
private LayoutInflater inflater;
public FishAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
@Override
public FishViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// LogUtil.fish("onCreateViewHolder");
FishViewHolder holder = new FishViewHolder(inflater.inflate(
R.layout.item, parent, false));
return holder;
}
@Override
public void onBindViewHolder(FishViewHolder holder, int position) {
// LogUtil.fish("onBindViewHolder " + position);
holder.tv.setText(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
public void setData(List<String> pDatas) {
data = pDatas;
}
}
FishViewHolder
package el.com.myapplication;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
public class FishViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public FishViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
类似于电话簿,可以向上滑动可以加载多条数据
WebView
WebView网络视图,这个可以加载网页,本地的,互联网端的
PS:AndroidManifest.xml文件里面加载的权限,有这么一行代码:
<uses-permission android:name="android.permission.INTERNET"/>
这样就OK啦,运行效果
PS:左边这张图是没有加网络访问权限的,会报Webpage not available异常
右边这张图是加上网络访问权限的,此时会显示我们想要的结果。
ScollView
ScollView,滚动视图,放在视图里的文字或图片,列表之类的东西,可以水平滚动或垂直滚动
在activity_main.xml里面添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/pic"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/pic"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/pic"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/pic"
/>
</LinearLayout>
</ScrollView>
</HorizontalScrollView>
效果图如下
ViewPager
ViewPager,可以实现屏幕的左右切换功能
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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="el.com.myapplication.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</android.support.v4.view.ViewPager>
</RelativeLayout>
layout1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/jingdong1"
android:orientation="vertical"
>
</LinearLayout>
layout2.xml和layout3.xml类似
MainActivity.java
这里面要重写4个方法,4个方法分别起到什么作用,自己百度。
package el.com.myapplication;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private View view1, view2, view3;
private ViewPager viewPager;
private List<View> viewList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewpager);
LayoutInflater inflater = getLayoutInflater();
view1 = inflater.inflate(R.layout.layout1, null);
view2 = inflater.inflate(R.layout.layout2, null);
view3 = inflater.inflate(R.layout.layout3, null);
viewList = new ArrayList<View>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
PagerAdapter pagerAdapter = new PagerAdapter() {
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
}
}
效果图