Android 高级控件

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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值