全部代码https://gitee.com/Cutele/weather-forecast-v1
增加了发送短信等功能

b站视频链接
主页面写的闪退了,就不记录了。
主要是借助适配器显示自己想要显示的页面。

城市管理

效果图

activity_city_manager.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"tools:context=".city_manager.CityManagerActivity"android:background="@mipmap/bg"><RelativeLayoutandroid:id="@+id/city_top_layout"android:background="#F5F5F5"android:layout_width="match_parent"android:layout_height="50dp"><ImageViewandroid:id="@+id/city_iv_back"android:layout_width="wrap_content"android:layout_height="match_parent"android:src="@mipmap/icon_back"android:layout_marginLeft="10dp"></ImageView><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:id="@+id/city_iv_delete"android:src="@mipmap/icon_write"android:layout_alignParentRight="true"android:layout_marginRight="10dp"></ImageView><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/city_tv_title"android:text="城市管理"android:textSize="25dp"android:textStyle="bold"android:layout_centerInParent="true"></TextView></RelativeLayout><ImageViewandroid:id="@+id/city_line"android:layout_width="match_parent"android:layout_height="1dp"android:background="#DCDCDC"android:layout_below="@id/city_top_layout"></ImageView><ListViewandroid:id="@+id/city_lv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/city_line"android:divider="@null"></ListView><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/city_iv_add"android:src="@mipmap/icon_add"android:layout_alignParentRight="true"android:layout_alignParentBottom="true"android:layout_margin="30dp"android:padding="10dp"></ImageView>
</RelativeLayout>

item_city_manager.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:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:padding="5dp"><androidx.cardview.widget.CardViewandroid:id="@+id/item_city_cv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="3dp"app:cardCornerRadius="10dp"app:cardElevation="5dp"app:contentPadding="10dp"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/item_city_tv_city"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="北京"android:textSize="22sp"android:textStyle="bold" /><TextViewandroid:id="@+id/item_city_tv_temp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="40sp"android:layout_alignParentRight="true"android:layout_marginRight="20dp"android:text="12℃"/><ImageViewandroid:id="@+id/item_city_line1"android:layout_width="match_parent"android:layout_height="2dp"android:layout_below="@id/item_city_tv_temp"android:layout_marginTop="10dp"android:layout_marginBottom="10dp"android:background="#808A87"/><TextViewandroid:id="@+id/item_city_tv_condition"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:layout_below="@id/item_city_line1"android:text="天气:晴"/><TextViewandroid:id="@+id/item_city_line2"android:layout_width="2dp"android:layout_height="20dp"android:layout_toRightOf="@id/item_city_tv_condition"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"android:background="#808A87"android:layout_below="@id/item_city_line1"/><TextViewandroid:id="@+id/item_city_wind"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:layout_toRightOf="@id/item_city_line2"android:layout_below="@id/item_city_line1"android:text="西南风2级"/><TextViewandroid:id="@+id/item_city_temprange"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/item_city_line1"android:textSize="16sp"android:layout_alignParentRight="true"android:text="16~9℃"android:layout_marginRight="20dp"/></RelativeLayout></androidx.cardview.widget.CardView>
</LinearLayout>

CityManagerActivity.java

package com.example.weather.city_manager;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;import com.example.weather.R;
import com.example.weather.db.DBManager;
import com.example.weather.db.DatabaseBean;import java.util.ArrayList;
import java.util.List;public class CityManagerActivity extends AppCompatActivity implements View.OnClickListener {ImageView addIv,backIv,deleteIv;ListView cityLv;List<String> mDatas;//列表数据源String[]hotCitys = {"北京","上海","广州","深圳","珠海","佛山","南京","苏州","厦门","长沙","成都","福州","杭州","武汉","青岛","西安","太原","沈阳","重庆","天津","南宁"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_city_manager);cityLv = findViewById(R.id.city_lv);mDatas = new ArrayList<>();mDatas.add("北京");mDatas.add("上海");mDatas.add("广州");mDatas.add("深圳");cityLv.setAdapter(new CityManagerAdapter(this,mDatas));}@Overridepublic void onClick(View view) {}
}

CityManagerAdapter.java

自定义适配器

package com.example.weather.city_manager;import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.example.weather.R;
import com.example.weather.db.DatabaseBean;
import com.example.weather.juhe.JHTempBean;
import com.google.gson.Gson;import java.util.List;public class CityManagerAdapter extends BaseAdapter {Context context;List<String> mDatas;public CityManagerAdapter(Context context, List<String> mDatas) {this.context = context;this.mDatas = mDatas;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int i) {return mDatas.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;View convertView = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_city_manager,null);holder = new ViewHolder(convertView);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}String bean = mDatas.get(i);holder.cityTv.setText(bean);return convertView;}static class ViewHolder{TextView cityTv,conTv,currentTempTv,windTv,tempRangeTv;public ViewHolder(View itemView){cityTv = itemView.findViewById(R.id.item_city_tv_city);conTv = itemView.findViewById(R.id.item_city_tv_condition);currentTempTv = itemView.findViewById(R.id.item_city_tv_temp);windTv = itemView.findViewById(R.id.item_city_wind);tempRangeTv = itemView.findViewById(R.id.item_city_temprange);}}}

城市删除

效果图

activity_delete_city.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"android:orientation="vertical"tools:context=".city_manager.DeleteCityActivity"android:background="@mipmap/bg"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:background="#F5F5F5"android:id="@+id/delete_top_layout"><ImageViewandroid:id="@+id/delete_iv_error"android:layout_width="wrap_content"android:layout_height="match_parent"android:src="@mipmap/icon_error"android:layout_marginLeft="5dp"/><ImageViewandroid:id="@+id/delete_iv_right"android:layout_width="wrap_content"android:layout_height="match_parent"android:src="@mipmap/icon_right"android:layout_alignParentRight="true"android:layout_marginRight="5dp"/><TextViewandroid:id="@+id/delete_tv_title"android:text="城市管理"android:layout_centerInParent="true"android:textSize="18sp"android:textStyle="bold"android:layout_width="wrap_content"android:layout_height="wrap_content" /></RelativeLayout><ImageViewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#DCDCDC"/><ListViewandroid:layout_below="@id/delete_top_layout"android:id="@+id/delete_lv"android:divider="@null"android:layout_width="match_parent"android:layout_height="match_parent"></ListView>
</RelativeLayout>

item_deletecity.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"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"android:padding="5dp"><androidx.cardview.widget.CardViewandroid:id="@+id/item_delete_cv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"app:cardElevation="5dp"app:cardCornerRadius="10dp"app:contentPadding="20dp"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="60dp"><ImageViewandroid:id="@+id/item_delete_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/icon_laji"android:layout_centerVertical="true"android:layout_marginLeft="10dp"/><TextViewandroid:id="@+id/item_delete_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="北京"android:textSize="20sp"android:layout_toRightOf="@id/item_delete_iv"android:layout_centerVertical="true"android:layout_marginLeft="20dp"android:textStyle="bold"/></RelativeLayout></androidx.cardview.widget.CardView>
</RelativeLayout>

DeleteCityActivity.java

package com.example.weather.city_manager;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;import com.example.weather.R;import java.util.ArrayList;
import java.util.List;public class DeleteCityActivity extends AppCompatActivity {ListView deleteLv;String[] hotCitys = {"北京","上海","广州","深圳","珠海","佛山","南京","苏州","厦门","长沙","成都","福州","杭州","武汉","青岛","西安","太原","沈阳","重庆","天津","南宁"};List<String> mDatas;//列表数据源@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_delete_city);deleteLv = findViewById(R.id.delete_lv);//找到组件//传入数据mDatas = new ArrayList<>();mDatas.add("北京");mDatas.add("上海");mDatas.add("广州");mDatas.add("深圳");//设置适配器deleteLv.setAdapter(new DeleteCityAdapter(this,mDatas));}}

DeleteCityAdapter.java

package com.example.weather.city_manager;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.example.weather.R;import java.util.List;public class DeleteCityAdapter extends BaseAdapter {Context context;List<String> mDatas;List<String>deleteCitys;private LayoutInflater inflater;public DeleteCityAdapter(Context context, List<String> mDatas) {this.context = context;this.mDatas = mDatas;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int i) {return mDatas.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {DeleteCityAdapter.ViewHolder holder = null;View convertView = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_deletecity,null);holder = new DeleteCityAdapter.ViewHolder(convertView);convertView.setTag(holder);}else{holder = (DeleteCityAdapter.ViewHolder) convertView.getTag();}String bean = mDatas.get(i);holder.cityTv.setText(bean);return convertView;}class ViewHolder{TextView cityTv,conTv,currentTempTv,windTv,tempRangeTv;public ViewHolder(View itemView){cityTv = itemView.findViewById(R.id.item_delete_tv);}}
}

城市搜索

效果图

activity_search_city.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"android:padding="10dp"android:background="@mipmap/bg"><ImageViewandroid:id="@+id/search_iv_submit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginLeft="5dp"android:src="@mipmap/icon_search"/><EditTextandroid:id="@+id/search_et"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="3dp"android:layout_toLeftOf="@id/search_iv_submit"android:hint="搜索国内城市:"android:background="@drawable/searchbg"/><TextViewandroid:id="@+id/search_tv"android:layout_below="@id/search_et"android:layout_marginTop="20dp"android:textSize="16sp"android:textStyle="bold"android:text="热门城市"android:layout_width="wrap_content"android:layout_height="wrap_content" /><GridViewandroid:id="@+id/search_gv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/search_tv"android:numColumns="5"></GridView>
</RelativeLayout>

item_hotcity.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"android:gravity="center"android:text="北京"android:background="@drawable/frag_bg"></TextView>

SearchCityActivity.java

package com.example.weather.city_manager;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;import com.example.weather.R;public class SearchCityActivity extends AppCompatActivity implements View.OnClickListener{EditText searchEt;ImageView submitIv;GridView searchGv;String[]hotCitys = {"北京","上海","广州","深圳","珠海","佛山","南京","苏州","厦门","长沙","成都","福州","杭州","武汉","青岛","西安","太原","沈阳","重庆","天津","南宁"};private ArrayAdapter<String> adapter;String city;@Overrideprotected void onCreate(Bundle savedInstanceState) {//setContentView(R.layout.activity_search_city);super.onCreate(savedInstanceState);setContentView(R.layout.activity_search_city);searchEt = findViewById(R.id.search_et);submitIv = findViewById(R.id.search_iv_submit);searchGv = findViewById(R.id.search_gv);submitIv.setOnClickListener(this);
//        设置适配器adapter = new ArrayAdapter<>(this, R.layout.item_hotcity, hotCitys);searchGv.setAdapter(adapter);//   setListener();}@Overridepublic void onClick(View view) {}
}

【安卓开发】天气预报app的UI界面(包含全部代码)相关推荐

  1. 安卓大作业:使用Android Studio开发天气预报APP(使用sqlite数据库)

    使用Android Studio开发天气预报APP 今天我来分享一下如何使用Android Studio开发一个天气预报APP.在文中,我们将使用第三方接口获取实时天气数据,并显示在APP界面上. 步 ...

  2. 移动端APP~最新UI界面设计规范(转载)

    首页发现 同城 职位 活动 正版素材 课程 登录注册 移动端APP~最新UI界面设计规范(尺寸大小篇) 1年前发布 原创文章 / UI / 教程 18107 7 274 移动端手机界面看似简单,然而里 ...

  3. 【安卓开发系列 -- APP】APP 开发基础技术整理

    [安卓开发系列 -- APP]APP 开发基础技术整理 [1]Android Studio APP 项目目录布局  [2]活动的生命周期 活动的状态 : 1. 运行状态,一个活动位于返回栈栈顶时,活动 ...

  4. 【安卓开发系列 -- APP 开源框架】IO 框架 OKIO

    [安卓开发系列 -- APP 开源框架]IO 框架 OKIO [1]OKIO的整体框架 [1.1]OKIO的整体框架图示 [1.2]OKIO的优势 CPU和内存消耗低,OKIO采用了segment机制 ...

  5. 【安卓开发系列 -- APP 】APP 性能优化 -- 崩溃分析

    [安卓开发系列 -- APP ]APP 性能优化 -- 崩溃分析 [1]Native Crash 分析示例 [1.1]Linux 编译 breadpad 下载 breadpad 源码 git clon ...

  6. 14天学会安卓开发(附PDF文档和全部示例代码)

    前言: 本人也是菜鸟,老鸟看了此文有哪里不好之处敬请指点,本书是根据<<Android应用开发揭秘>>攒写的,如何把一本书读薄,是一件值得思考的问题.相信看过那本书的都知道有5 ...

  7. 安卓移动平台开发----天气预报APP

    概述 第一次打开APP,进入地域选择页面,包括省-市-县三级地域(第一次从网络请求而来,之后从本地数据库读取),选中最后的县,进入天气信息展示界面(天气信息数据来自和风天气):可以通过侧滑菜单选择其他 ...

  8. 用于android天气开发的背景图,Android开发天气预报APP的设计与实现毕业设计.pdf

    摘要 随着移动互联网技术和通信技术的发展,智能手机几乎成为人们 生活的必需品.近年来,Android系统已经成为智能手机中用户量最 多的操作系统.通过Android程序开发和设计天气预报手机应用,可 ...

  9. Android实现-心知天气API接口开发(天气预报app)

    自己开发app之心知天气APP程序代码粘贴即可用.完整代码附最后. 一.环境配置和素材准备 第一步:去知心天气注册开发者账号查看自己的token.注册好登录进去--控制台---免费版--秘钥.这里的秘 ...

最新文章

  1. 开源示波器Scopefun介绍、原理图学习
  2. java中var是什么意思_js中的var是什么意思
  3. C# 控件置于最顶层、最底层、隐藏、显示
  4. E. Almost Sorted(构造,递归)
  5. 知识图谱入门知识(一)知识图谱应用以及常用方法概述
  6. 关于垂直切分Vertical Sharding的粒度
  7. oracle /etc/fonts simfang.ttf,GitHub - jiaxiaochu/font: 系统缺失字体导致无法显示中文和乱码的解决办法...
  8. Flex+BlazeDs+Java的教程及Demo
  9. Python:Django 项目中可用的各种装备和辅助
  10. LayaAir textInput 单行输入多行输入
  11. 多线程打印ABCD顺序(带有线程池实现)
  12. 中间件 东方通TongWeb运维|精选整理版本
  13. 性能测试20--Analysis -- 内存与硬盘
  14. 安卓实时打印kernel日志
  15. Canvas圆形时钟
  16. 图片工具GraphicsMagick的下载安装配置使用
  17. STM32F1串口最高波特率问题
  18. iOS 设置按钮上图下文的方式
  19. redhat linux之bash 编程
  20. 虚拟机中安装Ubuntu,详细教程

热门文章

  1. python自学书籍-自学中医书籍推荐python进阶知乎
  2. 超百个新能源汽车品牌销量滞涨,破局之路何在?
  3. 用tensorflow扩充数据集
  4. 带你看看品牌服装的销售员如何卖衣服
  5. ffmpeg之demux 解复用
  6. excel服务器数据同步修改,excel表格数据同步修改-关于excel不同表格(不同工作簿)之间数据同步修改......
  7. 3.22 软件工程平时作业Blog
  8. 莹石摄像头加密及H265设备播放
  9. 79款 C/C++开发工具开源软件
  10. android jackson冲突,卸载Android app弹出浏览器的一种实现