【Android】9.2 内置行视图的分类和呈现效果

分类:C#、Android、VS2015;

创建日期:2016-02-18

一、简介

Android内置了很多行视图模板,在应用程序中可直接使用这些内置的视图来呈现列表项。

要在ListView中使用内置的行视图呈现列表项,只需要通过Android.Resource.Layout类的属性指定资源的ID即可。例如:

public class MainActivity : Activity
{
    ……
    protected override void OnCreate(Bundle bundle)
    {
        ……
         var listView1 = FindViewById<ListView>(Resource.Id.listView1);
        ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.TestListItem);
        listView1.Adapter = adapter;
   }
}

调用adapter对应的方法,可实现添加、删除、插入行的功能。例如:

adapter.Add("Hello");

二、运行截图

本示例演示如何利用继承自BaseAdapter<T>的类,用Android内置的行视图来呈现自定义的列表项。

在主界面中单击【例9-1 内置行视图的分类】,即进入该例子下面的导航界面:

选择某个内置视图的名称,即可在新的界面中呈现其外观效果。

1、TestListItem:带少量格式的单行文本项(行间距较小)。

2、SimpleListItem1:单行文本项(行间距较大)。

 

3、SimpleListItem2:双行文本项。

4、SimpleSelectableListItem:可多行选择的文本项。

 

5、SimpleListItemActivated1:单行文本项,与SimpleListItem1相似,但是它用背景色标识选择的项(可多选)。

6、SimpleListItemActivated2:双行文本项,与SimpleListItem2相似,但是它用背景色标识选择的项(可多选)。

 

7、SimpleListItemChecked:用“√”标识所选择的文本项(单选)。

8、SimpleListItemMultipleChoice:用复选框标识所选择的文本项(可多选)。

 

9、SimpleListItemSingleChoice:用单选按钮标识所选的文本项(单选)。

10、TwoLineListItem:双行文本项。

 

11、ActivityListItem:左侧可以带图像的单行文本项。

12、SelectDialogSingleChoice:对话框样式的单选按钮(字体较大)。

 

13、其他

除了上面列出的基本行视图以外,还有一些Android系统后来增加的内置视图,比如可折叠和展开的分组项(SimpleExpandableListItem1、SimpleExpandableListItem2)、……等,本项目包含所有章节示例的主界面就是利用可“折叠/展开”的内置视图实现的。

三、主要设计步骤

1、添加图片

先到Android SDK(API 23)的Samples文件夹下找到下面的图,然后将其拖放到项目的drawable文件夹下,并修改文件名添加前缀“ch09”,这样做的目的是为了方便区分是哪一章示例需要的图。

2、添加ch0901_BuildInViewsMain.axml文件

<?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">
    <TextView
        android:text="单击某项观察呈现效果"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="14dp"
        android:gravity="center_horizontal"
        android:paddingBottom="5dp" />
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView1" />
</LinearLayout>

3、添加ch0901_BuildInViewsResult.axml文件

<?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">
    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="14dp"
        android:gravity="center_horizontal"
        android:paddingBottom="5dp" />
    <View
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:background="#FF909090"
        android:layout_marginBottom="5dp" />
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView1" />
</LinearLayout>

4、添加ch0901MyBaseAdapter.cs文件

using System.Collections.Generic;
using Android.App;
using Android.Views;
using Android.Widget;

namespace MyDemos.SrcDemos
{
    public class ch0901TableItem
    {
        public string Heading { get; set; }
        public string SubHeading { get; set; }
        public int ImageResourceId { get; set; }
    }

    public class ch0901MyBaseAdapter : BaseAdapter<ch0901TableItem>
    {
        private List<ch0901TableItem> items;
        private Activity context;
        private string demoTyoe;
        public ch0901MyBaseAdapter(Activity context, List<ch0901TableItem> items, string demoTyoe)
        {
            this.context = context;
            this.items = items;
            this.demoTyoe = demoTyoe;
        }

        public override ch0901TableItem this[int position]
        {
            get { return items[position]; }
        }

        public override int Count
        {
            get { return items.Count; }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var listview1 = parent as ListView; //parent.FindViewById<ListView>(Resource.Id.listView1);
            var item = items[position];
            View view = null;
            switch(demoTyoe)
            {
                case "(1)TestListItem":
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.TestListItem, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(2)SimpleListItem1":
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(3)SimpleListItem2":
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem2, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = item.SubHeading;
                    break;
                case "(4)SimpleSelectableListItem":
                    listview1.ChoiceMode = ChoiceMode.Multiple;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleSelectableListItem, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(5)SimpleListItemActivated1":
                    listview1.ChoiceMode = ChoiceMode.Multiple;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemActivated1, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(6)SimpleListItemActivated2":
                    listview1.ChoiceMode = ChoiceMode.Multiple;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemActivated2, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = item.SubHeading;
                    break;
                case "(7)SimpleListItemChecked":
                    listview1.ChoiceMode = ChoiceMode.Single;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemChecked, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(8)SimpleListItemMultipleChoice":
                    listview1.ChoiceMode = ChoiceMode.Multiple;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemMultipleChoice, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(9)SimpleListItemSingleChoice":
                    listview1.ChoiceMode = ChoiceMode.Single;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItemSingleChoice, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
                case "(10)TwoLineListItem":
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.TwoLineListItem, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = item.SubHeading;
                    break;
                case "(11)ActivityListItem":
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.ActivityListItem, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    view.FindViewById<ImageView>(Android.Resource.Id.Icon).SetImageResource(item.ImageResourceId);
                    break;
                case "(12)SelectDialogSingleChoice":
                    listview1.ChoiceMode = ChoiceMode.Single;
                    view = context.LayoutInflater.Inflate(Android.Resource.Layout.SelectDialogSingleChoice, null);
                    view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Heading;
                    break;
            }
            return view;
        }
    }
}

5、添加ch0901BuildInViewsResult.cs文件

using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;

namespace MyDemos.SrcDemos
{
    [Activity(Label = "【例9-1】内置行视图的分类")]
    public class ch0901BuildInViewsResult : Activity
    {
        List<ch0901TableItem> items = new List<ch0901TableItem>();
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.ch0901_BuildInViewsResult);

            items.Add(new ch0901TableItem() { Heading = "蔬菜类(Vegetables)", SubHeading = "65项", ImageResourceId = Resource.Drawable.ch09Vegetables });
            items.Add(new ch0901TableItem() { Heading = "水果类(Fruits)", SubHeading = "17项", ImageResourceId = Resource.Drawable.ch09Fruits });
            items.Add(new ch0901TableItem() { Heading = "花蕾类(Flower Buds)", SubHeading = "5项", ImageResourceId = Resource.Drawable.ch09FlowerBuds });
            items.Add(new ch0901TableItem() { Heading = "豆类(Legumes)", SubHeading = "33项", ImageResourceId = Resource.Drawable.ch09Legumes });
            items.Add(new ch0901TableItem() { Heading = "圆疙瘩类(Bulbs)", SubHeading = "18项", ImageResourceId = Resource.Drawable.ch09Bulbs });
            items.Add(new ch0901TableItem() { Heading = "块茎类(Tubers)", SubHeading = "43项", ImageResourceId = Resource.Drawable.ch09Tubers });

            string demoType = Intent.GetStringExtra("demoType");
            var textView1 = FindViewById<TextView>(Resource.Id.textView1);
            textView1.Text= demoType;
            ch0901MyBaseAdapter adapter = new ch0901MyBaseAdapter(this, items, demoType);

            var listView1 = FindViewById<ListView>(Resource.Id.listView1);
            listView1.Adapter = adapter;
        }
    }
}

6、添加ch0901_BuildInViewsMain.axml文件

using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;

namespace MyDemos.SrcDemos
{
    [Activity(Label = "【例9-1】内置行视图的分类")]
    public class ch0901BuildInViewsMain : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.ch0901_BuildInViewsMain);
            List<string> list = new List<string>()
            {
                "(1)TestListItem",
                "(2)SimpleListItem1",
                "(3)SimpleListItem2",
                "(4)SimpleSelectableListItem",
                "(5)SimpleListItemActivated1",
                "(6)SimpleListItemActivated2",
                "(7)SimpleListItemChecked",
                "(8)SimpleListItemMultipleChoice",
                "(9)SimpleListItemSingleChoice",
                "(10)TwoLineListItem",
                "(11)ActivityListItem",
                "(12)SelectDialogSingleChoice",
            };
            ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.TestListItem);
            adapter.AddAll(list);
            var listView1 = FindViewById<ListView>(Resource.Id.listView1);
            listView1.Adapter = adapter;
            listView1.ItemClick += (s, e) =>
            {
                Intent intent = new Intent(this,typeof(ch0901BuildInViewsResult));
                intent.PutExtra("demoType", list[e.Position]);
                StartActivity(intent);
            };
        }
    }
}
时间: 2024-08-06 20:01:06

【Android】9.2 内置行视图的分类和呈现效果的相关文章

django关闭调试信息,打开内置错误视图

1 内置错误视图 Django内置处理HTTP错误的视图,主要错误及视图包括: 404错误:page not found视图 500错误:server error视图 400错误:bad request视图 如果想看到错误视图而不是调试信息,需要修改 项目名/setting.py文件的DEBUG项. DEBUG = False ALLOWED_HOSTS = ['*', ] 2 编写视图模板 在模板路径下编写自己的404.html,500.html,400.html等 404错误及视图 将请求地

为什么小视频源码中要内置那么多的分类模块?

倘若我们将市面上的所有短视频都下载下来进行对比,我们就会发现,大概所有的短视频软件都会有"视频分类"这个模块,这个在短视频源码中,各种视频分类是必不可少的一项. 那么,第一个问题来了:为什么小视频源码中要内置那么多的分类模块?因为分类模块越多,用户类型就越多,越精准,也越利于后期变现. 小视频可以涉足的领域有很多,比如音乐.舞蹈.母婴.科普.种草.购物.搞笑--多领域的精彩内容令人目不暇接,也吸引了更多类型的客户,每种类型的客户凭借其需求可以自主选择他们想看的视频,再辅以大数据算法的支

Android开发中内置apk程序

首先申明,这里的方法介绍是针对我司自己项目中的具体开发板而做的. Mg701内置APK有三种方式 一.         这种方法必须要自己编写Android.mk文件(关于Android.mk可以参考),在研发中,自己有源码时,可以将APK的源码包置于Android源码中(比如:alps/package/apps中),然后需要编写Android.mk文件.然后执行命令: ./makeMtk <project_name> remake android <module_name> 二.

存储、读取——Android应用程序内置的文件夹

1.将数据存储到应用程序的文件夹,并读写 Context提供了两个方法,打开应用程序文件夹的I/O,若文件不存在则创建 FileInputStream openFileInputStream(String fileName); FileOuputStream openFileOutputStream(String fileName,int mode); mode: 1. MODE_APPEND: 追加方式存储 2. MODE_PRIVATE: 私有方式存储,其他应用无法访问 3. MODE_WO

android编译自己 内置的jar做法

1.首先 android.mk LOCAL_PATH := $(call my-dir) # ============================================================ include $(CLEAR_VARS) LOCAL_SRC_FILES :=  java/com/xxx/xxx/xxx.java \ java/com/xxx/xxx/xxx2.java LOCAL_NO_STANDARD_LIBRARIES := true LOCAL_JAV

数据库:mysql内置功能-视图

一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql>

mysql 内置功能 视图介绍

之前的多表查询本质是把多张有关系的表连接在一起组成一张虚拟表,从而进行查询 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名], 用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意

mysql内置功能—视图

一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql>

14 MySQL 内置功能--视图/触发器

#视图 select * from course inner join teacher on course.teacher_id=teacher.tid; create view course2teacher as select * from course inner join teacher on course.teacher_id=teacher.tid; #触发器 CREATE TABLE cmd ( id INT PRIMARY KEY auto_increment, USER CHAR