首页 技术 正文
技术 2022年11月21日
0 收藏 784 点赞 2,747 浏览 49735 个字

实现效果:

Android之自定义控件-城市选择

Android之自定义控件-城市选择

图片素材: Android之自定义控件-城市选择  Android之自定义控件-城市选择 Android之自定义控件-城市选择  Android之自定义控件-城市选择  Android之自定义控件-城市选择  Android之自定义控件-城市选择

–> 首先, 城市数据字节放在 Json 文件, 就不网络获取了.

  city.json 存放 Json 数据:

 {
"result": "0",
"message": "接口通信成功!",
"responseData": {
"History": [],
"Recent": [],
"Hot": [
{
"id": "226",
"cityName": "上海"
},
{
"id": "447",
"cityName": "北京"
},
{
"id": "221",
"cityName": "南京"
},
{
"id": "220",
"cityName": "苏州"
},
{
"id": "261",
"cityName": "杭州"
},
{
"id": "476",
"cityName": "天津"
}
],
"Common": [
{
"title": "A",
"items": [
{
"id": 664,
"cityName": "安庆"
},
{
"id": 3590,
"cityName": "安吉县"
}
]
},
{
"title": "B",
"items": [
{
"id": 3612,
"cityName": "巴州"
},
{
"id": 3366,
"cityName": "白银"
},
{
"id": 910,
"cityName": "蚌埠"
},
{
"id": 2818,
"cityName": "保定"
},
{
"id": 1068,
"cityName": "北海"
},
{
"id": 447,
"cityName": "北京"
},
{
"id": 882,
"cityName": "滨州"
},
{
"id": 2119,
"cityName": "亳州"
},
{
"id": 3449,
"cityName": "博尔塔拉蒙古自治州"
},
{
"id": 2202,
"cityName": "滨海县"
},
{
"id": 2462,
"cityName": "滨海新区大港"
},
{
"id": 2463,
"cityName": "滨海新区塘沽"
},
{
"id": 2464,
"cityName": "滨海新区汉沽"
},
{
"id": 2788,
"cityName": "宝应县"
},
{
"id": 3452,
"cityName": "博乐"
},
{
"id": 3487,
"cityName": "霸州"
}
]
},
{
"title": "C",
"items": [
{
"id": 1889,
"cityName": "沧州"
},
{
"id": 2611,
"cityName": "昌吉自治州"
},
{
"id": 2329,
"cityName": "长春"
},
{
"id": 651,
"cityName": "长沙"
},
{
"id": 2926,
"cityName": "长治"
},
{
"id": 237,
"cityName": "常州"
},
{
"id": 1959,
"cityName": "朝阳"
},
{
"id": 3339,
"cityName": "潮州"
},
{
"id": 279,
"cityName": "成都"
},
{
"id": 3527,
"cityName": "承德"
},
{
"id": 2095,
"cityName": "池州"
},
{
"id": 2303,
"cityName": "赤峰"
},
{
"id": 901,
"cityName": "滁州"
},
{
"id": 621,
"cityName": "重庆"
},
{
"id": 920,
"cityName": "崇明县"
},
{
"id": 2275,
"cityName": "曹县"
},
{
"id": 2620,
"cityName": "慈溪"
},
{
"id": 2709,
"cityName": "常熟"
},
{
"id": 2779,
"cityName": "茌平县"
},
{
"id": 3066,
"cityName": "巢湖"
},
{
"id": 3135,
"cityName": "长丰县"
},
{
"id": 3630,
"cityName": "昌黎县"
},
{
"id": 3640,
"cityName": "章丘"
},
{
"id": 3657,
"cityName": "崇州"
}
]
},
{
"title": "D",
"items": [
{
"id": 3384,
"cityName": "达卡(孟加拉国)"
},
{
"id": 1699,
"cityName": "大连"
},
{
"id": 2700,
"cityName": "大庆"
},
{
"id": 2290,
"cityName": "大同"
},
{
"id": 579,
"cityName": "德州"
},
{
"id": 3351,
"cityName": "定州"
},
{
"id": 254,
"cityName": "东莞"
},
{
"id": 1748,
"cityName": "东营"
},
{
"id": 2208,
"cityName": "德清县"
},
{
"id": 2286,
"cityName": "东海县"
},
{
"id": 2608,
"cityName": "定远县"
},
{
"id": 2715,
"cityName": "东台"
},
{
"id": 3101,
"cityName": "砀山县"
},
{
"id": 3150,
"cityName": "大厂县"
},
{
"id": 3166,
"cityName": "东乡县"
},
{
"id": 3281,
"cityName": "丹阳"
},
{
"id": 3406,
"cityName": "东明县"
},
{
"id": 3618,
"cityName": "大悟县"
},
{
"id": 3643,
"cityName": "敦煌"
},
{
"id": 3661,
"cityName": "大名县"
}
]
},
{
"title": "F",
"items": [
{
"id": 2176,
"cityName": "佛山"
},
{
"id": 801,
"cityName": "福州"
},
{
"id": 3165,
"cityName": "抚州"
},
{
"id": 2881,
"cityName": "阜阳"
},
{
"id": 2262,
"cityName": "富锦"
},
{
"id": 2399,
"cityName": "凤阳县"
},
{
"id": 3157,
"cityName": "繁峙县"
},
{
"id": 3162,
"cityName": "丰县"
},
{
"id": 3297,
"cityName": "阜南县"
},
{
"id": 3441,
"cityName": "奉化"
},
{
"id": 3508,
"cityName": "阜宁县"
},
{
"id": 3509,
"cityName": "肥东县"
},
{
"id": 3541,
"cityName": "肥西县"
},
{
"id": 3544,
"cityName": "凤台县"
}
]
},
{
"title": "G",
"items": [
{
"id": 2976,
"cityName": "赣州"
},
{
"id": 3472,
"cityName": "广元"
},
{
"id": 1969,
"cityName": "广州"
},
{
"id": 709,
"cityName": "贵阳"
},
{
"id": 898,
"cityName": "桂林"
},
{
"id": 2002,
"cityName": "高唐县"
},
{
"id": 2129,
"cityName": "灌南县"
},
{
"id": 2224,
"cityName": "固始县"
},
{
"id": 2518,
"cityName": "赣榆县"
},
{
"id": 2734,
"cityName": "高密"
},
{
"id": 2746,
"cityName": "高邮"
},
{
"id": 2752,
"cityName": "灌云县"
},
{
"id": 2819,
"cityName": "高碑店"
},
{
"id": 3060,
"cityName": "古交"
},
{
"id": 3385,
"cityName": "孤山1"
},
{
"id": 3455,
"cityName": "沽源县"
},
{
"id": 3490,
"cityName": "固镇县"
},
{
"id": 3502,
"cityName": "贵溪"
},
{
"id": 3589,
"cityName": "瓜州县"
},
{
"id": 3614,
"cityName": "广德县"
},
{
"id": 3619,
"cityName": "古田县"
},
{
"id": 3634,
"cityName": "格尔木"
},
{
"id": 3699,
"cityName": "高安"
}
]
},
{
"title": "H",
"items": [
{
"id": 558,
"cityName": "哈尔滨"
},
{
"id": 2104,
"cityName": "海口"
},
{
"id": 3633,
"cityName": "海西蒙古族藏族自治州"
},
{
"id": 2233,
"cityName": "邯郸"
},
{
"id": 3652,
"cityName": "韩国首尔"
},
{
"id": 2845,
"cityName": "汉中"
},
{
"id": 261,
"cityName": "杭州"
},
{
"id": 639,
"cityName": "合肥"
},
{
"id": 895,
"cityName": "菏泽"
},
{
"id": 1074,
"cityName": "贺州"
},
{
"id": 3372,
"cityName": "鹤壁"
},
{
"id": 3611,
"cityName": "衡阳"
},
{
"id": 645,
"cityName": "呼和浩特"
},
{
"id": 2205,
"cityName": "湖州"
},
{
"id": 3397,
"cityName": "葫芦岛"
},
{
"id": 594,
"cityName": "淮安"
},
{
"id": 699,
"cityName": "淮北"
},
{
"id": 1953,
"cityName": "淮南"
},
{
"id": 3124,
"cityName": "黄冈"
},
{
"id": 2451,
"cityName": "黄山"
},
{
"id": 255,
"cityName": "惠州"
},
{
"id": 1774,
"cityName": "海安县"
},
{
"id": 1840,
"cityName": "海阳"
},
{
"id": 2347,
"cityName": "海门"
},
{
"id": 2356,
"cityName": "黄骅"
},
{
"id": 2878,
"cityName": "霍山县"
},
{
"id": 3125,
"cityName": "红安县"
},
{
"id": 3266,
"cityName": "洪泽县"
},
{
"id": 3291,
"cityName": "怀来县"
},
{
"id": 3494,
"cityName": "霍邱县"
}
]
},
{
"title": "J",
"items": [
{
"id": 771,
"cityName": "吉林"
},
{
"id": 470,
"cityName": "济南"
},
{
"id": 996,
"cityName": "济宁"
},
{
"id": 2230,
"cityName": "佳木斯"
},
{
"id": 1536,
"cityName": "嘉兴"
},
{
"id": 1777,
"cityName": "嘉峪关"
},
{
"id": 2242,
"cityName": "焦作"
},
{
"id": 2893,
"cityName": "揭阳"
},
{
"id": 654,
"cityName": "金华"
},
{
"id": 2543,
"cityName": "锦州"
},
{
"id": 2759,
"cityName": "晋城"
},
{
"id": 2316,
"cityName": "晋中"
},
{
"id": 2076,
"cityName": "荆门"
},
{
"id": 2070,
"cityName": "景德镇"
},
{
"id": 702,
"cityName": "九江"
},
{
"id": 1781,
"cityName": "酒泉"
},
{
"id": 1723,
"cityName": "蓟县"
},
{
"id": 2110,
"cityName": "巨野县"
},
{
"id": 2163,
"cityName": "金乡县"
},
{
"id": 2496,
"cityName": "靖江"
},
{
"id": 2584,
"cityName": "句容"
},
{
"id": 2629,
"cityName": "江阴"
},
{
"id": 2656,
"cityName": "莒南县"
},
{
"id": 2791,
"cityName": "嘉祥县"
},
{
"id": 2923,
"cityName": "吉木萨尔县"
},
{
"id": 3000,
"cityName": "莒县"
},
{
"id": 3034,
"cityName": "胶州"
},
{
"id": 3213,
"cityName": "金湖县"
},
{
"id": 3219,
"cityName": "建湖县"
},
{
"id": 3256,
"cityName": "鄄城县"
},
{
"id": 3294,
"cityName": "静海县"
},
{
"id": 3403,
"cityName": "金坛"
},
{
"id": 3428,
"cityName": "嘉峪关"
},
{
"id": 3539,
"cityName": "金寨县"
},
{
"id": 3548,
"cityName": "泾县"
},
{
"id": 3578,
"cityName": "绩溪县"
},
{
"id": 3600,
"cityName": "介休"
},
{
"id": 3677,
"cityName": "嘉善县"
},
{
"id": 3706,
"cityName": "吉首"
}
]
},
{
"title": "K",
"items": [
{
"id": 907,
"cityName": "开封"
},
{
"id": 1833,
"cityName": "昆明"
},
{
"id": 2824,
"cityName": "昆山"
},
{
"id": 3540,
"cityName": "康保县"
},
{
"id": 3613,
"cityName": "库尔勒"
}
]
},
{
"title": "L",
"items": [
{
"id": 3515,
"cityName": "来宾"
},
{
"id": 618,
"cityName": "莱芜"
},
{
"id": 1545,
"cityName": "兰州"
},
{
"id": 993,
"cityName": "廊坊"
},
{
"id": 2623,
"cityName": "丽江"
},
{
"id": 3038,
"cityName": "丽水"
},
{
"id": 762,
"cityName": "连云港"
},
{
"id": 3597,
"cityName": "辽源"
},
{
"id": 1527,
"cityName": "聊城"
},
{
"id": 1008,
"cityName": "临沂"
},
{
"id": 1067,
"cityName": "柳州"
},
{
"id": 2721,
"cityName": "六安"
},
{
"id": 2961,
"cityName": "六盘水"
},
{
"id": 3553,
"cityName": "陇南"
},
{
"id": 3312,
"cityName": "吕梁"
},
{
"id": 267,
"cityName": "洛阳"
},
{
"id": 2417,
"cityName": "鹿邑县"
},
{
"id": 2531,
"cityName": "洛川县"
},
{
"id": 2637,
"cityName": "庐江县"
},
{
"id": 2694,
"cityName": "溧阳"
},
{
"id": 2712,
"cityName": "涟水县"
},
{
"id": 2902,
"cityName": "乐亭县"
},
{
"id": 3120,
"cityName": "临朐县"
},
{
"id": 3202,
"cityName": "兰陵县"
},
{
"id": 3324,
"cityName": "临海"
},
{
"id": 3409,
"cityName": "莱阳"
},
{
"id": 3431,
"cityName": "龙口"
},
{
"id": 3446,
"cityName": "林西县"
},
{
"id": 3517,
"cityName": "郎溪县"
},
{
"id": 3549,
"cityName": "利辛县"
},
{
"id": 3579,
"cityName": "临桂县"
},
{
"id": 3582,
"cityName": "灵璧县"
},
{
"id": 3656,
"cityName": "滦平县"
},
{
"id": 3676,
"cityName": "临清"
}
]
},
{
"title": "M",
"items": [
{
"id": 271,
"cityName": "马鞍山"
},
{
"id": 3333,
"cityName": "梅州"
},
{
"id": 3673,
"cityName": "美国凤凰城"
},
{
"id": 2402,
"cityName": "密云县"
},
{
"id": 3390,
"cityName": "蒙城县"
},
{
"id": 3492,
"cityName": "明光"
},
{
"id": 3675,
"cityName": "美国凤凰城"
}
]
},
{
"title": "N",
"items": [
{
"id": 276,
"cityName": "南昌"
},
{
"id": 221,
"cityName": "南京"
},
{
"id": 723,
"cityName": "南宁"
},
{
"id": 238,
"cityName": "南通"
},
{
"id": 678,
"cityName": "宁波"
},
{
"id": 1135,
"cityName": "宁德"
},
{
"id": 1826,
"cityName": "南昌县"
},
{
"id": 3682,
"cityName": "宁国"
}
]
},
{
"title": "P",
"items": [
{
"id": 3510,
"cityName": "平潭县"
},
{
"id": 1130,
"cityName": "莆田"
},
{
"id": 750,
"cityName": "濮阳"
},
{
"id": 1839,
"cityName": "蓬莱"
},
{
"id": 2377,
"cityName": "邳州"
},
{
"id": 2386,
"cityName": "平阴县"
},
{
"id": 2685,
"cityName": "平遥县"
},
{
"id": 2962,
"cityName": "盘县"
},
{
"id": 3284,
"cityName": "普宁"
},
{
"id": 3542,
"cityName": "沛县"
},
{
"id": 3655,
"cityName": "郫县"
}
]
},
{
"title": "Q",
"items": [
{
"id": 1070,
"cityName": "钦州"
},
{
"id": 2211,
"cityName": "秦皇岛"
},
{
"id": 612,
"cityName": "青岛"
},
{
"id": 2599,
"cityName": "衢州"
},
{
"id": 3466,
"cityName": "泉州"
},
{
"id": 2296,
"cityName": "启东"
},
{
"id": 2408,
"cityName": "青阳县"
},
{
"id": 2612,
"cityName": "奇台县"
},
{
"id": 2861,
"cityName": "青州"
},
{
"id": 3056,
"cityName": "曲阜"
},
{
"id": 3069,
"cityName": "迁安"
},
{
"id": 3488,
"cityName": "齐河县"
},
{
"id": 3501,
"cityName": "全椒县"
},
{
"id": 3623,
"cityName": "青铜峡"
},
{
"id": 3662,
"cityName": "沁阳"
}
]
},
{
"title": "R",
"items": [
{
"id": 934,
"cityName": "日照"
},
{
"id": 873,
"cityName": "如东县"
},
{
"id": 2147,
"cityName": "如皋"
},
{
"id": 2896,
"cityName": "乳山"
},
{
"id": 3523,
"cityName": "荣成"
}
]
},
{
"title": "S",
"items": [
{
"id": 1131,
"cityName": "三明"
},
{
"id": 3093,
"cityName": "三亚"
},
{
"id": 1569,
"cityName": "汕头"
},
{
"id": 2280,
"cityName": "商丘"
},
{
"id": 226,
"cityName": "上海"
},
{
"id": 981,
"cityName": "上饶"
},
{
"id": 1866,
"cityName": "绍兴"
},
{
"id": 253,
"cityName": "深圳"
},
{
"id": 273,
"cityName": "沈阳"
},
{
"id": 3459,
"cityName": "十堰"
},
{
"id": 746,
"cityName": "石家庄"
},
{
"id": 220,
"cityName": "苏州"
},
{
"id": 732,
"cityName": "宿迁"
},
{
"id": 1726,
"cityName": "宿州"
},
{
"id": 2221,
"cityName": "泗阳县"
},
{
"id": 2335,
"cityName": "濉溪县"
},
{
"id": 2353,
"cityName": "泗洪县"
},
{
"id": 2561,
"cityName": "寿光"
},
{
"id": 2697,
"cityName": "沭阳县"
},
{
"id": 2722,
"cityName": "寿县"
},
{
"id": 2749,
"cityName": "射阳县"
},
{
"id": 2932,
"cityName": "睢宁县"
},
{
"id": 3039,
"cityName": "遂昌县"
},
{
"id": 3171,
"cityName": "沙河"
},
{
"id": 3186,
"cityName": "三河"
},
{
"id": 3222,
"cityName": "舒城县"
},
{
"id": 3532,
"cityName": "商城县"
},
{
"id": 3642,
"cityName": "双流县"
},
{
"id": 3644,
"cityName": "泗县"
}
]
},
{
"title": "T",
"items": [
{
"id": 600,
"cityName": "台州"
},
{
"id": 736,
"cityName": "太原"
},
{
"id": 265,
"cityName": "泰安"
},
{
"id": 606,
"cityName": "泰州"
},
{
"id": 684,
"cityName": "唐山"
},
{
"id": 476,
"cityName": "天津"
},
{
"id": 1778,
"cityName": "天水"
},
{
"id": 3318,
"cityName": "通辽"
},
{
"id": 885,
"cityName": "铜陵"
},
{
"id": 2982,
"cityName": "吐鲁番地区"
},
{
"id": 1312,
"cityName": "桐庐县"
},
{
"id": 1696,
"cityName": "桐乡"
},
{
"id": 2362,
"cityName": "泰兴"
},
{
"id": 2659,
"cityName": "太仓"
},
{
"id": 2718,
"cityName": "天台县"
},
{
"id": 2785,
"cityName": "滕州"
},
{
"id": 2983,
"cityName": "吐鲁番"
},
{
"id": 3132,
"cityName": "太和县"
},
{
"id": 3495,
"cityName": "太湖县"
},
{
"id": 3530,
"cityName": "桐城"
}
]
},
{
"title": "W",
"items": [
{
"id": 1563,
"cityName": "威海"
},
{
"id": 756,
"cityName": "潍坊"
},
{
"id": 768,
"cityName": "温州"
},
{
"id": 3300,
"cityName": "乌兰察布"
},
{
"id": 630,
"cityName": "乌鲁木齐"
},
{
"id": 222,
"cityName": "无锡"
},
{
"id": 3259,
"cityName": "吴忠"
},
{
"id": 1046,
"cityName": "芜湖"
},
{
"id": 421,
"cityName": "武汉"
},
{
"id": 1779,
"cityName": "武威"
},
{
"id": 985,
"cityName": "婺源县"
},
{
"id": 1051,
"cityName": "芜湖县"
},
{
"id": 1965,
"cityName": "汶上县"
},
{
"id": 2914,
"cityName": "五河县"
},
{
"id": 2967,
"cityName": "蔚县"
},
{
"id": 3177,
"cityName": "文登"
},
{
"id": 3313,
"cityName": "文水县"
},
{
"id": 3357,
"cityName": "文安县"
},
{
"id": 3360,
"cityName": "涡阳县"
},
{
"id": 3497,
"cityName": "微山县"
},
{
"id": 3686,
"cityName": "无为县"
}
]
},
{
"title": "X",
"items": [
{
"id": 719,
"cityName": "西安"
},
{
"id": 2137,
"cityName": "西宁"
},
{
"id": 802,
"cityName": "厦门"
},
{
"id": 3555,
"cityName": "咸阳"
},
{
"id": 3705,
"cityName": "湘西州"
},
{
"id": 3462,
"cityName": "孝感"
},
{
"id": 3156,
"cityName": "忻州"
},
{
"id": 2506,
"cityName": "新乡"
},
{
"id": 2189,
"cityName": "新余"
},
{
"id": 1590,
"cityName": "信阳"
},
{
"id": 2569,
"cityName": "邢台"
},
{
"id": 816,
"cityName": "徐州"
},
{
"id": 3078,
"cityName": "宣城"
},
{
"id": 1720,
"cityName": "盱眙县"
},
{
"id": 1869,
"cityName": "新昌县"
},
{
"id": 1926,
"cityName": "兴化"
},
{
"id": 2390,
"cityName": "霞浦县"
},
{
"id": 2580,
"cityName": "响水县"
},
{
"id": 2650,
"cityName": "新沂"
},
{
"id": 3253,
"cityName": "萧县"
},
{
"id": 3398,
"cityName": "兴城"
},
{
"id": 3489,
"cityName": "象山县"
},
{
"id": 3512,
"cityName": "仙居县"
},
{
"id": 3536,
"cityName": "歙县"
}
]
},
{
"title": "Y",
"items": [
{
"id": 753,
"cityName": "烟台"
},
{
"id": 2527,
"cityName": "延安"
},
{
"id": 759,
"cityName": "盐城"
},
{
"id": 239,
"cityName": "扬州"
},
{
"id": 2521,
"cityName": "阳江"
},
{
"id": 2768,
"cityName": "阳泉"
},
{
"id": 2341,
"cityName": "宜昌"
},
{
"id": 3698,
"cityName": "宜春"
},
{
"id": 1736,
"cityName": "银川"
},
{
"id": 2577,
"cityName": "鹰潭"
},
{
"id": 1073,
"cityName": "玉林"
},
{
"id": 1210,
"cityName": "岳阳"
},
{
"id": 1766,
"cityName": "运城"
},
{
"id": 1912,
"cityName": "玉山县"
},
{
"id": 2471,
"cityName": "鱼台县"
},
{
"id": 2553,
"cityName": "仪征"
},
{
"id": 2647,
"cityName": "永城"
},
{
"id": 2662,
"cityName": "义乌"
},
{
"id": 2869,
"cityName": "宜兴"
},
{
"id": 2917,
"cityName": "余姚"
},
{
"id": 3110,
"cityName": "扬中"
},
{
"id": 3216,
"cityName": "沂南县"
},
{
"id": 3309,
"cityName": "延庆县"
},
{
"id": 3505,
"cityName": "颍上县"
},
{
"id": 3519,
"cityName": "阳谷县"
},
{
"id": 3594,
"cityName": "永康"
},
{
"id": 3615,
"cityName": "沂水县"
},
{
"id": 3629,
"cityName": "弋阳县"
},
{
"id": 3659,
"cityName": "郓城县"
},
{
"id": 3663,
"cityName": "伊川县"
}
]
},
{
"title": "Z",
"items": [
{
"id": 1854,
"cityName": "枣庄"
},
{
"id": 1207,
"cityName": "张家界"
},
{
"id": 953,
"cityName": "张家口"
},
{
"id": 1792,
"cityName": "张掖"
},
{
"id": 585,
"cityName": "镇江"
},
{
"id": 490,
"cityName": "郑州"
},
{
"id": 706,
"cityName": "中山"
},
{
"id": 3205,
"cityName": "中卫"
},
{
"id": 2156,
"cityName": "舟山"
},
{
"id": 2414,
"cityName": "周口"
},
{
"id": 2058,
"cityName": "珠海"
},
{
"id": 826,
"cityName": "淄博"
},
{
"id": 3468,
"cityName": "自贡"
},
{
"id": 2420,
"cityName": "张北县"
},
{
"id": 2691,
"cityName": "诸暨"
},
{
"id": 2729,
"cityName": "邹城"
},
{
"id": 2743,
"cityName": "张家港"
},
{
"id": 3641,
"cityName": "诸城"
}
]
}
]
}
}

city.json

  JsonData.java 序列化 Json 数据: (GsonFormat)

 package com.dragon.android.cityselect.model; import java.util.ArrayList;
import java.util.List; /**
* Created by Auser on 2016/10/10.
*/ public class JsonData { /**
* result : 0
* message : 接口通信成功!
* responseData : {"History":[],"Recent":[],"Hot":[{"id":"226","cityName":"上海"},{"id":"447","cityName":"北京"},{"id":"221","cityName":"南京"},{"id":"220","cityName":"苏州"},{"id":"261","cityName":"杭州"},{"id":"476","cityName":"天津"}],"Common":[{"title":"A","items":[{"id":664,"cityName":"安庆"},{"id":3590,"cityName":"安吉县"}]},{"title":"B","items":[{"id":3612,"cityName":"巴州"},{"id":3366,"cityName":"白银"},{"id":910,"cityName":"蚌埠"},{"id":2818,"cityName":"保定"},{"id":1068,"cityName":"北海"},{"id":447,"cityName":"北京"},{"id":882,"cityName":"滨州"},{"id":2119,"cityName":"亳州"},{"id":3449,"cityName":"博尔塔拉蒙古自治州"},{"id":2202,"cityName":"滨海县"},{"id":2462,"cityName":"滨海新区大港"},{"id":2463,"cityName":"滨海新区塘沽"},{"id":2464,"cityName":"滨海新区汉沽"},{"id":2788,"cityName":"宝应县"},{"id":3452,"cityName":"博乐"},{"id":3487,"cityName":"霸州"}]},{"title":"C","items":[{"id":1889,"cityName":"沧州"},{"id":2611,"cityName":"昌吉自治州"},{"id":2329,"cityName":"长春"},{"id":651,"cityName":"长沙"},{"id":2926,"cityName":"长治"},{"id":237,"cityName":"常州"},{"id":1959,"cityName":"朝阳"},{"id":3339,"cityName":"潮州"},{"id":279,"cityName":"成都"},{"id":3527,"cityName":"承德"},{"id":2095,"cityName":"池州"},{"id":2303,"cityName":"赤峰"},{"id":901,"cityName":"滁州"},{"id":621,"cityName":"重庆"},{"id":920,"cityName":"崇明县"},{"id":2275,"cityName":"曹县"},{"id":2620,"cityName":"慈溪"},{"id":2709,"cityName":"常熟"},{"id":2779,"cityName":"茌平县"},{"id":3066,"cityName":"巢湖"},{"id":3135,"cityName":"长丰县"},{"id":3630,"cityName":"昌黎县"},{"id":3640,"cityName":"章丘"},{"id":3657,"cityName":"崇州"}]},{"title":"D","items":[{"id":3384,"cityName":"达卡(孟加拉国)"},{"id":1699,"cityName":"大连"},{"id":2700,"cityName":"大庆"},{"id":2290,"cityName":"大同"},{"id":579,"cityName":"德州"},{"id":3351,"cityName":"定州"},{"id":254,"cityName":"东莞"},{"id":1748,"cityName":"东营"},{"id":2208,"cityName":"德清县"},{"id":2286,"cityName":"东海县"},{"id":2608,"cityName":"定远县"},{"id":2715,"cityName":"东台"},{"id":3101,"cityName":"砀山县"},{"id":3150,"cityName":"大厂县"},{"id":3166,"cityName":"东乡县"},{"id":3281,"cityName":"丹阳"},{"id":3406,"cityName":"东明县"},{"id":3618,"cityName":"大悟县"},{"id":3643,"cityName":"敦煌"},{"id":3661,"cityName":"大名县"}]},{"title":"F","items":[{"id":2176,"cityName":"佛山"},{"id":801,"cityName":"福州"},{"id":3165,"cityName":"抚州"},{"id":2881,"cityName":"阜阳"},{"id":2262,"cityName":"富锦"},{"id":2399,"cityName":"凤阳县"},{"id":3157,"cityName":"繁峙县"},{"id":3162,"cityName":"丰县"},{"id":3297,"cityName":"阜南县"},{"id":3441,"cityName":"奉化"},{"id":3508,"cityName":"阜宁县"},{"id":3509,"cityName":"肥东县"},{"id":3541,"cityName":"肥西县"},{"id":3544,"cityName":"凤台县"}]},{"title":"G","items":[{"id":2976,"cityName":"赣州"},{"id":3472,"cityName":"广元"},{"id":1969,"cityName":"广州"},{"id":709,"cityName":"贵阳"},{"id":898,"cityName":"桂林"},{"id":2002,"cityName":"高唐县"},{"id":2129,"cityName":"灌南县"},{"id":2224,"cityName":"固始县"},{"id":2518,"cityName":"赣榆县"},{"id":2734,"cityName":"高密"},{"id":2746,"cityName":"高邮"},{"id":2752,"cityName":"灌云县"},{"id":2819,"cityName":"高碑店"},{"id":3060,"cityName":"古交"},{"id":3385,"cityName":"孤山1"},{"id":3455,"cityName":"沽源县"},{"id":3490,"cityName":"固镇县"},{"id":3502,"cityName":"贵溪"},{"id":3589,"cityName":"瓜州县"},{"id":3614,"cityName":"广德县"},{"id":3619,"cityName":"古田县"},{"id":3634,"cityName":"格尔木"},{"id":3699,"cityName":"高安"}]},{"title":"H","items":[{"id":558,"cityName":"哈尔滨"},{"id":2104,"cityName":"海口"},{"id":3633,"cityName":"海西蒙古族藏族自治州"},{"id":2233,"cityName":"邯郸"},{"id":3652,"cityName":"韩国首尔"},{"id":2845,"cityName":"汉中"},{"id":261,"cityName":"杭州"},{"id":639,"cityName":"合肥"},{"id":895,"cityName":"菏泽"},{"id":1074,"cityName":"贺州"},{"id":3372,"cityName":"鹤壁"},{"id":3611,"cityName":"衡阳"},{"id":645,"cityName":"呼和浩特"},{"id":2205,"cityName":"湖州"},{"id":3397,"cityName":"葫芦岛"},{"id":594,"cityName":"淮安"},{"id":699,"cityName":"淮北"},{"id":1953,"cityName":"淮南"},{"id":3124,"cityName":"黄冈"},{"id":2451,"cityName":"黄山"},{"id":255,"cityName":"惠州"},{"id":1774,"cityName":"海安县"},{"id":1840,"cityName":"海阳"},{"id":2347,"cityName":"海门"},{"id":2356,"cityName":"黄骅"},{"id":2878,"cityName":"霍山县"},{"id":3125,"cityName":"红安县"},{"id":3266,"cityName":"洪泽县"},{"id":3291,"cityName":"怀来县"},{"id":3494,"cityName":"霍邱县"}]},{"title":"J","items":[{"id":771,"cityName":"吉林"},{"id":470,"cityName":"济南"},{"id":996,"cityName":"济宁"},{"id":2230,"cityName":"佳木斯"},{"id":1536,"cityName":"嘉兴"},{"id":1777,"cityName":"嘉峪关"},{"id":2242,"cityName":"焦作"},{"id":2893,"cityName":"揭阳"},{"id":654,"cityName":"金华"},{"id":2543,"cityName":"锦州"},{"id":2759,"cityName":"晋城"},{"id":2316,"cityName":"晋中"},{"id":2076,"cityName":"荆门"},{"id":2070,"cityName":"景德镇"},{"id":702,"cityName":"九江"},{"id":1781,"cityName":"酒泉"},{"id":1723,"cityName":"蓟县"},{"id":2110,"cityName":"巨野县"},{"id":2163,"cityName":"金乡县"},{"id":2496,"cityName":"靖江"},{"id":2584,"cityName":"句容"},{"id":2629,"cityName":"江阴"},{"id":2656,"cityName":"莒南县"},{"id":2791,"cityName":"嘉祥县"},{"id":2923,"cityName":"吉木萨尔县"},{"id":3000,"cityName":"莒县"},{"id":3034,"cityName":"胶州"},{"id":3213,"cityName":"金湖县"},{"id":3219,"cityName":"建湖县"},{"id":3256,"cityName":"鄄城县"},{"id":3294,"cityName":"静海县"},{"id":3403,"cityName":"金坛"},{"id":3428,"cityName":"嘉峪关"},{"id":3539,"cityName":"金寨县"},{"id":3548,"cityName":"泾县"},{"id":3578,"cityName":"绩溪县"},{"id":3600,"cityName":"介休"},{"id":3677,"cityName":"嘉善县"},{"id":3706,"cityName":"吉首"}]},{"title":"K","items":[{"id":907,"cityName":"开封"},{"id":1833,"cityName":"昆明"},{"id":2824,"cityName":"昆山"},{"id":3540,"cityName":"康保县"},{"id":3613,"cityName":"库尔勒"}]},{"title":"L","items":[{"id":3515,"cityName":"来宾"},{"id":618,"cityName":"莱芜"},{"id":1545,"cityName":"兰州"},{"id":993,"cityName":"廊坊"},{"id":2623,"cityName":"丽江"},{"id":3038,"cityName":"丽水"},{"id":762,"cityName":"连云港"},{"id":3597,"cityName":"辽源"},{"id":1527,"cityName":"聊城"},{"id":1008,"cityName":"临沂"},{"id":1067,"cityName":"柳州"},{"id":2721,"cityName":"六安"},{"id":2961,"cityName":"六盘水"},{"id":3553,"cityName":"陇南"},{"id":3312,"cityName":"吕梁"},{"id":267,"cityName":"洛阳"},{"id":2417,"cityName":"鹿邑县"},{"id":2531,"cityName":"洛川县"},{"id":2637,"cityName":"庐江县"},{"id":2694,"cityName":"溧阳"},{"id":2712,"cityName":"涟水县"},{"id":2902,"cityName":"乐亭县"},{"id":3120,"cityName":"临朐县"},{"id":3202,"cityName":"兰陵县"},{"id":3324,"cityName":"临海"},{"id":3409,"cityName":"莱阳"},{"id":3431,"cityName":"龙口"},{"id":3446,"cityName":"林西县"},{"id":3517,"cityName":"郎溪县"},{"id":3549,"cityName":"利辛县"},{"id":3579,"cityName":"临桂县"},{"id":3582,"cityName":"灵璧县"},{"id":3656,"cityName":"滦平县"},{"id":3676,"cityName":"临清"}]},{"title":"M","items":[{"id":271,"cityName":"马鞍山"},{"id":3333,"cityName":"梅州"},{"id":3673,"cityName":"美国凤凰城"},{"id":2402,"cityName":"密云县"},{"id":3390,"cityName":"蒙城县"},{"id":3492,"cityName":"明光"},{"id":3675,"cityName":"美国凤凰城"}]},{"title":"N","items":[{"id":276,"cityName":"南昌"},{"id":221,"cityName":"南京"},{"id":723,"cityName":"南宁"},{"id":238,"cityName":"南通"},{"id":678,"cityName":"宁波"},{"id":1135,"cityName":"宁德"},{"id":1826,"cityName":"南昌县"},{"id":3682,"cityName":"宁国"}]},{"title":"P","items":[{"id":3510,"cityName":"平潭县"},{"id":1130,"cityName":"莆田"},{"id":750,"cityName":"濮阳"},{"id":1839,"cityName":"蓬莱"},{"id":2377,"cityName":"邳州"},{"id":2386,"cityName":"平阴县"},{"id":2685,"cityName":"平遥县"},{"id":2962,"cityName":"盘县"},{"id":3284,"cityName":"普宁"},{"id":3542,"cityName":"沛县"},{"id":3655,"cityName":"郫县"}]},{"title":"Q","items":[{"id":1070,"cityName":"钦州"},{"id":2211,"cityName":"秦皇岛"},{"id":612,"cityName":"青岛"},{"id":2599,"cityName":"衢州"},{"id":3466,"cityName":"泉州"},{"id":2296,"cityName":"启东"},{"id":2408,"cityName":"青阳县"},{"id":2612,"cityName":"奇台县"},{"id":2861,"cityName":"青州"},{"id":3056,"cityName":"曲阜"},{"id":3069,"cityName":"迁安"},{"id":3488,"cityName":"齐河县"},{"id":3501,"cityName":"全椒县"},{"id":3623,"cityName":"青铜峡"},{"id":3662,"cityName":"沁阳"}]},{"title":"R","items":[{"id":934,"cityName":"日照"},{"id":873,"cityName":"如东县"},{"id":2147,"cityName":"如皋"},{"id":2896,"cityName":"乳山"},{"id":3523,"cityName":"荣成"}]},{"title":"S","items":[{"id":1131,"cityName":"三明"},{"id":3093,"cityName":"三亚"},{"id":1569,"cityName":"汕头"},{"id":2280,"cityName":"商丘"},{"id":226,"cityName":"上海"},{"id":981,"cityName":"上饶"},{"id":1866,"cityName":"绍兴"},{"id":253,"cityName":"深圳"},{"id":273,"cityName":"沈阳"},{"id":3459,"cityName":"十堰"},{"id":746,"cityName":"石家庄"},{"id":220,"cityName":"苏州"},{"id":732,"cityName":"宿迁"},{"id":1726,"cityName":"宿州"},{"id":2221,"cityName":"泗阳县"},{"id":2335,"cityName":"濉溪县"},{"id":2353,"cityName":"泗洪县"},{"id":2561,"cityName":"寿光"},{"id":2697,"cityName":"沭阳县"},{"id":2722,"cityName":"寿县"},{"id":2749,"cityName":"射阳县"},{"id":2932,"cityName":"睢宁县"},{"id":3039,"cityName":"遂昌县"},{"id":3171,"cityName":"沙河"},{"id":3186,"cityName":"三河"},{"id":3222,"cityName":"舒城县"},{"id":3532,"cityName":"商城县"},{"id":3642,"cityName":"双流县"},{"id":3644,"cityName":"泗县"}]},{"title":"T","items":[{"id":600,"cityName":"台州"},{"id":736,"cityName":"太原"},{"id":265,"cityName":"泰安"},{"id":606,"cityName":"泰州"},{"id":684,"cityName":"唐山"},{"id":476,"cityName":"天津"},{"id":1778,"cityName":"天水"},{"id":3318,"cityName":"通辽"},{"id":885,"cityName":"铜陵"},{"id":2982,"cityName":"吐鲁番地区"},{"id":1312,"cityName":"桐庐县"},{"id":1696,"cityName":"桐乡"},{"id":2362,"cityName":"泰兴"},{"id":2659,"cityName":"太仓"},{"id":2718,"cityName":"天台县"},{"id":2785,"cityName":"滕州"},{"id":2983,"cityName":"吐鲁番"},{"id":3132,"cityName":"太和县"},{"id":3495,"cityName":"太湖县"},{"id":3530,"cityName":"桐城"}]},{"title":"W","items":[{"id":1563,"cityName":"威海"},{"id":756,"cityName":"潍坊"},{"id":768,"cityName":"温州"},{"id":3300,"cityName":"乌兰察布"},{"id":630,"cityName":"乌鲁木齐"},{"id":222,"cityName":"无锡"},{"id":3259,"cityName":"吴忠"},{"id":1046,"cityName":"芜湖"},{"id":421,"cityName":"武汉"},{"id":1779,"cityName":"武威"},{"id":985,"cityName":"婺源县"},{"id":1051,"cityName":"芜湖县"},{"id":1965,"cityName":"汶上县"},{"id":2914,"cityName":"五河县"},{"id":2967,"cityName":"蔚县"},{"id":3177,"cityName":"文登"},{"id":3313,"cityName":"文水县"},{"id":3357,"cityName":"文安县"},{"id":3360,"cityName":"涡阳县"},{"id":3497,"cityName":"微山县"},{"id":3686,"cityName":"无为县"}]},{"title":"X","items":[{"id":719,"cityName":"西安"},{"id":2137,"cityName":"西宁"},{"id":802,"cityName":"厦门"},{"id":3555,"cityName":"咸阳"},{"id":3705,"cityName":"湘西州"},{"id":3462,"cityName":"孝感"},{"id":3156,"cityName":"忻州"},{"id":2506,"cityName":"新乡"},{"id":2189,"cityName":"新余"},{"id":1590,"cityName":"信阳"},{"id":2569,"cityName":"邢台"},{"id":816,"cityName":"徐州"},{"id":3078,"cityName":"宣城"},{"id":1720,"cityName":"盱眙县"},{"id":1869,"cityName":"新昌县"},{"id":1926,"cityName":"兴化"},{"id":2390,"cityName":"霞浦县"},{"id":2580,"cityName":"响水县"},{"id":2650,"cityName":"新沂"},{"id":3253,"cityName":"萧县"},{"id":3398,"cityName":"兴城"},{"id":3489,"cityName":"象山县"},{"id":3512,"cityName":"仙居县"},{"id":3536,"cityName":"歙县"}]},{"title":"Y","items":[{"id":753,"cityName":"烟台"},{"id":2527,"cityName":"延安"},{"id":759,"cityName":"盐城"},{"id":239,"cityName":"扬州"},{"id":2521,"cityName":"阳江"},{"id":2768,"cityName":"阳泉"},{"id":2341,"cityName":"宜昌"},{"id":3698,"cityName":"宜春"},{"id":1736,"cityName":"银川"},{"id":2577,"cityName":"鹰潭"},{"id":1073,"cityName":"玉林"},{"id":1210,"cityName":"岳阳"},{"id":1766,"cityName":"运城"},{"id":1912,"cityName":"玉山县"},{"id":2471,"cityName":"鱼台县"},{"id":2553,"cityName":"仪征"},{"id":2647,"cityName":"永城"},{"id":2662,"cityName":"义乌"},{"id":2869,"cityName":"宜兴"},{"id":2917,"cityName":"余姚"},{"id":3110,"cityName":"扬中"},{"id":3216,"cityName":"沂南县"},{"id":3309,"cityName":"延庆县"},{"id":3505,"cityName":"颍上县"},{"id":3519,"cityName":"阳谷县"},{"id":3594,"cityName":"永康"},{"id":3615,"cityName":"沂水县"},{"id":3629,"cityName":"弋阳县"},{"id":3659,"cityName":"郓城县"},{"id":3663,"cityName":"伊川县"}]},{"title":"Z","items":[{"id":1854,"cityName":"枣庄"},{"id":1207,"cityName":"张家界"},{"id":953,"cityName":"张家口"},{"id":1792,"cityName":"张掖"},{"id":585,"cityName":"镇江"},{"id":490,"cityName":"郑州"},{"id":706,"cityName":"中山"},{"id":3205,"cityName":"中卫"},{"id":2156,"cityName":"舟山"},{"id":2414,"cityName":"周口"},{"id":2058,"cityName":"珠海"},{"id":826,"cityName":"淄博"},{"id":3468,"cityName":"自贡"},{"id":2420,"cityName":"张北县"},{"id":2691,"cityName":"诸暨"},{"id":2729,"cityName":"邹城"},{"id":2743,"cityName":"张家港"},{"id":3641,"cityName":"诸城"}]}]}
*/ private String result;
private String message;
private ResponseDataBean responseData; public String getResult() {
return result;
} public void setResult(String result) {
this.result = result;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public ResponseDataBean getResponseData() {
return responseData;
} public void setResponseData(ResponseDataBean responseData) {
this.responseData = responseData;
} public static class ResponseDataBean {
private List<?> History = new ArrayList<>();
private List<?> Recent = new ArrayList<>();
/**
* id : 226
* cityName : 上海
*/ private List<HotBean> Hot = new ArrayList<>();
/**
* title : A
* items : [{"id":664,"cityName":"安庆"},{"id":3590,"cityName":"安吉县"}]
*/ private List<CommonBean> Common = new ArrayList<>(); public List<?> getHistory() {
return History;
} public void setHistory(List<?> History) {
this.History = History;
} public List<?> getRecent() {
return Recent;
} public void setRecent(List<?> Recent) {
this.Recent = Recent;
} public List<HotBean> getHot() {
return Hot;
} public void setHot(List<HotBean> Hot) {
this.Hot = Hot;
} public List<CommonBean> getCommon() {
return Common;
} public void setCommon(List<CommonBean> Common) {
this.Common = Common;
} public static class HotBean {
private String id;
private String cityName; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getCityName() {
return cityName;
} public void setCityName(String cityName) {
this.cityName = cityName;
}
} public static class CommonBean {
private String title;
/**
* id : 664
* cityName : 安庆
*/ private List<ItemsBean> items = new ArrayList<>(); public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public List<ItemsBean> getItems() {
return items;
} public void setItems(List<ItemsBean> items) {
this.items = items;
} public static class ItemsBean {
private int id;
private String cityName; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getCityName() {
return cityName;
} public void setCityName(String cityName) {
this.cityName = cityName;
}
}
}
}
}

JsonData

–> 接下来, 先写布局, 可以看到第一张图片, 垂直的四个布局样式一样, 这里准备用组合控件的形式实现.

  单条布局 item_linear_layout.xml:

 <?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/actionBarItemBackground"
android:orientation="vertical"> <View
android:id="@+id/view_shape1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ccc"
android:visibility="invisible" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp"> <ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/img_city" /> <TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:text="入住城市" /> <TextView
android:id="@+id/tv_title_c"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="入住城市"
android:textColor="#007F6E" /> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/back_black_normal" /> </LinearLayout> <View
android:id="@+id/view_shape2"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ccc"
android:visibility="invisible" /> </LinearLayout>

item_linear_layout

   自定义组合控件 DefineLinearLayout.java:

 package com.dragon.android.cityselect.view; import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import com.dragon.android.cityselect.R; /**
* Created by Auser on 2016/10/10.
*/ public class DefineLinearLayout extends LinearLayout { private View view_shape1;
private View view_shape2;
private ImageView iv_icon;
private TextView tv_title;
private TextView tv_title_c;
private View layout; public DefineLinearLayout(Context context) {
super(context);
} public DefineLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
} private void initView(Context context, AttributeSet attrs) { // 加载布局
layout = LayoutInflater.from(context).inflate(R.layout.item_linear_layout, this); view_shape1 = layout.findViewById(R.id.view_shape1);
view_shape2 = layout.findViewById(R.id.view_shape2);
iv_icon = (ImageView) layout.findViewById(R.id.iv_icon);
tv_title = (TextView) layout.findViewById(R.id.tv_title);
tv_title_c = (TextView) layout.findViewById(R.id.tv_title_c);
} // 这里没有用自定义属性的方式修改数据
public void changeData(Boolean isChecked, int imgRes, String title, String title_c) {
view_shape1.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
view_shape2.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
iv_icon.setImageResource(imgRes);
tv_title.setText(title);
tv_title_c.setText(title_c);
} public void changeData(Boolean isChecked) {
view_shape1.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
view_shape2.setVisibility(isChecked ? View.VISIBLE : View.INVISIBLE);
} public void changeData(String title_c) {
tv_title_c.setText(title_c);
}
}

DefineLinearLayout

  然后在主布局 activity_main.xml 中写首页布局: (圆角)

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="15dp"/>
<solid android:color="#fff"/> </shape>

bg_shape_linear

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ddd"
android:orientation="vertical"
android:padding="16dp"
tools:context="com.dragon.android.cityselect.MainActivity"> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_shape_linear"
android:orientation="vertical"> <com.dragon.android.cityselect.view.DefineLinearLayout
android:id="@+id/dl_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/actionBarItemBackground"
android:clickable="true"
android:onClick="click" /> <com.dragon.android.cityselect.view.DefineLinearLayout
android:id="@+id/dl_key"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/actionBarItemBackground"
android:clickable="true"
android:onClick="click" /> <com.dragon.android.cityselect.view.DefineLinearLayout
android:id="@+id/dl_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/actionBarItemBackground"
android:clickable="true"
android:onClick="click" /> <com.dragon.android.cityselect.view.DefineLinearLayout
android:id="@+id/dl_day"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/actionBarItemBackground"
android:clickable="true"
android:onClick="click" /> </LinearLayout> </LinearLayout>

activity_main

–> 第三步, 写出城市选择的布局. 

  首先是右侧城市首字母选择的自定义 View (也可以使用自定义 ListView 实现) SlideBar.java:

 package com.dragon.android.cityselect.view; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View; import com.dragon.android.cityselect.R; import java.util.ArrayList; /**
* Created by Jerry on 16/10/11.
*/ public class SlideBar extends View { private ArrayList<String> titles; // 首字母的集合(不一定为26个)
private int position = -1; // 被选中的字符的位置
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); // 画笔 public SlideBar(Context context) {
super(context);
} public SlideBar(Context context, AttributeSet attrs) {
super(context, attrs);
} public void getTitles(ArrayList<String> titles){
this.titles = titles;
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); // 得到右侧宽高
int width = getWidth();
int height = getHeight() - 16; int codeHeight = height / titles.size(); // 计算出每一个字母占有的高度 for (int i = 0; i < titles.size(); i++) {
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
mPaint.setColor(Color.parseColor("#666666"));
mPaint.setTextSize(20); // 给选中的 字母 不同的颜色
if (position != -1 && position == i) {
mPaint.setColor(Color.parseColor("#3399ff"));
}
float xpos = (width - mPaint.measureText(titles.get(i))) / 2;
float ypos = (i + 1) * codeHeight;
// 画出字母
canvas.drawText(titles.get(i), xpos, ypos, mPaint);
}
} /**
* 处理触碰事件
* 1. 当选择一个字符时, 显示中间的提示
* 2. 当手势抬起后, 中间的提示取消
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
// 右侧选择栏的样式
setBackgroundResource(R.drawable.shape_slide_bar); float ypos = event.getY(); // 先获取是哪一个被按下
position = (int) (ypos / getHeight() * titles.size());// 选中的字符的位置 if (position >= 0 && position < titles.size()) {
if (listener != null) {
// 通知 activity 选中的位置
listener.onCharClick(titles.get(position));
}
}
invalidate(); // 重绘
return true;
case MotionEvent.ACTION_UP:
position = -1; // 重置位置
setBackgroundResource(android.R.color.transparent);
if (listener != null) {
listener.onClickUp();
}
break;
}
return super.onTouchEvent(event);
} // 定义一个回调接口
public interface OnSlideBarCharSelectListener {
void onCharClick(String selectChar);
void onClickUp();
} private OnSlideBarCharSelectListener listener; public void setOnSlideBarCharSelectListener(OnSlideBarCharSelectListener listener) {
this.listener = listener;
}
}

SlideBar

  然后是城市选择的自定义 ListView (重点) CitySelect.java:

 package com.dragon.android.cityselect.view; import android.content.Context;
import android.content.res.AssetManager;
import android.util.AttributeSet;
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 com.dragon.android.cityselect.model.JsonData;
import com.google.gson.Gson; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; import static android.R.id.text1; /**
* Created by Auser on 2016/10/10.
*/ public class CitySelect extends ListView { public CitySelect(Context context, AttributeSet attrs) {
super(context, attrs);
getJsonData(context); MyAdapter myAdapter = new MyAdapter(context);
this.setAdapter(myAdapter);
} private JsonData jsonData; public JsonData getJsonData(Context context) {
// 加载 assets 中的文件, 并得到数据
AssetManager assetManager = context.getAssets();
try {
InputStream is = assetManager.open("city.json");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer stringBuffer = new StringBuffer();
String str = null;
while ((str = br.readLine()) != null) {
stringBuffer.append(str);
}
// GsonFormat
jsonData = new Gson().fromJson(stringBuffer.toString(), JsonData.class);
} catch (IOException e) {
e.printStackTrace();
}
return jsonData;
} public class MyAdapter extends BaseAdapter { private List<JsonData.ResponseDataBean.CommonBean> common;
private List<JsonData.ResponseDataBean.CommonBean.ItemsBean> items;
private Context context; public MyAdapter(Context context) {
this.context = context;
} // 一次性得到所有城市个数 (可以用下面的 getData() 方法)
@Override
public int getCount() {
common = jsonData.getResponseData().getCommon();
int sum = 0;
for (int i = 0; i < common.size(); i++) {
items = common.get(i).getItems();
sum += items.size();
}
return jsonData == null ? 0 : sum;
} @Override
public JsonData.ResponseDataBean getItem(int position) {
return jsonData.getResponseData();
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
JsonData.ResponseDataBean item = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
// 直接使用 系统布局
convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, null); viewHolder.tv_city = (TextView) convertView.findViewById(text1);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// 修改数据 (得到城市内容)
viewHolder.tv_city.setText(getData().get(position)); return convertView;
} // 加载所有城市的内容
public ArrayList<String> getData() {
ArrayList<String> datas = new ArrayList<>();
for (int i = 0; i < common.size(); i++) {
for (int j = 0; j < common.get(i).getItems().size(); j++) {
datas.add(common.get(i).getItems().get(j).getCityName());
}
}
return datas;
}
} class ViewHolder {
TextView tv_city;
}
}

CitySelect

  最后是城市选择界面的布局: (EditText的样式, 右侧选择栏的样式, 中间的提示的样式)

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke
android:width="1dp"
android:color="#A3D154" />
<corners android:radius="15dp" />
<solid android:color="#fff" /> </shape>

bg_edit_text

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"/>
<solid android:color="#50ff0000"/>
</shape>

shape_slide_bar

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="15dp"/>
<solid android:color="#A0CE51"/>
<stroke android:width="10px" android:color="#5aaa"/> </shape>

bg_shape_text_view

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_city"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
tools:context="com.dragon.android.cityselect.CityActivity"> <TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#ECECEC"
android:gravity="center"
android:text="全部城市" /> <ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="14dp"
android:layout_marginTop="14dp"
android:background="?attr/actionBarItemBackground"
android:clickable="true"
android:src="@mipmap/back_black_normal1" /> <View
android:id="@+id/vvv"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_title"
android:background="#E0E0E0" /> <EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_title"
android:layout_marginTop="10dp"
android:background="@drawable/bg_edit_text"
android:drawableLeft="@mipmap/add_qiuyou_ic_search_dark"
android:drawablePadding="10dp"
android:hint="请输入关键字"
android:paddingLeft="10dp" /> <TextView
android:id="@+id/tv_szm"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/vvv"
android:background="#E0E0E0"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:text="A"
android:textSize="16sp" /> <com.dragon.android.cityselect.view.CitySelect
android:id="@+id/lv_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/tv_szm" /> <com.dragon.android.cityselect.view.SlideBar
android:id="@+id/lv_szm"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/vvv"
android:layout_marginTop="30dp"
android:divider="#0000"
android:dividerHeight="0dp" /> <TextView
android:id="@+id/tv_show_szm"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true"
android:background="@drawable/bg_shape_text_view"
android:gravity="center"
android:text="A"
android:textColor="#fff"
android:textSize="30sp"
android:visibility="gone" /> </RelativeLayout>

activity_city

–> 最后, Java 代码的实现:

  CityActivity.java 实现城市选择功能: (工具类 FirstLetter.java 根据汉字得到首字母并转换大写)

 package com.dragon.android.cityselect.util; import android.support.annotation.Nullable; import java.io.UnsupportedEncodingException; /**
* Created by Auser on 2016/10/11.
*/ public class FirstLetter { private static final int GB_SP_DIFF = 160;
// 存放国标一级汉字不同读音的起始区位码
private static final int[] secPosValueList = {1601, 1637, 1833, 2078, 2274, 2302,
2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027,
4086, 4390, 4558, 4684, 4925, 5249, 5600};
// 存放国标一级汉字不同读音的起始区位码对应读音
private static final char[] firstLetter = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w', 'x',
'y', 'z'}; @Nullable
public static String getFirstLetter(char ch) { byte[] uniCode = null;
try {
uniCode = String.valueOf(ch).getBytes("GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
if (uniCode[0] < 128 && uniCode[0] > 0) {
return null;
} else {
return convert(uniCode);
}
} private static String convert(byte[] bytes) {
char result = '-';
int secPosValue = 0;
int i;
for (i = 0; i < bytes.length; i++) {
bytes[i] -= GB_SP_DIFF;
}
secPosValue = bytes[0] * 100 + bytes[1];
for (i = 0; i < 23; i++) {
if (secPosValue >= secPosValueList[i]
&& secPosValue < secPosValueList[i + 1]) {
result = firstLetter[i];
break;
}
}
String string = String.valueOf(result);
string = string.toUpperCase();
return string;
}
}

FirstLetter

 package com.dragon.android.cityselect; import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.TextView; import com.dragon.android.cityselect.model.JsonData;
import com.dragon.android.cityselect.util.FirstLetter;
import com.dragon.android.cityselect.view.CitySelect;
import com.dragon.android.cityselect.view.SlideBar; import java.util.ArrayList;
import java.util.List; public class CityActivity extends AppCompatActivity { private CitySelect lv_show;
private CitySelect.MyAdapter myAdapter;
private TextView tv_szm;
private TextView tv_show_szm;
private SlideBar lv_szm; private View lastClickedView;
List<JsonData.ResponseDataBean.CommonBean> common;
private List<JsonData.ResponseDataBean.CommonBean.ItemsBean> items;
private String theText = "A"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_city);
getSupportActionBar().hide(); lv_show = (CitySelect) findViewById(R.id.lv_show);
tv_szm = ((TextView) findViewById(R.id.tv_szm));
tv_show_szm = ((TextView) findViewById(R.id.tv_show_szm)); lv_show.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// MainActivity 的startAcitivityForResult
Intent intent = getIntent();
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
intent.putExtra("city", text1.getText());
setResult(RESULT_OK, intent);
finish();
}
});
lv_show.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
} @Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TextView childAt = (TextView) lv_show.getChildAt(firstVisibleItem);
// if (childAt != null) {
// 通过城市名得到 首字母并转换大写
theText = FirstLetter.getFirstLetter(((CitySelect.MyAdapter)lv_show.getAdapter()).getData().get(firstVisibleItem).toCharArray()[0]);
tv_szm.setText(theText);
// }
}
}); common = lv_show.getJsonData(this).getResponseData().getCommon();
ArrayList<String> titles = new ArrayList<>();
for (int i = 0; i < common.size(); i++) {
titles.add(common.get(i).getTitle());
}
lv_szm = (SlideBar) findViewById(R.id.lv_szm);
lv_szm.getTitles(titles);
// 接口回调的实现
lv_szm.setOnSlideBarCharSelectListener(new SlideBar.OnSlideBarCharSelectListener() { @Override
public void onCharClick(String selectChar) {
tv_show_szm.setText(selectChar);
tv_show_szm.setVisibility(View.VISIBLE); tv_szm.setText(selectChar);
int commonPosition = 0;
for (int i = 0; i < common.size(); i++) {
if (common.get(i).getTitle().equals(selectChar)) {
commonPosition = i;
}
}
int position = 0;
for (int j = 0; j < commonPosition; j++) {
items = common.get(j).getItems();
position += items.size();
}
// lv_show.smoothScrollToPosition(position); // 带动画 显示 某项 - notifyDataSetChanged() 对其没影响
lv_show.setSelection(position); // 跳转并使某项为 第一项 - notifyDataSetChanged() 则无效
} @Override
public void onClickUp() {
tv_show_szm.setVisibility(View.GONE);
}
});
// ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, R.layout.item_szm, titles);
// lv_szm.setAdapter(arrayAdapter);
// lv_szm.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// if (lastClickedView == null) {
// lastClickedView = view;
// }
// if (lastClickedView == view) {
// } else {
// ((TextView) lastClickedView).setTextColor(Color.parseColor("#666666"));
// }
// ((TextView) view).setTextColor(Color.WHITE);
// lastClickedView = view;
// }
// }); findViewById(R.id.iv_back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}

CityActivity

  MainAcitivity.java 实现其余功能: (包含一个DataPicker – 外部包:

    compile 'com.github.flavienlaurent.datetimepicker:library:0.0.2'

  )

 package com.dragon.android.cityselect; import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView; import com.dragon.android.cityselect.view.DefineLinearLayout;
import com.fourmob.datetimepicker.date.DatePickerDialog;
import com.sleepbot.datetimepicker.time.RadialPickerLayout;
import com.sleepbot.datetimepicker.time.TimePickerDialog; import java.util.Calendar; public class MainActivity extends AppCompatActivity { private DefineLinearLayout dl_city;
private DefineLinearLayout dl_key;
private DefineLinearLayout dl_time;
private DefineLinearLayout dl_day;
public static final int REQUEST_CODE = 0x000; private int[] imgs = {R.mipmap.img_city, R.mipmap.img_key_words, R.mipmap.imag_time, R.mipmap.img_days};
private String[] titles = {"入住城市", "关键字", "入住时间", "入住天数"};
private DefineLinearLayout[] dlls; private Bundle mSaveInstanceState;
private Handler handler; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
mSaveInstanceState = savedInstanceState;
} private void initView() {
dl_city = (DefineLinearLayout) findViewById(R.id.dl_city);
dl_key = (DefineLinearLayout) findViewById(R.id.dl_key);
dl_time = (DefineLinearLayout) findViewById(R.id.dl_time);
dl_day = (DefineLinearLayout) findViewById(R.id.dl_day); dlls = new DefineLinearLayout[]{dl_city, dl_key, dl_time, dl_day};
for (int i = 0; i < dlls.length; i++) {
changeDatas(dlls[i], false, imgs[i], titles[i], titles[i]);
}
getDataPicker();
} // 修改初始数据
private void changeDatas(DefineLinearLayout layout, Boolean isChecked, int imgRes, String title, String title_c) {
layout.changeData(isChecked, imgRes, title, title_c);
} private void changeDatas(DefineLinearLayout layout, Boolean isChecked) {
layout.changeData(isChecked);
} private void changeData(DefineLinearLayout layout, String title_c) {
layout.changeData(title_c);
} private DefineLinearLayout lastLayout; // 点击事件
public void click(View v) {
if (lastLayout == null) {
lastLayout = (DefineLinearLayout) v;
}
if (v == lastLayout) {
} else {
changeDatas(lastLayout, false);
}
changeDatas((DefineLinearLayout) v, true);
lastLayout = (DefineLinearLayout) v;
switch (v.getId()) {
case R.id.dl_city:
// 城市选择
startActivityForResult(new Intent(this, CityActivity.class), REQUEST_CODE);
break;
case R.id.dl_key:
break;
case R.id.dl_time:
new DataPicker().showDataPicker(mSaveInstanceState);
isFirstTime = true; // 点击入住时间
break;
case R.id.dl_day:
new DataPicker().showDataPicker(mSaveInstanceState);
isFirstTime = false; // 点击入住天数
break;
}
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String city = data.getStringExtra("city");
changeData(dl_city, city);
}
} private void getDataPicker() {
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_WHAT:
if (isFirstTime) {
((TextView) dl_time.findViewById(R.id.tv_title_c)).setText(msg.obj.toString());
} else {
((TextView) dl_day.findViewById(R.id.tv_title_c)).setText(msg.obj.toString());
}
break;
}
return false;
}
});
} private boolean isFirstTime = false; // 是否点击入住时间 (否则为 入住天数)
private static final int MSG_WHAT = 0x00; // DataPicker
class DataPicker implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { public static final String DATEPICKER_TAG = "datepicker";
public static final String TIMEPICKER_TAG = "timepicker";
private Calendar calendar;
private String mData; private void showDataPicker(Bundle savedInstanceState) {
calendar = Calendar.getInstance(); DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), false); datePickerDialog.setVibrate(false);
datePickerDialog.setYearRange(1985, 2028);
datePickerDialog.setCloseOnSingleTapDay(false);
datePickerDialog.show(getSupportFragmentManager(), DATEPICKER_TAG); if (savedInstanceState != null) {
DatePickerDialog dpd = (DatePickerDialog) getSupportFragmentManager().findFragmentByTag(DATEPICKER_TAG);
if (dpd != null) {
dpd.setOnDateSetListener(this);
} TimePickerDialog tpd = (TimePickerDialog) getSupportFragmentManager().findFragmentByTag(TIMEPICKER_TAG);
if (tpd != null) {
tpd.setOnTimeSetListener(this);
}
}
} @Override
public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
// Toast.makeText(MainActivity.this, "new date:" + year + "-" + month + "-" + day, Toast.LENGTH_LONG).show();
// TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false, false);
// timePickerDialog.setVibrate(false);
// timePickerDialog.setCloseOnSingleTapMinute(false);
// timePickerDialog.show(getSupportFragmentManager(), TIMEPICKER_TAG);
Message msg = Message.obtain();
msg.obj = year + "-" + month + "-" + day;
msg.what = MSG_WHAT;
handler.sendMessage(msg);
} @Override
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
// Toast.makeText(MainActivity.this, "new time:" + hourOfDay + "-" + minute, Toast.LENGTH_LONG).show();
}
}
}

注意?> 要在 Manifest 中定义键盘覆盖, 否则点击 EditText 会把布局往上推.

 <activity
android:name=".CityActivity"
android:windowSoftInputMode="adjustPan|stateHidden"
android:configChanges="keyboardHidden|orientation|screenSize" />

程序 Demo: 链接:http://pan.baidu.com/s/1geW38GF 密码:k505

***************很久没发了,学习实在太累T T…******************

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,989
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,504
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,348
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,131
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,765
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,842