GridView、AutoCompleteTextView、ExpanableListView的用法
16lz
2021-12-04
GridView
GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容。是实现九宫图的首选,其用法与ListView大致相同。
属性
android:numColumns 设置列数
android:columnWidth 设置列的宽度
android:horizontalSpacing 设置两列之间的间距
android:verticalSpacing 设置两行之间的间距
<GridView android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" ></GridView>
代码示例
实体类Fruit
public class Fruit { private String name; private int image; public Fruit(String name, int image) { this.name = name; this.image = image; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImage() { return image; } public void setImage(int image) { this.image = image; }}
适配器MyGridAdapter
import java.util.ArrayList;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyGridAdapter extends BaseAdapter{ private LayoutInflater inflater; private ArrayList<Fruit> list; public MyGridAdapter(LayoutInflater inflater, ArrayList<Fruit> list) { this.inflater = inflater; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Fruit fruit =list.get(position); View view; ViewHolder viewHolder; if(convertView==null){ view=inflater.inflate(R.layout.fruit_gridview, null); viewHolder=new ViewHolder(); viewHolder.image=(ImageView) view.findViewById(R.id.imageview); viewHolder.name=(TextView) view.findViewById(R.id.textview); view.setTag(viewHolder); }else{ view=convertView; viewHolder=(ViewHolder) view.getTag(); } viewHolder.image.setImageResource(fruit.getImage()); viewHolder.name.setText(fruit.getName()); return view; } class ViewHolder{ ImageView image; TextView name; }}
自定义布局
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
MainActivity
import java.util.ArrayList;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity { private LayoutInflater inflater; private ArrayList<Fruit> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inflater = getLayoutInflater(); list=new ArrayList<Fruit>(); for (int i = 0; i <= 5; i++) { Fruit apple = new Fruit("苹果", R.drawable.apple); Fruit banana = new Fruit("香蕉", R.drawable.banana); Fruit grape = new Fruit("葡萄", R.drawable.grape); Fruit strawberry = new Fruit("草莓", R.drawable.strawberry); list.add(apple); list.add(banana); list.add(grape); list.add(strawberry); } GridView gridView = (GridView) findViewById(R.id.gridview); MyGridAdapter adapter = new MyGridAdapter(inflater, list); gridView.setAdapter(adapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "你选中的水果为:"+list.get(position).getName(), Toast.LENGTH_SHORT).show(); } }); }}
运行结果:图片以3列显示,点击图片,短暂显示点击的内容
AutoCompleteTextView
AutoCompleteTextView是关键字搜索框,输入关键字,会显示适配的内容
<AutoCompleteTextView android:id="@+id/autotextview" android:layout_width="match_parent" android:layout_height="wrap_content"/>
MainActivity
import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.app.Activity;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AutoCompleteTextView autoTextView = (AutoCompleteTextView) findViewById(R.id.autotextview); String[] data = { "layout_linear", "layout_relative", "view_text", "view_image", "radiobutton" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); autoTextView.setAdapter(adapter); }}
运行结果:
Spinner
Spinner是用于下拉菜单的控件。
<Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content"/>
MainActivity
import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.Spinner;import android.app.Activity;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); String[] fruits = { "苹果", "香蕉", "葡萄", "西瓜", "草莓", "荔枝" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, fruits); spinner.setAdapter(adapter); }}
运行结果:
Gallery
Gallery组件主要用于横向显示图像列表,主要的用法和ListView大致类似,此控件已被淘汰,在此不做深入了解!
ExpanableListView
ExpanableListView主要用于分组列表,是一个二级控件,相当于ListView的嵌套。它借助的适配器的实现类为BaseExpanableListAdapter。
<ExpandableListView android:id="@+id/expandablelistview" android:layout_width="match_parent" android:layout_height="match_parent" > </ExpandableListView>
下面我们实现一个简单的好友列表,熟悉一下ExpanableListView的用法:
显示好友列表的实体类FriendsList
import java.util.ArrayList;public class FriendsList { private String listName; private ArrayList<Friends> friends; public FriendsList(String listName, ArrayList<Friends> friends) { this.listName = listName; this.friends = friends; } public String getListName() { return listName; } public void setListName(String listName) { this.listName = listName; } public ArrayList<Friends> getFriends() { return friends; } public void setFriends(ArrayList<Friends> friends) { this.friends = friends; }}
点击分组后显示的好友实体类Friends
public class Friends { private int touxiang; private String friendName; private String sign; public Friends(int touxiang, String friendName, String sign) { this.touxiang = touxiang; this.friendName = friendName; this.sign = sign; } public int getTouxiang() { return touxiang; } public void setTouxiang(int touxiang) { this.touxiang = touxiang; } public String getFriendName() { return friendName; } public void setFriendName(String friendName) { this.friendName = friendName; } public String getSign() { return sign; } public void setSign(String sign) { this.sign = sign; }}
用于显示好友列表的自定义布局
<?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:orientation="horizontal" > <TextView android:id="@+id/list_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="25dp"/></LinearLayout>
用于显示点击列表的好友自定义布局
<?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:orientation="horizontal" > <ImageView android:id="@+id/fiends_touxiang" android:layout_width="15dp" android:layout_height="15dp" android:layout_marginLeft="20dp"/> <TextView android:id="@+id/friends_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/red" android:layout_marginLeft="10dp"/> <TextView android:id="@+id/friends_sign" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/gray" android:layout_marginLeft="10dp" android:textSize="12sp"/></LinearLayout>
自定义适配器FriendsAdapter,继承BaseExpandableListAdapter
import java.util.ArrayList;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.ImageView;import android.widget.TextView;public class FriendsAdapter extends BaseExpandableListAdapter { private LayoutInflater inflater; private ArrayList<FriendsList> data; public FriendsAdapter(LayoutInflater inflater, ArrayList<FriendsList> data) { this.inflater = inflater; this.data = data; } @Override public Object getChild(int groupPosition, int childPosition) { return childPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public int getChildrenCount(int groupPosition) { return data.get(groupPosition).getFriends().size(); } @Override public Object getGroup(int groupPosition) { return groupPosition; } @Override public int getGroupCount() { return data.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { FriendsList list = data.get(groupPosition); View view; ViewHolderFriendsList vhFriendsList; if (convertView == null) { //缓存加载好的布局 view = inflater.inflate(R.layout.friendslist, null); vhFriendsList = new ViewHolderFriendsList(); vhFriendsList.list_tv = (TextView) view.findViewById(R.id.list_tv); //缓存控件的实例 view.setTag(vhFriendsList); } else { view = convertView; vhFriendsList = (ViewHolderFriendsList) view.getTag(); } vhFriendsList.list_tv.setText(list.getListName()); return view; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { Friends friend = data.get(groupPosition).getFriends() .get(childPosition); View view; ViewHolderFriends vhFriends; if (convertView == null) { view = inflater.inflate(R.layout.friends, null); vhFriends = new ViewHolderFriends(); vhFriends.friends_touxiang = (ImageView) view .findViewById(R.id.fiends_touxiang); vhFriends.friends_name = (TextView) view .findViewById(R.id.friends_name); vhFriends.friends_sign = (TextView) view .findViewById(R.id.friends_sign); view.setTag(vhFriends); } else { view = convertView; vhFriends = (ViewHolderFriends) view.getTag(); } vhFriends.friends_touxiang.setImageResource(friend.getTouxiang()); vhFriends.friends_name.setText(friend.getFriendName()); vhFriends.friends_sign.setText(friend.getSign()); return view; } class ViewHolderFriendsList { TextView list_tv; } class ViewHolderFriends { ImageView friends_touxiang; TextView friends_name; TextView friends_sign; }}
MainActivity
import java.util.ArrayList;import android.os.Bundle;import android.view.LayoutInflater;import android.widget.ExpandableListView;import android.app.Activity;public class MainActivity extends Activity { private ExpandableListView eListView; private ArrayList<FriendsList> friendList; private LayoutInflater inflater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); eListView=(ExpandableListView) findViewById(R.id.expandablelistview); initData(); inflater=getLayoutInflater(); eListView=(ExpandableListView) findViewById(R.id.expandablelistview); FriendsAdapter adapter=new FriendsAdapter(inflater, friendList); eListView.setAdapter(adapter); } /** * 初始化数据 */ private void initData() { friendList=new ArrayList<FriendsList>(); ArrayList<Friends> friends1=new ArrayList<Friends>(); friends1.add(new Friends(R.drawable.apple, "张三", "今天很开心!")); friends1.add(new Friends(R.drawable.grape, "李四", "今天太悲剧了!")); friends1.add(new Friends(R.drawable.strawberry, "王五", "今天吃的很饱!")); FriendsList friendlist1=new FriendsList("好友",friends1); friendList.add(friendlist1); ArrayList<Friends> friends2=new ArrayList<Friends>(); friends2.add(new Friends(R.drawable.apple, "张三", "今天很开心!")); friends2.add(new Friends(R.drawable.grape, "李四", "今天太悲剧了!")); friends2.add(new Friends(R.drawable.strawberry, "王五", "今天吃的很饱!")); FriendsList friendlist2=new FriendsList("家人",friends2); friendList.add(friendlist2); ArrayList<Friends> friends3=new ArrayList<Friends>(); friends3.add(new Friends(R.drawable.apple, "张三", "今天很开心!")); friends3.add(new Friends(R.drawable.grape, "李四", "今天太悲剧了!")); friends3.add(new Friends(R.drawable.strawberry, "王五", "今天吃的很饱!")); FriendsList friendlist3=new FriendsList("朋友",friends3); friendList.add(friendlist3); } }
运行结果:
更多相关文章
- Android中的布局方式(二)
- Android(安卓)安全卫士 第二天_注意事项
- 自定义ListView中的分割线(转)
- android 五大布局经典演绎
- SDK3.0 组件属性
- 浅谈Android常用控件
- Android美化EditText
- Android(安卓)自定义实现TextView单行超出部分显示为省略号
- 在android中显示网络图片及查看页面源代码