1.完成文本框的自动补全AutoCompleteTextView
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/actv_main_auto"
android:completionThreshold="1"
/>
(1)AutoCompleteTextView常见方法
clearListSelection():清除选中的列表项;
dismissDropDown():如果存在关闭下拉菜单;
getAdapter():获取适配器。
1.1在values下的String.xml设置多几个值:
<resources>
<string name="app_name">G160628_Android07_WidgetPlus</string>
<!--字符串数组-->
<string-array name="data">
<item>张三</item>
<item>李四</item>
<item>王五</item>
<item>王二小</item>
</string-array>
</resources>
1.2在java类里根据name获取
String.xml里的值,
actv_main_auto = (AutoCompleteTextView) findViewById(R.id.actv_main_auto);
//获取字符串数组
String data[]=getResources().getStringArray(R.array.data);
//适配器
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
//给控件设置适配器
actv_main_auto.setAdapter(adapter);
2.下拉列表
Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/s_main_spinner"
></Spinner>
在java类实现
//给下拉列表设置适配器
final String provinces[]={"湖南省","河南省","海南省"};
int images[]={R.drawable.dog,R.drawable.elephant,R.drawable.fox};
List<Map<String,Object>> list=new ArrayList<>();
for (int i = 0; i < provinces.length; i++) {
Map<String,Object> map=new HashMap<>();
map.put("title",provinces[i]);
map.put("image",images[i]);
list.add(map);
}
//适配器
//ArrayAdapter adapterSpinner=new ArrayAdapter(this,android.R.layout.simple_list_item_1,provinces);
//SimpleAdapter
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});
s_main_spinner.setAdapter(adapterSpinner);
//给下列列表设置选择事件
s_main_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, provinces[i], Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
3.Listview的基本用法
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
4. 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示,
只能用TextView视图。
3.1基本实现功能
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv_item_actv_text"
android:textSize="30sp"
>
</TextView>
在java类实现
public class ListActivity extends AppCompatActivity {
private ListView lv_list_names;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
lv_list_names = (ListView) findViewById(R.id.lv_list_names);
final List<String> names=new ArrayList<>();
for (int i = 0; i <100; i++) {
names.add("张"+i);
}
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,names);
lv_list_names.setAdapter(adapter);
//给ListView设置点击事件
lv_list_names.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(ListActivity.this, names.get(i), Toast.LENGTH_SHORT).show();
}
});
}
3.2Listview上的下载
点击app名直接跳转到详细信息,点击下载则直接下载
1.写一个实体类
public class MainTag {
public ImageView iv;
public TextView tv;
public Button bt;
}
2.写一个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"> <ListView android:id="@+id/layout_mian2_text" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>3.写一个View,里面写你要向View视图里添加的控件,这个View视图只是用于写控件的。
<?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="horizontal" tools:context="com.example.android_widgetplus2.MainActivity" android:descendantFocusability="blocksDescendants" > <ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/layout_mian_image" android:src="@drawable/bird" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/tv_item_listview_title" android:text="酷跑" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下载" android:id="@+id/layout_mian_button" /> </LinearLayout>
4.在java类里写java代码实现
3.3Listview的下拉刷新package com.example.android_widgetplus2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; 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 int image[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog}; private String text[]={"老一","老二","老三","老四","老五"}; private ListView layout_mian_text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity2_mian); layout_mian_text= (ListView) findViewById(R.id.layout_mian2_text); layout_mian_text.setAdapter(new Mapdasda()); //给id设置监听事件 layout_mian_text.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //跳转到相对应的详细界面 Toast.makeText(MainActivity.this,"跳转到:"+text[position],Toast.LENGTH_LONG).show(); } }); } class Mapdasda extends BaseAdapter { @Override public int getCount() { //获得Vire视图的长度 return text.length; } @Override public Object getItem(int position) { //获得Text集合里的下标position return text[position]; } @Override public long getItemId(int position) { //返回所有属性的下标 return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { //拿到你要加入的视图 convertView = getLayoutInflater().inflate(R.layout.activity_main, null); //new一个实体类 MainTag m = new MainTag(); m.iv = (ImageView) convertView.findViewById(R.id.layout_mian_image); m.tv = (TextView) convertView.findViewById(R.id.tv_item_listview_title); m.bt = (Button) convertView.findViewById(R.id.layout_mian_button); //把加入的对象放入试图 convertView.setTag(m); } //根据视图拿到对象 MainTag v = (MainTag) convertView.getTag(); //给控件设置内容 v.iv.setImageResource(image[position]); v.tv.setText(text[position]); v.bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "正在下载" + text[position], Toast.LENGTH_SHORT).show(); } }); return convertView; } } }
第一步:我引用了框架:PullToRefresh1下载步骤先进入官网下载:www.github.com然后不要登录直接搜索即可下载下载之后点击Import Module进行
然后需要修改你自己的Android版本点击project项目里面的bulid.gradle修改成自己的版本就行运行时会报错,它会弹出报错界面,报错原因是方法过时,修改成新的就行。![]()
找到你下载的路径:修改你保存在项目里的框架名![]()
需要使用这个框架的项目,右键点击Open Module setting最后一个,点击+号
![](https://img-blog.csdn.net/20170611145243540?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmV3cGFyYWxsZWw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实现结果:
实现代码如下:
1.1写一个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">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout_mian_pulltorefresh"
></com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
1.2在java里实现主要的java代码:
package com.example.android_widgetplus2;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/6/9 0009.
*/
public class pulltorefresh extends AppCompatActivity {
private List<String> list;
private PullToRefreshListView pr;
private ArrayAdapter a;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pulltorefresh);
pr = (PullToRefreshListView) findViewById(R.id.layout_mian_pulltorefresh);
list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
list.add("你好"+i);
}
a = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
pr.setAdapter(a);
pr.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//调用刷新列表
new MyTask().execute();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
}
});
}
class MyTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] params) {
for (int i = 0; i <5 ; i++) {
//设置刷新后要添加的数据
list.add(0,"老王"+i);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//用来提示view以刷新
pr.onRefreshComplete();
//通知适配器数据 发生改变
a.notifyDataSetChanged();
}
}
}
3.4 XListview的下拉刷新实现方法和Listview一样,下在一个框架,导入到项目里
实现代码也是一样的。
4.ViewPager
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
<?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"
tools:context="com.example.android_widgtplus4.MainActivity">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/res_pager"
></android.support.v4.view.ViewPager>
</LinearLayout>
写两个小的View
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/adsads"
android:text="这是第一个界面"
/>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是第二个界面"
/>
</TableLayout>
</TableLayout>
在JVAV代码中把这两个界面加入 ViewPager
package com.example.android_widgetplus3_1;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
public class activity_ViewPage extends AppCompatActivity {
private ViewPager res_main_viewPager;
private List<View> list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity__view_page);
res_main_viewPager = (ViewPager) findViewById(R.id.res_main_ViewPager);
View inflate = getLayoutInflater().inflate(R.layout.frame,null);
View gridlayout = getLayoutInflater().inflate(R.layout.gridlayout, null);
View table=getLayoutInflater().inflate(R.layout.table,null);
list.add(inflate);
list.add(gridlayout);
list.add(table);
res_main_viewPager.setAdapter(new MyAdapter());
}
class MyAdapter extends PagerAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v= list.get(position);
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
View v= list.get(position);
container.removeView(v);
}
}
}