Android高级控件之AutoCompleteTextView,MultiAutopleteTextView,Spinner,ListView,ExpandableListView

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.设置适配器
(需要的话还需要写监听事件)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值