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>
设置一个布局文件,设置内容
java代码<?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>
3.ExpandableListView(可扩展列表控件)可以做到的功能 QQ列表的下拉框收缩功能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; } } }
布局文件:设置控件就可以了。
<?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;
}
}
}