Android高级控件有很多,今天就先写三个
1.Spinner(下拉框)
比较实用的是二级联动,下面是代码:
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.android_08.MainActivity"> <Spinner android:id="@+id/spin_province" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Spinner android:id="@+id/spin_city" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>java代码: package com.example.android_08; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.SimpleAdapter; import android.widget.Spinner; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private Spinner provinceSpinner; private Spinner citySpinner; ArrayAdapter<String> provinceAdapter; ArrayAdapter<String> cityAdapter; private String[] province = new String[] {"湖南","湖北","河南"}; private String[][] city = new String[][]{{"1.1", "1.2", "1.3" }, { "2.1", "2.2", "2.3"}, { "3.1", "3.2", "3.3"}}; private List<Map<String, Object>> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = new ArrayList<>(); int images[]={R.drawable.dog,R.drawable.elephant,R.drawable.fox}; for (int i = 0; i < province.length; i++) { Map<String,Object> map=new HashMap<>(); map.put("title",province[i]); map.put("image",images[i]); list.add(map); } setSpinner(); } private void setSpinner() { provinceSpinner = (Spinner)findViewById(R.id.spin_province); citySpinner = (Spinner)findViewById(R.id.spin_city); SimpleAdapter adapterSpinner=new SimpleAdapter(this,list,android.R.layout.activity_list_item,new String[]{"title","image"},new int[]{android.R.id.text1,android.R.id.icon}); //provinceAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, province); provinceSpinner.setAdapter(adapterSpinner); provinceSpinner.setSelection(0,true); cityAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, city[0]); citySpinner.setAdapter(cityAdapter); citySpinner.setSelection(0,true); provinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { cityAdapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_spinner_item, city[position]); citySpinner.setAdapter(cityAdapter); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } }2.ListView(列表控件) 实现的是设置列表显示
布局代码:这是设置ListView的控件
<?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"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_main_test" > </ListView> </LinearLayout> 设置一个布局文件,用来设置里面的列表选项 <?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/addexam_list_icon" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/addexam_list_item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ffffff" android:textSize="30sp" /> </LinearLayout> 设置一个布局文件,设置内容 <?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"> <TextView android:id="@+id/addexam_list_item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" /> </LinearLayout>java代码 package com.example.android_08; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; /** * Created by lx on 2017/6/8. */ public class ListActivity extends AppCompatActivity{ private ListView lv_main_test; private List<String> list; private List<String> groupKey=new ArrayList<>(); private List<String> alist=new ArrayList<>(); private List<String> blist=new ArrayList<>(); private List<String> clist=new ArrayList<>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); lv_main_test = (ListView) findViewById(R.id.lv_main_test); initData(); MyAdapter adapter=new MyAdapter(); lv_main_test.setAdapter(adapter); }; public void initData(){ list = new ArrayList<String>(); groupKey.add("A组"); groupKey.add("B组"); groupKey.add("C组"); for (int i = 0; i <3 ; i++) { alist.add("a"+i); } list.add("A组"); list.addAll(alist); for (int i = 0; i <3 ; i++) { blist.add("b"+i); } list.add("B组"); list.addAll(blist); for (int i = 0; i <3 ; i++) { clist.add("c"+i); } list.add("C组"); list.addAll(clist); } //编写自己的适配器 class MyAdapter extends BaseAdapter{ @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 boolean isEnabled(int position) { if(groupKey.contains(getItem(position))){ return false; } return super.isEnabled(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view=convertView; if(groupKey.contains(getItem(position))){ view= LayoutInflater.from(getApplicationContext()).inflate(R.layout.addexam_list_item, null); }else{ view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.addexam_list_item_tag, null); } TextView text=(TextView) view.findViewById(R.id.addexam_list_item_text); text.setText((CharSequence)getItem(position)); return view; } } } 3.ExpandableListView(可扩展列表控件)可以做到的功能 QQ列表的下拉框收缩功能布局文件:设置控件就可以了。
<?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"> <ExpandableListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/elv_main_test"> </ExpandableListView> </LinearLayout>Java代码:
package com.example.android_08; import android.database.DataSetObserver; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; /** * Created by lx on 2017/6/8. */ public class ExapandableListView extends AppCompatActivity { private ExpandableListView elv_main_test; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_expandablelistview); elv_main_test = (ExpandableListView) findViewById(R.id.elv_main_test); expandable e=new expandable(); elv_main_test.setAdapter(e); } class expandable implements ExpandableListAdapter { int logos[]={ R.drawable.dog, R.drawable.elephant, R.drawable.fox }; String key[]={ "鸟", "猫", "鸡" }; String context[][]={ {"鸟1","鸟2","鸟3"}, {"猫1","猫2","猫3"}, {"鸡1","鸡2","鸡3"} }; @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getGroupCount() { return key.length; } @Override public int getChildrenCount(int groupPosition) { return context[groupPosition].length; } @Override public Object getGroup(int groupPosition) { return key[groupPosition]; } @Override public Object getChild(int groupPosition, int childPosition) { return context[groupPosition][childPosition]; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { LinearLayout ll = new LinearLayout(ExapandableListView.this); ll.setOrientation(LinearLayout.HORIZONTAL); ImageView logo = new ImageView(ExapandableListView.this); logo.setImageResource(logos[groupPosition]); logo.setPadding(36, 15, 0, 0); ll.addView(logo); TextView textView =getTextView(); textView.setText(getGroup(groupPosition).toString()); textView.setPadding(10, 0, 0, 0); ll.addView(textView); return ll; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = getTextView(); textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEmpty() { return false; } @Override public void onGroupExpanded(int groupPosition) { } @Override public void onGroupCollapsed(int groupPosition) { } @Override public long getCombinedChildId(long groupId, long childId) { return 0; } @Override public long getCombinedGroupId(long groupId) { return 0; } private TextView getTextView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64); TextView textView = new TextView(ExapandableListView.this); textView.setLayoutParams(lp); textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); textView.setPadding(36, 0, 0, 0); textView.setTextSize(20); return textView; } } }
