展示
目录
样式
-
Resources/drawable/blue_icon.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#65bcfd"/>
<corners android:radius="15dp"/>
<size android:width="15dp" android:height="15dp"/>
</shape>
</item>
</selector>
-
Resources/drawable/green_icon.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#6cd6c3"/>
<corners android:radius="15dp"/>
<size android:width="15dp" android:height="15dp"/>
</shape>
</item>
</selector>
-
Resources/drawable/btn_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#2559fe"/>
<corners android:radius="30dp"/>
</shape>
</item>
</selector>
-
Resources/drawable/item_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="15dp"/>
<solid android:color="#ffffff"/>
</shape>
</item>
</selector>
根布局 Resources/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
<include layout="@layout/content" />
</RelativeLayout>
主布局 Resources/layout/content.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f9f8"
android:padding="10dp">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:scrollbars="none"
android:divider="@android:color/transparent"
android:dividerHeight="10dp"/>
scrollbars 去掉滚动条
overScrollMode 去掉上下滚动阴影
divider 分割线颜色
dividerHeight 分割线高度
</RelativeLayout>
单条布局 Resources/layout/list_item.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="wrap_content"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:background="@drawable/item_bg">
<!--Header-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:id="@+id/start_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="24dp"
android:textColor="#333333"
android:text="XX"/>
<ImageView
android:id="@+id/go_icon"
android:layout_toRightOf="@id/start_city"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:src="@drawable/go_icon"/>
<TextView
android:id="@+id/end_city"
android:layout_toRightOf="@id/go_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="24dp"
android:textColor="#333333"
android:text="XX"/>
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:textSize="12dp"
android:textColor="#999999"
android:text="xxxx-xx-xx xx"/>
</RelativeLayout>
<!--Content-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#f5f9fb"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp">
<TextView
android:id="@+id/start_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:background="@drawable/blue_icon"
android:textColor="#ffffff"
android:textSize="10dp"
android:text="起"/>
<TextView
android:id="@+id/start_address"
android:layout_toRightOf="@id/start_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="#333333"
android:textSize="12dp"
android:text="XXXXXX"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp">
<TextView
android:id="@+id/end_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:background="@drawable/green_icon"
android:textColor="#ffffff"
android:textSize="10dp"
android:text="起"/>
<TextView
android:id="@+id/end_address"
android:layout_toRightOf="@id/end_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="#333333"
android:textSize="12dp"
android:text="XXXXXX"/>
</RelativeLayout>
</LinearLayout>
<!-- Footer -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:id="@+id/price_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/price"
android:layout_marginRight="5dp"
android:textSize="12dp"
android:textColor="#333333"
android:text="¥"/>
<TextView
android:id="@+id/price"
android:layout_toRightOf="@id/price_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:textSize="24dp"
android:textColor="#333333"
android:text="000"/>
<TextView
android:id="@+id/name"
android:layout_toRightOf="@id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="12dp"
android:textColor="#c1c4cb"
android:text="xxxxxx"/>
<View
android:id="@+id/line"
android:layout_toRightOf="@id/name"
android:layout_width="1dp"
android:layout_height="15dp"
android:background="#c1c4cb"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"/>
<TextView
android:id="@+id/distance"
android:layout_toRightOf="@id/line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="12dp"
android:textColor="#c1c4cb"
android:text="xxxx"/>
<Button
android:id="@+id/go_btn"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:background="@drawable/btn_bg"
android:textColor="#ffffff"
android:textSize="13dp"
android:text="立即出发"/>
</RelativeLayout>
</LinearLayout>
行程类 Scripts/TripInfo.cs
namespace android_by_csharp.Scripts
{
public class TripInfo
{
public readonly string StartCity;
public readonly string EndCity;
public readonly string Time;
public readonly string StartAddress;
public readonly string EndAddress;
public readonly float Price;
public readonly string Name;
public readonly string Distance;
public TripInfo(string startCity, string endCity, string time, string startAddress, string endAddress, float price, string name, string distance)
{
StartCity = startCity;
EndCity = endCity;
Time = time;
StartAddress = startAddress;
EndAddress = endAddress;
Price = price;
Name = name;
Distance = distance;
}
}
}
行程Adapter Scripts/TripInfoAdapter.cs
using System;
using System.Collections.Generic;
using Android.Content;
using Android.Views;
using Android.Widget;
using Object = Java.Lang.Object;
namespace android_by_csharp.Scripts
{
public class TripInfoAdapter : BaseAdapter
{
private readonly List<TripInfo> _tripInfos;
private readonly LayoutInflater _context;
public TripInfoAdapter(Context context, List<TripInfo> tripInfos)
{
_tripInfos = tripInfos;
_context = LayoutInflater.From(context);
}
public override Object GetItem(int position)
{
return null;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
convertView = _context.Inflate(Resource.Layout.list_item, parent, false);
var startCity = (TextView)convertView?.FindViewById(Resource.Id.start_city);
if (startCity != null) startCity.Text = _tripInfos[position].StartCity;
var endCity = (TextView)convertView?.FindViewById(Resource.Id.end_city);
if (endCity != null) endCity.Text = _tripInfos[position].EndCity;
var time = (TextView)convertView?.FindViewById(Resource.Id.time);
if (time != null) time.Text = _tripInfos[position].Time;
var startAddress = (TextView)convertView?.FindViewById(Resource.Id.start_address);
if (startAddress != null) startAddress.Text = _tripInfos[position].StartAddress;
var endAddress = (TextView)convertView?.FindViewById(Resource.Id.end_address);
if (endAddress != null) endAddress.Text = _tripInfos[position].EndAddress;
var price = (TextView)convertView?.FindViewById(Resource.Id.price);
if (price != null) price.Text = _tripInfos[position].Price.ToString();
var name = (TextView)convertView?.FindViewById(Resource.Id.name);
if (name != null) name.Text = _tripInfos[position].Name;
var distance = (TextView)convertView?.FindViewById(Resource.Id.distance);
if (distance != null) distance.Text = _tripInfos[position].Distance;
var goBtn = (Button)convertView?.FindViewById(Resource.Id.go_btn);
if (goBtn != null)
goBtn.Click += (sender, args) =>
{
var data = _tripInfos[position];
Console.WriteLine(data);
};
return convertView;
}
public override int Count => _tripInfos.Count;
}
}
MainActivity.cs
using System.Collections.Generic;
using android_by_csharp.Scripts;
using Android.App;
using Android.OS;
using Android.Widget;
namespace android_by_csharp
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.main);
var listView = (ListView)FindViewById(Resource.Id.list_view);
var list = new List<TripInfo>
{
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"),
new TripInfo("宝坻", "天津", "2020-02-02 下午", "宝坻区", "天津市", 12.5f, "ProsperLee", "42.123km")
};
var tripInfoAdapter = new TripInfoAdapter(this, list);
if (listView != null) listView.Adapter = tripInfoAdapter;
}
}
}
新增数据
<Button
android:id="@+id/add_btn"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/btn_bg"
android:textColor="#ffffff"
android:text="新增"/>
// Scripts/TripInfoAdapter.cs
public void Add(TripInfo tripInfo)
{
_tripInfos.Add(tripInfo);
NotifyDataSetChanged(); // 刷新
}
// MainActivity.cs
var addBtn = (Button)FindViewById(Resource.Id.add_btn);
addBtn.Click += (sender, args) =>
{
tripInfoAdapter.Add(new TripInfo("天津", "北京", "2020-01-01 上午", "天津市南开区", "北京故宫", 100f, "张三", "80km"));
};