准备好所需布局:
全局运用线性布局为整体,上半部分城市选择运用HorizontalScrollView组件实现横向下拉的功能,
在其之中,添加线性布局,排列方向为横向展示,网页显示部分运用WebView组件显示。
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.yls.demoa.MainActivity">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_gz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广州" />
<Button
android:id="@+id/btn_sh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上海" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="北京" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="天津" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="厦门" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="青岛" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="澳门" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="香港" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="珠海" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="湖口" />
</LinearLayout>
</HorizontalScrollView>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
声明及获取组件
简单的组件绑定方法,Android开发者每天写代码都需要做的事情
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private WebView webView;
private Button gz;
private Button sh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
gz = findViewById(R.id.btn_gz);
sh = findViewById(R.id.btn_sh);
webView = findViewById(R.id.webview);//获取webview组建
}
实现点击事件
MainActivity需实现OnClickListener接口,复写OnClick方法根据点击按钮的id来识别当前操作,
然后对web View组件进行设定,通过getSetting方法等一系列代码设置(下文代码有注释)
网址来自中国天气网(百度搜索进入中国天气网,复制当前页面的网络链接)获取各个城市所不同的
网页来获取各个城市的天气情况
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private WebView webView;
private Button gz;
private Button sh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
webView.getSettings().setJavaScriptEnabled(true);//设置js可用
webView.setWebChromeClient(new WebChromeClient());//处理js对话框
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://m.weather.com.cn/mweather/101010100.shtml");
gz.setOnClickListener(this);
sh.setOnClickListener(this);
}
private void initViews() {
gz = findViewById(R.id.btn_gz);
sh = findViewById(R.id.btn_sh);
webView = findViewById(R.id.webview);//获取webview组建
}
private void openUrl(String id) {
webView.loadUrl("http://m.weather.com.cn/mweather/"+id+".shtml");
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_gz:
openUrl("101280101");
break;
case R.id.btn_sh:
openUrl("101020100");
break;
}
}
设置网络权限
有使用网络请求需要联网的操作都需要在Manifest中设置网络权限,减少不必要的麻烦
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yls.demoa">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="天气预报"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
在模拟器中运行软件:
这样子在软件就可以随意的使用天气预报功能了,本软件只是通过外部网站来获取资源
如上图显示,简单的天气应用小软件就完成啦!