• 系出名门Android(8) 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList


    [索引页]
    [源码下载]


    系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList


    作者:webabcd


    介绍
    在 Android 中使用各种控件(View)
    • TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
    • Gallery - 缩略图浏览器控件
    • ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)
    • GridView - 网格控件
    • ListView - 列表控件
    • ExpandableList - 支持展开/收缩功能的列表控件


    1、TextSwitcher 的 Demo
    textswitcher.xml
    代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent">

        
    <Button android:id="@+id/btnChange" android:layout_width="wrap_content"
            android:layout_height
    ="wrap_content" android:text="改变文字" />

        
    <!--
            TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
        
    -->
        
    <TextSwitcher android:id="@+id/textSwitcher"
            android:layout_width
    ="fill_parent" android:layout_height="wrap_content" />

    </LinearLayout>

    _TextSwitcher.java
    代码
    package com.webabcd.view;

    import java.util.Random;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.Button;
    import android.widget.TextSwitcher;
    import android.widget.TextView;
    import android.widget.ViewSwitcher;

    public class _TextSwitcher extends Activity implements ViewSwitcher.ViewFactory {

        @Override
        
    protected void onCreate(Bundle savedInstanceState) {
            
    // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            
    this.setContentView(R.layout.textswithcer);

            setTitle(
    "TextSwithcer");

            
    final TextSwitcher switcher = (TextSwitcher) findViewById(R.id.textSwitcher);
            
    // 指定转换器的 ViewSwitcher.ViewFactory
            switcher.setFactory(this);
            
            
    // 设置淡入和淡出的动画效果
            Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
            Animation out 
    = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
            switcher.setInAnimation(in);
            switcher.setOutAnimation(out);

            
    // 单击一次按钮改变一次文字
            Button btnChange = (Button) this.findViewById(R.id.btnChange);
            btnChange.setOnClickListener(
    new View.OnClickListener() {
                @Override
                
    public void onClick(View v) {
                    switcher.setText(String.valueOf(
    new Random().nextInt()));
                }
            });
        }

        
    // 重写 ViewSwitcher.ViewFactory 的 makeView(),返回一个 View
        @Override
        
    public View makeView() {
            TextView textView 
    = new TextView(this);
            textView.setTextSize(
    36);
            
    return textView;
        }
    }


    2、Gallery 的 Demo
    gallery.xml
    代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent">

        
    <!--
            Gallery - 缩略图浏览器控件
                spacing - 缩略图列表中各个缩略图之间的间距
        
    -->
        
    <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
            android:layout_height
    ="wrap_content" android:spacing="20px" />

    </LinearLayout>

    _Gallery.java
    代码
    package com.webabcd.view;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Gallery;
    import android.widget.ImageView;
    import android.widget.Toast;
    import android.widget.Gallery.LayoutParams;

    public class _Gallery extends Activity {

        @Override
        
    protected void onCreate(Bundle savedInstanceState) {
            
    // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            
    this.setContentView(R.layout.gallery);

            setTitle(
    "Gallery");

            Gallery gallery 
    = (Gallery) findViewById(R.id.gallery);
            
    // 为缩略图浏览器指定一个适配器
            gallery.setAdapter(new ImageAdapter(this));
            
    // 响应 在缩略图列表上选中某个缩略图后的 事件
            gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                
    public void onItemSelected(AdapterView<?> parent, View v,
                        
    int position, long id) {
                    Toast.makeText(_Gallery.
    this, String.valueOf(position), Toast.LENGTH_SHORT).show();
                }

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

                }
            });
        }

        
    // 继承 BaseAdapter 用以实现自定义的图片适配器
        public class ImageAdapter extends BaseAdapter {

            
    private Context mContext;

            
    public ImageAdapter(Context context) {
                mContext 
    = context;
            }

            
    public int getCount() {
                
    return mThumbIds.length;
            }

            
    public Object getItem(int position) {
                
    return position;
            }

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

            
    public View getView(int position, View convertView, ViewGroup parent) {
                ImageView image 
    = new ImageView(mContext);

                image.setImageResource(mThumbIds[position]);
                image.setAdjustViewBounds(
    true);
                image.setLayoutParams(
    new Gallery.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                
    return image;
            }
        }

        
    // 需要显示的图片集合
        private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
    }


    3、ImageSwitcher 的 Demo
    imageswitcher.xml
    代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent">

        
    <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"
            android:layout_height
    ="wrap_content" android:spacing="20px" />

        
    <!--
            ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)
        
    -->
        
    <ImageSwitcher android:id="@+id/imageSwitcher"
            android:layout_width
    ="fill_parent" android:layout_height="wrap_content" />

    </LinearLayout>

    _ImageSwitcher.java
    代码
    package com.webabcd.view;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.AnimationUtils;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.Gallery;
    import android.widget.ImageSwitcher;
    import android.widget.ImageView;
    import android.widget.ViewSwitcher;
    import android.widget.Gallery.LayoutParams;

    // 图片转换器的使用基本同文字转换器
    // 以下是一个用 ImageSwitcher + Gallery 实现的经典的图片浏览器的 Demo
    public class _ImageSwitcher extends Activity implements
            ViewSwitcher.ViewFactory {

        
    private ImageSwitcher mSwitcher;

        @Override
        
    protected void onCreate(Bundle savedInstanceState) {
            
    // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            
    this.setContentView(R.layout.imageswithcer);

            setTitle(
    "ImageSwithcer");

            mSwitcher 
    = (ImageSwitcher) findViewById(R.id.imageSwitcher);
            mSwitcher.setFactory(
    this);
            mSwitcher.setInAnimation(AnimationUtils.loadAnimation(
    this,
                    android.R.anim.fade_in));
            mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
    this,
                    android.R.anim.fade_out));

            Gallery gallery 
    = (Gallery) findViewById(R.id.gallery);
            gallery.setAdapter(
    new ImageAdapter(this));
            gallery.setOnItemSelectedListener(
    new AdapterView.OnItemSelectedListener() {
                @Override
                
    public void onItemSelected(AdapterView<?> parent, View v,
                        
    int position, long id) {
                    mSwitcher.setImageResource(mImageIds[position]);
                }

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

                }
            });
        }

        
    public class ImageAdapter extends BaseAdapter {

            
    private Context mContext;

            
    public ImageAdapter(Context context) {
                mContext 
    = context;
            }

            
    public int getCount() {
                
    return mThumbIds.length;
            }

            
    public Object getItem(int position) {
                
    return position;
            }

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

            
    public View getView(int position, View convertView, ViewGroup parent) {
                ImageView image 
    = new ImageView(mContext);

                image.setImageResource(mThumbIds[position]);
                image.setAdjustViewBounds(
    true);
                image.setLayoutParams(
    new Gallery.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                
    return image;
            }
        }

        
    private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };

        
    private Integer[] mImageIds = { R.drawable.icon01, R.drawable.icon02,
                R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };

        @Override
        
    public View makeView() {
            ImageView image 
    = new ImageView(this);
            image.setMinimumHeight(
    200);
            image.setMinimumWidth(
    200);
            image.setScaleType(ImageView.ScaleType.FIT_CENTER);
            image.setLayoutParams(
    new ImageSwitcher.LayoutParams(
                    LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            
    return image;
        }
    }


    4、GridView 的 Demo
    gridview.xml
    代码
    <?xml version="1.0" encoding="utf-8"?>

    <!--
        GridView - 网格控件
            numColumns="auto_fit" - 列数自适应
            stretchMode - 缩放模式(stretchMode="columnWidth" - 缩放与列宽大小同步)
    -->
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id
    ="@+id/gridView" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent" android:padding="10px"
        android:verticalSpacing
    ="10px" android:horizontalSpacing="10px"
        android:numColumns
    ="auto_fit" android:columnWidth="60px"
        android:stretchMode
    ="columnWidth" android:gravity="center">
    </GridView>

    _GridView.java
    代码
    package com.webabcd.view;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;

    public class _GridView extends Activity {

        @Override
        
    protected void onCreate(Bundle savedInstanceState) {
            
    // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            
    this.setContentView(R.layout.gridview);

            setTitle(
    "GridView");

            GridView gridView 
    = (GridView) findViewById(R.id.gridView);
            
    // 指定网格控件的适配器为自定义的图片适配器
            gridView.setAdapter(new ImageAdapter(this));
        }

        
    // 自定义的图片适配器
        public class ImageAdapter extends BaseAdapter {

            
    private Context mContext;

            
    public ImageAdapter(Context context) {
                mContext 
    = context;
            }

            
    public int getCount() {
                
    return mThumbIds.length;
            }

            
    public Object getItem(int position) {
                
    return position;
            }

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

            
    public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                
    if (convertView == null) {
                    imageView 
    = new ImageView(mContext);
                    imageView.setLayoutParams(
    new GridView.LayoutParams(4848));
                    imageView.setAdjustViewBounds(
    false);
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(
    5555);
                } 
    else {
                    imageView 
    = (ImageView) convertView;
                }

                imageView.setImageResource(mThumbIds[position]);

                
    return imageView;
            }

            
    // 网格控件所需图片数据的数据源
            private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,
                    R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };
        }
    }


    5、ListView 的 Demo
    main_list_adapter.xml
    代码
    <?xml version="1.0" encoding="utf-8"?>
    <!--
        自定义列表适配器的 layout
    -->
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="horizontal" android:layout_width="fill_parent"
        android:layout_height
    ="fill_parent">
        
        
    <TextView android:id="@+id/text" android:layout_width="wrap_content"
            android:layout_height
    ="wrap_content" android:textSize="16sp">
        
    </TextView>
        
    </LinearLayout>

    MainListAdapter.java
    代码
    package com.webabcd.view;

    import java.util.List;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;

    // 继承 BaseAdapter 以实现自定义的列表适配器
    public class MainListAdapter extends BaseAdapter {

        
    private LayoutInflater mInflater;
        
    private List<String> mData;

        
    public MainListAdapter(Context context, List<String> data) {
            mInflater 
    = LayoutInflater.from(context);
            mData 
    = data;
        }

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

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

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

        @Override
        
    public View getView(int position, View convertView, ViewGroup parent) {

            TextView text;

            
    if (convertView == null) {
                
    // 指定一个 layout 作为自定义列表适配器的 layout
                convertView = mInflater.inflate(R.layout.main_list_adapter, null);
                text 
    = (TextView) convertView.findViewById(R.id.text);
                convertView.setTag(text);
            } 
    else {
                text 
    = (TextView) convertView.getTag();
            }
            
            String mItem 
    = mData.get(position);
            text.setText(mItem);
            
            
    return convertView;
        }
    }

    Main.java
    代码
    package com.webabcd.view;

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

    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ListView;

    // 此处要继承 ListActivity ,用以实现 ListView 的功能
    public class Main extends ListActivity {
        
        
    private List<String> mData;
        
        
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);

            setTheme(android.R.style.Theme_Light);
            setContentView(R.layout.main);        
            mData 
    = getData();
            
            
    // 使用自定义的列表适配器来展现数据
            MainListAdapter adapter = new MainListAdapter(this, mData);
            
            
    // 如需使用系统内置的列表适配器,则可以使用类似如下的方法
            
    // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, mData);
            
            
    this.setListAdapter(adapter);
        }

        
    // ListView 的数据源
        private List<String> getData()    {
            List
    <String> items = new ArrayList<String>();
            
            items.add(
    "TextView");
            items.add(
    "Button");
            items.add(
    "ImageButton");
            items.add(
    "ImageView");
            items.add(
    "CheckBox");
            items.add(
    "RadioButton");
            items.add(
    "AnalogClock");
            items.add(
    "DigitalClock");
            items.add(
    "DatePicker");
            items.add(
    "TimePicker");
            items.add(
    "ToggleButton");
            items.add(
    "EditText");
            items.add(
    "ProgressBar");
            items.add(
    "SeekBar");
            items.add(
    "AutoCompleteTextView");
            items.add(
    "MultiAutoCompleteTextView");
            items.add(
    "ZoomControls");
            items.add(
    "Include");
            items.add(
    "VideoView");
            items.add(
    "WebView");
            items.add(
    "RatingBar");
            items.add(
    "Tab");
            items.add(
    "Spinner");
            items.add(
    "Chronometer");
            items.add(
    "ScrollView");
            items.add(
    "TextSwitcher");
            items.add(
    "ListView");
            items.add(
    "Gallery");
            items.add(
    "ImageSwitcher");
            items.add(
    "GridView");
            items.add(
    "ExpandableList");
             
            
    return items;
        }

        
    // ListView 中某项被选中后的逻辑
        @Override
        
    protected void onListItemClick(ListView l, View v, int position, long id) {
            Intent intent 
    = new Intent();
            intent.setClassName(
    this"com.webabcd.view._" + mData.get(position));

            startActivityForResult(intent, 
    0);
        }
    }


    6、ExpandableList 的 Demo
    _ExpandableList.java
    代码
    package com.webabcd.view;

    import android.app.ExpandableListActivity;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.Gravity;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.widget.AbsListView;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.ExpandableListView.ExpandableListContextMenuInfo;

    // ExpandableList - 可展开/收缩列表
    // 继承 ExpandableListActivity 以实现列表的可展开/收缩的功能
    public class _ExpandableList extends ExpandableListActivity {
        
        
    private ExpandableListAdapter mAdapter;

        @Override
        
    protected void onCreate(Bundle savedInstanceState) {
            
    // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            setTitle(
    "ExpandableList");
            
            mAdapter 
    = new MyExpandableListAdapter();
            setListAdapter(mAdapter);
            registerForContextMenu(
    this.getExpandableListView());
        }

        
    // 为列表的每一项创建上下文菜单(即长按后呼出的菜单) 
        @Override
        
    public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            menu.setHeaderTitle(
    "ContextMenu");
            menu.add(
    000"ContextMenu");
        }

        
    // 单击上下文菜单后的逻辑
        @Override
        
    public boolean onContextItemSelected(MenuItem item) {
            ExpandableListContextMenuInfo info 
    = (ExpandableListContextMenuInfo) item.getMenuInfo();
            String title 
    = ((TextView) info.targetView).getText().toString();

            
    int type = ExpandableListView.getPackedPositionType(info.packedPosition);
            
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                
    int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
                
    int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
                
                Toast.makeText(
    this, title + " - Group Index: " + groupPos + " Child Index: " + childPos, Toast.LENGTH_SHORT).show();
                
                
    return true;
            } 
    else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                
    int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
                Toast.makeText(
    this, title + " - Group Index: " + groupPos, Toast.LENGTH_SHORT).show();
                
                
    return true;
            }

            
    return false;
        }

        
    public class MyExpandableListAdapter extends BaseExpandableListAdapter {

            
    // 父列表数据
            private String[] groups = 
            { 
                
    "group1"
                
    "group2"
                
    "group3",
                
    "group4" 
            };
            
    // 子列表数据
            private String[][] children = 
            {
                { 
    "child1" },
                { 
    "child1""child2" },
                { 
    "child1""child2""child3" },
                { 
    "child1""child2""child3""child4" }
            };
            
            @Override
            
    public Object getChild(int groupPosition, int childPosition) {
                
    return children[groupPosition][childPosition];
            }

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

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

            
    // 取子列表中的某一项的 View
            @Override
            
    public View getChildView(int groupPosition, int childPosition,
                    
    boolean isLastChild, View convertView, ViewGroup parent) {
                TextView textView 
    = getGenericView();
                textView.setText(getChild(groupPosition, childPosition).toString());
                
    return textView;
            }

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

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

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

            
    // 取父列表中的某一项的 View
            @Override
            
    public View getGroupView(int groupPosition, boolean isExpanded,
                    View convertView, ViewGroup parent) {
                TextView textView 
    = getGenericView();
                textView.setText(getGroup(groupPosition).toString());
                
    return textView;
            }

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

            @Override
            
    public boolean isChildSelectable(int groupPosition, int childPosition) {
                
    return true;
            }
                    
            
    // 获取某一项的 View 的逻辑
            private TextView getGenericView() {
                AbsListView.LayoutParams lp 
    = new AbsListView.LayoutParams(
                        ViewGroup.LayoutParams.FILL_PARENT, 
    48);
                TextView textView 
    = new TextView(_ExpandableList.this);
                textView.setLayoutParams(lp);
                textView.setGravity(Gravity.CENTER_VERTICAL 
    | Gravity.LEFT);
                textView.setPadding(
    32000);
                
    return textView;
            }
        }
    }


    OK
    [源码下载]
  • 相关阅读:
    redis运维手册
    grafana展示ES中的nginx日志-地图展示
    nginx针对yum安装nginx重编译
    K8S-yaml里初始化容器
    K8S-资源配置清单补充1
    K8S-资源配置清单详解
    Docker cp 提示“no space left on device”
    磁盘
    ansible 对文件内容的操作
    ansible 初始化系统分区格式化
  • 原文地址:https://www.cnblogs.com/webabcd/p/1657171.html
Copyright © 2020-2023  润新知