android高级控件1

Android高级控件有很多,今天就先写三个

1.Spinner(下拉框)

比较实用的是二级联动,下面是代码:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android_08.MainActivity">

    <Spinner
        android:id="@+id/spin_province"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Spinner
        android:id="@+id/spin_city"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
java代码:

package com.example.android_08;

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.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 Spinner provinceSpinner;
    private Spinner citySpinner;
    ArrayAdapter<String> provinceAdapter;
    ArrayAdapter<String> cityAdapter;
    private String[] province = new String[] {"湖南","湖北","河南"};
    private String[][] city = new String[][]{{"1.1", "1.2", "1.3" }, { "2.1", "2.2", "2.3"}, { "3.1", "3.2", "3.3"}};
    private List<Map<String, Object>> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<>();
        int images[]={R.drawable.dog,R.drawable.elephant,R.drawable.fox};
        for (int i = 0; i < province.length; i++) {
            Map<String,Object> map=new HashMap<>();
            map.put("title",province[i]);
            map.put("image",images[i]);
            list.add(map);
        }
        setSpinner();
    }
    private void setSpinner() {
        provinceSpinner = (Spinner)findViewById(R.id.spin_province);
        citySpinner = (Spinner)findViewById(R.id.spin_city);
        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});
        //provinceAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, province);
        provinceSpinner.setAdapter(adapterSpinner);
        provinceSpinner.setSelection(0,true);
        cityAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, city[0]);
        citySpinner.setAdapter(cityAdapter);
        citySpinner.setSelection(0,true);
        provinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3)
            {
                cityAdapter = new ArrayAdapter<String>(
                        MainActivity.this, android.R.layout.simple_spinner_item, city[position]);
                citySpinner.setAdapter(cityAdapter);
            }
            @Override
            public void onNothingSelected(AdapterView<?> arg0)
            {
            }
        });
    }
}

2.ListView(列表控件)  实现的是设置列表显示

布局代码:这是设置ListView的控件

<?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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_main_test"
        >

    </ListView>
</LinearLayout>
设置一个布局文件,用来设置里面的列表选项
<?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">
    <ImageView
        android:id="@+id/addexam_list_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/addexam_list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ffffff"
        android:textSize="30sp"
        />
</LinearLayout>

设置一个布局文件,设置内容
<?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">

    <TextView
        android:id="@+id/addexam_list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:textSize="25sp"
        />
</LinearLayout>
java代码
package com.example.android_08;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by lx on 2017/6/8.
 */

public class ListActivity extends AppCompatActivity{

    private ListView lv_main_test;
    private List<String> list;
    private List<String> groupKey=new ArrayList<>();
    private List<String> alist=new ArrayList<>();
    private List<String> blist=new ArrayList<>();
    private List<String> clist=new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listview);
        lv_main_test = (ListView) findViewById(R.id.lv_main_test);
        initData();
        MyAdapter adapter=new MyAdapter();
        lv_main_test.setAdapter(adapter);

    };
    public void initData(){
        list = new ArrayList<String>();
        groupKey.add("A组");
        groupKey.add("B组");
        groupKey.add("C组");
        for (int i = 0; i <3 ; i++) {
            alist.add("a"+i);
        }
        list.add("A组");
        list.addAll(alist);

        for (int i = 0; i <3 ; i++) {
            blist.add("b"+i);
        }
        list.add("B组");
        list.addAll(blist);

        for (int i = 0; i <3 ; i++) {
            clist.add("c"+i);
        }
        list.add("C组");
        list.addAll(clist);
    }
    //编写自己的适配器
    class MyAdapter extends BaseAdapter{
        @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 boolean isEnabled(int position) {
            if(groupKey.contains(getItem(position))){
                return false;
            }
            return super.isEnabled(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view=convertView;
            if(groupKey.contains(getItem(position))){
                view= LayoutInflater.from(getApplicationContext()).inflate(R.layout.addexam_list_item, null);
            }else{
                view=LayoutInflater.from(getApplicationContext()).inflate(R.layout.addexam_list_item_tag, null);
            }
            TextView text=(TextView) view.findViewById(R.id.addexam_list_item_text);
            text.setText((CharSequence)getItem(position));
            return view;
        }
    }
}
3.ExpandableListView(可扩展列表控件)可以做到的功能     QQ列表的下拉框收缩功能

布局文件:设置控件就可以了。

<?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">
    <ExpandableListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/elv_main_test">
    </ExpandableListView>
</LinearLayout>

Java代码:

package com.example.android_08;

import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by lx on 2017/6/8.
 */

public class ExapandableListView extends AppCompatActivity {
    private ExpandableListView elv_main_test;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expandablelistview);
        elv_main_test = (ExpandableListView) findViewById(R.id.elv_main_test);
        expandable e=new expandable();
        elv_main_test.setAdapter(e);
    }
    class expandable implements ExpandableListAdapter {
        int logos[]={
                R.drawable.dog,
                R.drawable.elephant,
                R.drawable.fox
        };
        String key[]={
                "鸟",
                "猫",
                "鸡"
        };
        String context[][]={
                {"鸟1","鸟2","鸟3"},
                {"猫1","猫2","猫3"},
                {"鸡1","鸡2","鸡3"}
        };

        @Override
        public void registerDataSetObserver(DataSetObserver observer) {

        }

        @Override
        public void unregisterDataSetObserver(DataSetObserver observer) {

        }

        @Override
        public int getGroupCount() {
            return key.length;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return context[groupPosition].length;
        }

        @Override
        public Object getGroup(int groupPosition) {
            return key[groupPosition];
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return context[groupPosition][childPosition];
        }

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

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

        @Override
        public boolean hasStableIds() {
            return true;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            LinearLayout ll = new LinearLayout(ExapandableListView.this);
            ll.setOrientation(LinearLayout.HORIZONTAL);
            ImageView logo = new ImageView(ExapandableListView.this);
            logo.setImageResource(logos[groupPosition]);
            logo.setPadding(36, 15, 0, 0);
            ll.addView(logo);
            TextView textView =getTextView();
            textView.setText(getGroup(groupPosition).toString());
            textView.setPadding(10, 0, 0, 0);
            ll.addView(textView);
            return ll;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            TextView textView = getTextView();
            textView.setText(getChild(groupPosition, childPosition).toString());
            return textView;
        }
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }

        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }

        @Override
        public boolean isEmpty() {
            return false;
        }

        @Override
        public void onGroupExpanded(int groupPosition) {

        }

        @Override
        public void onGroupCollapsed(int groupPosition) {

        }

        @Override
        public long getCombinedChildId(long groupId, long childId) {
            return 0;
        }

        @Override
        public long getCombinedGroupId(long groupId) {
            return 0;
        }
        private TextView getTextView() {
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
            TextView textView = new TextView(ExapandableListView.this);
            textView.setLayoutParams(lp);
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            textView.setPadding(36, 0, 0, 0);
            textView.setTextSize(20);
            return textView;
        }
    }
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值