Android中的高级控件要比普通控件的实现效果要好很多,有些样式是可以自动生成的,不需要再去写过多复杂化的代码,虽然说高级并不是说就很难学习,只要你把它琢磨透其实是很简单的,应为许多控件的使用差不多都是一样的思路,只要你搞懂了思路,你就会了。下面来了解下吧。
1.AutoCompleteTextView(自动完成文本框)
自动完成文本框也就是自动补全,我们一般在搜索中会遇见只要你一打字它就会出来很多的选项让你选择,我们把它就叫做自动补全,我们在Java中也见过不过Java中使用得是AJAX,一提到AJAX都会觉得代码好多好多,但是AutoCompleteTextView的代码就减少一大半,几句代码就可以了。代码如下
<?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="com.example.g160828_android_widget07.MainActivity">
<AutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/actv_main_auto" android:completionThreshold="1" //设置为第一个字提示 />
</LinearLayout>
values/string.xml里面定义数据
<resources> <string name="app_name">G160828_Android_Widget07</string> <!---AutoCompleteTextView字符串--> <string-array name="autocomple"> <item>游戏</item> <item>游戏机</item> <item>游戏机键盘</item> <item>女衣</item> <item>女衣长袖</item> <item>电脑</item> <item>电脑桌</item> <item>电脑驱动</item> </string-array>
</resources>
java文件
package com.example.g160828_android_widget07; import android.content.Intent; 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.AutoCompleteTextView; import android.widget.ListView; import android.widget.MultiAutoCompleteTextView; 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 {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取控件id AutoCompleteTextView auto= (AutoCompleteTextView) findViewById(R.id.actv_main_auto);
//获取字符串 String autocomple[]=getResources().getStringArray(R.array.autocomple);
//创建适配器 ArrayAdapter arrayauto=new ArrayAdapter(this,R.layout.item_actv,autocomple);
//设置适配器
auto.setAdapter(arrayauto);
}
2.MultiAutopleteTextView(分隔符的自动完成文本框)
MultiAutopleteTextView和AutoCompleteTextView都是一样的操作,唯一的区别就在于MultiAutopleteTextView可以进行分割继续自动补全,你只需要在设置适配器的时候创建分隔符就可以了
//为MutilAutoCompleteTextView设置分隔符 MultiAutoCompleteTextView.Tokenizer tokenizer=new MultiAutoCompleteTextView.CommaTokenizer(); multi.setTokenizer(tokenizer);
3.Spinner(下拉框)
在很多地方我们都会用到下拉框,比如选择地址的时候就会遇到,只要通过获得控件的监听事件就可以得到了。
layout文件里面的xml界面:
<?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="com.example.g160828_android_widget07.MainActivity">
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:text="省份" android:textSize="15sp" /> <Spinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/sp_main_spinner" > </Spinner> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" > <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:text="市" android:textSize="15sp" /> <Spinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/sp_main_spinnershi" > </Spinner> </LinearLayout>
</LinearLayout>
values里面string里的数据:
<resources> <string name="app_name">G160828_Android_Widget07</string>
<string-array name="sheng"> <item>省份</item> <item>湖南省</item> <item>广东省</item> <item>山西省</item> </string-array> <string-array name="hunan"> <item>怀化市</item> <item>长沙市</item> <item>洪江市</item> <item>邵阳市</item> </string-array> <string-array name="guangdong"> <item>东莞市</item> <item>中山市</item> <item>珠海市</item> <item>茂名市</item> </string-array> <string-array name="shanxi"> <item>太原市</item> <item>高平市</item> <item>忻州市</item> <item>孝义市</item> </string-array> </resources>
java里面的代码:
package com.example.g160828_android_widget07; import android.content.Intent; 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.AutoCompleteTextView; import android.widget.ListView; import android.widget.MultiAutoCompleteTextView; 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 Map ma;
private Spinner spinner; private Spinner spinnercity;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//省 spinner = (Spinner) findViewById(R.id.sp_main_spinner); //市 spinnercity = (Spinner) findViewById(R.id.sp_main_spinnershi);
//获取省份数据 final String sheng[]=getResources().getStringArray(R.array.sheng); String hunan[]=getResources().getStringArray(R.array.hunan); String guangdong[]=getResources().getStringArray(R.array.guangdong); String shanxi[]=getResources().getStringArray(R.array.shanxi); String st[]={"城市"};
//省级适配器 ArrayAdapter arrayspinner=new ArrayAdapter(this,android.R.layout.simple_list_item_1,sheng); //设置下拉框的风格 arrayspinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置适配器
spinner.setAdapter(arrayspinner);
ma = new HashMap(); ma.put(sheng[0],st); ma.put(sheng[1],hunan); ma.put(sheng[2],guangdong); ma.put(sheng[3],shanxi);
//给下拉框设置监听事件 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { String shen=sheng[i]; city(shen); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } });}
public void city(String citys){ String ci[]= (String[]) ma.get(citys); ArrayAdapter array=new ArrayAdapter(this,android.R.layout.simple_spinner_item,ci); spinnercity.setAdapter(array); }
}
实现的效果就是2个下拉框,1个是省的,1个是市的,当选择省的时候,市区的也会跟着变动。
4.ListView(列表视图)
布局文件:
<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv_main_list" > </ListView>
package com.example.g160828_android_widget07; import android.content.Intent; 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.AutoCompleteTextView; import android.widget.ListView; import android.widget.MultiAutoCompleteTextView; 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 ListView listview; //定义列表视图集合 private String titles[]={"愤怒的小鸟","汤姆猫","战斗鸡","大黑牛","垃圾狗"}; private int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog};
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
//获取ListView(列表视图)控件 listview = (ListView) findViewById(R.id.lv_main_list);
List<Map<String,Object>> listmap=new ArrayList<>(); for (int i = 0; i < titles.length; i++) { Map<String,Object> map=new HashMap<>(); map.put("images",images[i]); map.put("titles",titles[i]); listmap.add(map); }
//配置列表视图适配器
SimpleAdapter simplist=new SimpleAdapter(this,listmap,android.R.layout.activity_list_item,new String[]{"images","titles"},new int[]{android.R.id.icon,android.R.id.text1});
listview.setAdapter(simplist);
//给列表视图设置点击事件 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, titles[i], Toast.LENGTH_SHORT).show(); } });
}
总结:
1.实现布局文件
2.定义数据
3.得到控件
4.适配器
5.设置适配器
(需要的话还需要写监听事件)