1.自动完成文本框(AutoCompleteTextView),继承EditText,拥有它所有的属性和行为,实现(implements)Filter.FilterListener.
1.1 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<AutoCompleteTextView
android:id="@+id/autoComplete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
/>
<MultiAutoCompleteTextView
android:id="@+id/multiAutoComplete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
/>
</LinearLayout>
1.2 MainActivity类
package com.example.androd11;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;
public class MainActivity extends AppCompatActivity {
private AutoCompleteTextView auto;
private AutoCompleteTextView multextView;
private static final String[]COUNTRIES=new String[]{"Banana","Apple","Orange","Pear","HaMi"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
auto=findViewById(R.id.autoComplete); //初始化
//组装一个适配器
ArrayAdapter<String >adapter=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_dropdown_item_1line,COUNTRIES);
auto.setAdapter(adapter);
MultiAutoCompleteTextView multextView =findViewById(R.id.multiAutoComplete);//初始化
multextView.setAdapter(adapter);
//必须提供分割符,加入逗号(,).不然显示了不
multextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
}
}
2.ExpandableListView它是ListView子类.
项目里面不可能有一个适配器,所以创建一个包来装适配器.
2.1 布局代码
<?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:background="@drawable/ic_launcher_background"
android:layout_height="match_parent">
<ExpandableListView
android:id="@+id/myexpandlist"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ExpandableListView>
</LinearLayout>
2.2 ExpandLvActivity代码
package com.example.androd11;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import com.example.androd11.com.example.adapter.MyAdapter;
import java.util.ArrayList;
import java.util.List;
public class ExpandLvActivity extends Activity {
private ExpandableListView exlv;
//组数据
List<String> groupDate;
//子数据
List<List<String>> childrenData;
@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expandlist);
exlv=findViewById(R.id.myexpandlist);
setDate();//初始化数据
//设置适配器
exlv.setAdapter(new MyAdapter(groupDate,childrenData,this));
}
public void setDate(){
groupDate = new ArrayList<String>();
groupDate.add("国家");
groupDate.add("人物");
groupDate.add("武器");
childrenData = new ArrayList<List<String>>();
List<String> child1 = new ArrayList<String>();
child1.add("蜀国");
child1.add("魏国");
child1.add("吴国");
childrenData.add(child1);
List<String> child2 = new ArrayList<String>();
child2.add("关羽");
child2.add("张飞");
child2.add("典韦");
child2.add("吕布");
child2.add("曹操");
child2.add("甘宁");
child2.add("郭嘉");
child2.add("周瑜");
childrenData.add(child2);
List<String> child3 = new ArrayList<String>();
child3.add("青龙偃月刀");
child3.add("丈八蛇矛枪");
child3.add("青钢剑");
child3.add("麒麟弓");
child3.add("银月枪");
childrenData.add(child3);
}
}
2.3 item.xml布局代码,动态获取布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="2dp"/>
</LinearLayout>
2.4 MyAdapter代码
package com.example.androd11.com.example.adapter;
import android.content.ClipData;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.androd11.R;
import java.util.List;
public class MyAdapter extends BaseExpandableListAdapter {
//组数据
List<String> groupDate;
//子数据
List<List<String>> childrenData;
//上下文
Context context;
//构造函数
public MyAdapter(List<String> groupDate, List<List<String>> childrenData, Context context) {
this.groupDate = groupDate;
this.childrenData = childrenData;
this.context = context;
}
@Override
public int getGroupCount() {
return groupDate.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return childrenData.get(groupPosition).size(); //先的到主的集合
}
@Override
public Object getGroup(int groupPosition) {
return groupDate.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return groupDate.get(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
//设置组视图
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
//返回View
TextView ex;
if (convertView ==null){
ex=new TextView(context);
convertView=ex;
}else {
ex= (TextView) convertView;
}
ex.setText(groupDate.get(groupPosition));
ex.setTextSize(22);
ex.setPadding(66,66,66,66); //设置边距位置
return ex;
}
//设置子列表
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
Item item;
if (convertView ==null){
convertView= LayoutInflater.from(context).inflate(R.layout.item,null);//动态加载资源文件
item=new Item();
item.iv=convertView.findViewById(R.id.img);
item.tv=convertView.findViewById(R.id.title);
convertView.setTag(item);
}else {
item= (Item) convertView.getTag();
}
item.tv.setText(childrenData.get(groupPosition).get(childPosition));
item.iv.setImageResource(R.drawable.ic_launcher_foreground); //设置图片
return convertView;
}
class Item{
ImageView iv;
TextView tv;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
3.画廊视图(Galley).
继承(Abs)按水平方向显示内容,并且可以手指直接拖动图片和移动,用来浏览图片,并且可以响应事件显示信息.
3.1 布局中的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Gallery
android:id="@+id/grally1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:spacing="6dp">
</Gallery>
</LinearLayout>
3.2 活动中的代码
package com.example.android011;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.Toast;
import com.example.android011.com.example.adapter.MyAdapter1;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private int [] images={R.mipmap.one,R.mipmap.two,R.mipmap.ic_launcher};
private Gallery gallery2;
List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gallery2=findViewById(R.id.grally1);
//适配器
gallery2.setAdapter(new MyAdapter1(this,getData(),images));
//设置点击事件
gallery2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,""+gallery2.getSelectedItem(),0).show();
}
});
//设置滑动事件
gallery2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,""+gallery2.getSelectedItemPosition(),0).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//设置中间被选中
gallery2.setSelection(images.length/2);
}
public List<String> getData(){
ArrayList<String> list = new ArrayList<String>();
for (int i=0;i<90;i++){
list.add("图"+(i+1));
}
return list;
}
}
3.3 适配器中的代码(MyAdapter1)
package com.example.android011.com.example.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.example.android011.MainActivity;
import com.example.android011.R;
import java.util.List;
public class MyAdapter1 extends BaseAdapter {
Context context;
private List<String> list;
private int [] imgs;
public MyAdapter1(Context context, List<String> list, int[] imgs) {
this.context=context;
this.list=list;
this.imgs=imgs;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv;
if (convertView ==null){
iv=new ImageView(context);
convertView=iv;
}else {
iv= (ImageView) convertView;
}
iv.setImageResource(imgs[position]);
return iv;
}
}
4.网格布局(GridView)
是按照行和例的方式显示多个组件,通常显示图片或者图标等,首先需要在屏幕上添加GridView组件.使用标记.
4.1 layout_gridview.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">
<GridView
android:id="@+id/grid_builder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3">
</GridView>
</LinearLayout>
4.2GridViewActivity代码
package com.example.android011;
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridLayout;
import android.widget.GridView;
import com.example.android011.com.example.adapter.MyAdapter2;
import java.util.ArrayList;
import java.util.List;
public class GridViewActivity extends Activity {
private GridView gv2;
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_gridview);
gv2 = findViewById(R.id.grid_builder);
gv2.setAdapter(new MyAdapter2(this, getData()));
}
public List<String> getData() {
list = new ArrayList<String>();
for (int i = 0; i < 8; i++) {
list.add("图" + (i + 1));
}
return list;
}
}
4.3 适配器代码(MyAdapter2)
<?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">
<GridView
android:id="@+id/grid_builder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3">
</GridView>
</LinearLayout>
5.HorizontalScrollView(水平滚动视图).
5.1布局文件
<?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">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水平滚动视图用于为其他组件添加滚动条.adasddqwdqwdqwdqwdqwdqwdqwdqwdqwdgfwef"/>
</HorizontalScrollView>
</LinearLayout>