android 高级组件+适配器

1.自动完成文本框(AutoCompleteTextView),继承EditText,拥有它所有的属性和行为,实现(implements)Filter.FilterListener.

1.1 布局文件

<?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=".MainActivity">

    <AutoCompleteTextView
        android:id="@+id/autoComplete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        />

    <MultiAutoCompleteTextView
        android:id="@+id/multiAutoComplete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        />



</LinearLayout>

1.2 MainActivity类

package com.example.androd11;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;

public class MainActivity extends AppCompatActivity {
    private AutoCompleteTextView auto;
    private AutoCompleteTextView multextView;

    private static final String[]COUNTRIES=new String[]{"Banana","Apple","Orange","Pear","HaMi"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        auto=findViewById(R.id.autoComplete);  //初始化
        //组装一个适配器
        ArrayAdapter<String >adapter=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_dropdown_item_1line,COUNTRIES);
        auto.setAdapter(adapter);


        MultiAutoCompleteTextView  multextView =findViewById(R.id.multiAutoComplete);//初始化
        multextView.setAdapter(adapter);

        //必须提供分割符,加入逗号(,).不然显示了不
        
        multextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());


    }
}

2.ExpandableListView它是ListView子类.
项目里面不可能有一个适配器,所以创建一个包来装适配器.
在这里插入图片描述
2.1 布局代码

<?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:background="@drawable/ic_launcher_background"
    android:layout_height="match_parent">


    <ExpandableListView
        android:id="@+id/myexpandlist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

    </ExpandableListView>


</LinearLayout>

2.2 ExpandLvActivity代码

package com.example.androd11;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;

import com.example.androd11.com.example.adapter.MyAdapter;

import java.util.ArrayList;
import java.util.List;

public class ExpandLvActivity extends Activity {
    private ExpandableListView exlv;

    //组数据
    List<String> groupDate;

    //子数据
    List<List<String>> childrenData;

    @SuppressLint("WrongViewCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expandlist);
        exlv=findViewById(R.id.myexpandlist);
        setDate();//初始化数据



        //设置适配器
        exlv.setAdapter(new MyAdapter(groupDate,childrenData,this));
    }
    public void setDate(){
        groupDate = new ArrayList<String>();
        groupDate.add("国家");
        groupDate.add("人物");
        groupDate.add("武器");

        childrenData = new ArrayList<List<String>>();
        List<String> child1 = new ArrayList<String>();
        child1.add("蜀国");
        child1.add("魏国");
        child1.add("吴国");
        childrenData.add(child1);
        List<String> child2 = new ArrayList<String>();
        child2.add("关羽");
        child2.add("张飞");
        child2.add("典韦");
        child2.add("吕布");
        child2.add("曹操");
        child2.add("甘宁");
        child2.add("郭嘉");
        child2.add("周瑜");
        childrenData.add(child2);
        List<String> child3 = new ArrayList<String>();
        child3.add("青龙偃月刀");
        child3.add("丈八蛇矛枪");
        child3.add("青钢剑");
        child3.add("麒麟弓");
        child3.add("银月枪");
        childrenData.add(child3);

    }
}

2.3 item.xml布局代码,动态获取布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="2dp"/>

</LinearLayout>

2.4 MyAdapter代码

package com.example.androd11.com.example.adapter;

import android.content.ClipData;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.androd11.R;

import java.util.List;

public class MyAdapter extends BaseExpandableListAdapter {
    //组数据
    List<String> groupDate;

    //子数据
    List<List<String>> childrenData;

    //上下文
    Context context;
    //构造函数
    public MyAdapter(List<String> groupDate, List<List<String>> childrenData, Context context) {
        this.groupDate = groupDate;
        this.childrenData = childrenData;
        this.context = context;
    }

    @Override
    public int getGroupCount() {
        return groupDate.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return childrenData.get(groupPosition).size();  //先的到主的集合
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupDate.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return groupDate.get(groupPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }
   //设置组视图
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
       //返回View
        TextView ex;
        if (convertView ==null){
            ex=new TextView(context);
            convertView=ex;
        }else {
            ex= (TextView) convertView;
        }
        ex.setText(groupDate.get(groupPosition));
        ex.setTextSize(22);
        ex.setPadding(66,66,66,66); //设置边距位置
        return ex;


    }
    //设置子列表
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
         Item item;
        if (convertView ==null){
            convertView= LayoutInflater.from(context).inflate(R.layout.item,null);//动态加载资源文件
            item=new Item();
           item.iv=convertView.findViewById(R.id.img);
           item.tv=convertView.findViewById(R.id.title);
            convertView.setTag(item);
        }else {
            item= (Item) convertView.getTag();
        }
        item.tv.setText(childrenData.get(groupPosition).get(childPosition));
        item.iv.setImageResource(R.drawable.ic_launcher_foreground);  //设置图片
        return convertView;
    }
    class  Item{
        ImageView iv;
        TextView tv;

    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
}

3.画廊视图(Galley).
继承(Abs)按水平方向显示内容,并且可以手指直接拖动图片和移动,用来浏览图片,并且可以响应事件显示信息.

3.1 布局中的代码

<?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=".MainActivity">

    <Gallery
        android:id="@+id/grally1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spacing="6dp">

    </Gallery>



</LinearLayout>

3.2 活动中的代码

package com.example.android011;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.Toast;

import com.example.android011.com.example.adapter.MyAdapter1;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private int [] images={R.mipmap.one,R.mipmap.two,R.mipmap.ic_launcher};
    private Gallery gallery2;
    List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gallery2=findViewById(R.id.grally1);

        //适配器
        gallery2.setAdapter(new MyAdapter1(this,getData(),images));

       //设置点击事件
        gallery2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @SuppressLint("WrongConstant")
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this,""+gallery2.getSelectedItem(),0).show();
            }
        });
       //设置滑动事件
        gallery2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(MainActivity.this,""+gallery2.getSelectedItemPosition(),0).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        //设置中间被选中
        gallery2.setSelection(images.length/2);
    }
    public List<String> getData(){
        ArrayList<String> list = new ArrayList<String>();
        for (int i=0;i<90;i++){
            list.add("图"+(i+1));
        }
        return list;
    }
}

3.3 适配器中的代码(MyAdapter1)

package com.example.android011.com.example.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.example.android011.MainActivity;
import com.example.android011.R;

import java.util.List;

public class MyAdapter1 extends BaseAdapter {

    Context context;
    private List<String> list;
    private int [] imgs;

    public MyAdapter1(Context context, List<String> list, int[] imgs) {
        this.context=context;
        this.list=list;
        this.imgs=imgs;

    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView iv;
        if (convertView ==null){
            iv=new ImageView(context);
            convertView=iv;
        }else {
            iv= (ImageView) convertView;
        }
        iv.setImageResource(imgs[position]);
        return iv;
    }
}

4.网格布局(GridView)
是按照行和例的方式显示多个组件,通常显示图片或者图标等,首先需要在屏幕上添加GridView组件.使用标记.

4.1 layout_gridview.xml布局代码

<?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">

    <GridView
        android:id="@+id/grid_builder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="3">

    </GridView>

</LinearLayout>

4.2GridViewActivity代码

package com.example.android011;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridLayout;
import android.widget.GridView;

import com.example.android011.com.example.adapter.MyAdapter2;

import java.util.ArrayList;
import java.util.List;

public class GridViewActivity extends Activity {
    private GridView gv2;
    private ArrayList<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_gridview);
        gv2 = findViewById(R.id.grid_builder);

        gv2.setAdapter(new MyAdapter2(this, getData()));

    }

    public List<String> getData() {
        list = new ArrayList<String>();
        for (int i = 0; i < 8; i++) {
            list.add("图" + (i + 1));

        }
        return list;
    }
}

4.3 适配器代码(MyAdapter2)

<?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">

    <GridView
        android:id="@+id/grid_builder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="3">

    </GridView>

</LinearLayout>

5.HorizontalScrollView(水平滚动视图).
5.1布局文件

<?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">
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="水平滚动视图用于为其他组件添加滚动条.adasddqwdqwdqwdqwdqwdqwdqwdqwdqwdgfwef"/>
    </HorizontalScrollView>

</LinearLayout>
发布了60 篇原创文章 · 获赞 3 · 访问量 2191

猜你喜欢

转载自blog.csdn.net/ysy_1_2/article/details/104372754