Android 高级控件

xiaoxiao2021-02-28  64

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代码实现 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; } } } 3.3Listview的下拉刷新   第一步:我引用了框架:PullToRefresh1 下载步骤先进入官网下载: www.github.com然后不要登录直接搜索即可下载下载之后点击Import Module进行  然后需要修改你自己的Android版本点击project项目里面的bulid.gradle修改成自己的版本就行 运行时会报错,它会弹出报错界面,报错原因是方法过时,修改成新的就行。 找到你下载的路径:修改你保存在项目里的框架名 需要使用这个框架的项目,右键点击Open Module setting最后一个,点击+号 实现结果:

实现代码如下:

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); } } }

转载请注明原文地址: https://www.6miu.com/read-96688.html

最新回复(0)