1. 程式人生 > >用Webview+HTML5做一個表白APP

用Webview+HTML5做一個表白APP

0x01

近年來,WebView + HTML5做移動應用開發也越來越流行,於是就打算把一個HTML5的表白網頁放在Webview中,封裝在一個APP中。用手機,也就可以達到很好的展示效果。(剛開始的時候,直接通過手機瀏覽器訪問,無法播放背景音樂,並且橫豎屏切換體驗並不加。)

因為不太會寫文章,所以就廢話少說,先上一張效果圖

這裡是一個在Web View中展示的HTML5頁面

做為程式設計師,有時候還是要浪漫一下的,用這個去向喜歡的女生表白,應該還算是浪漫吧。

0x02

開發環境:android studio 2.2
除錯裝置:魅族note3(因為是同款手機啦!)
Web伺服器:阿里雲虛擬機器(用部署HTML5頁面)

0x03

本文主要是講一下如何在Web View中載入HTML5的。所以不會講述HTML5的實現。HTML5的原始碼是用的他人的原始碼。在

楊雨的個人部落格 中可以下載 表白原始碼

開始建立一個android工程
通過Gradle建立android工程就不再贅述了,網上有很多教程。

activity_main.xml

<?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" tools:context="com.example.love.MainActivity">
<WebView android:id="@+id/m_web" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="15dp" android:layout_marginRight
="15dp">
</WebView> </LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.love">
<!-- 新增允許網路訪問的許可權 -->
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:supportsRtl="true" 
android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" 
        android:theme="@style/NoTitleFullscreen" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
android:theme="@style/NoTitleFullscreen"

這段程式碼主要是去掉手機的標題欄,讓介面全屏顯示
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"

防止手機在進行橫豎屏切換時,重新載入HTML5

MainActivity.class

package com.example.love;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    //背景音樂播放,用HTML5的 <audio>標籤在手機中不會播放音樂的,所以,把音樂播放放在了APP中來控制。
    MediaPlayer player;
    String TAG = "WebClientDemo";
    boolean isLoadResources = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }

        setContentView(R.layout.activity_main);

        // 建立一個Web view物件
        webView =(WebView) findViewById(R.id.m_web);

        // 設定Web view屬性,能夠執行javascript指令碼
        webView.getSettings().setJavaScriptEnabled(true);
        //設定WebView是否使用viewport,當該屬性被設定為false時,載入頁面的寬度總是適應WebView控制元件寬度;當被設定為true,當前頁面包含viewport屬性標籤,在標籤中指定寬度值生效,如果頁面不包含viewport標籤,無法提供一個寬度值,這個時候該方法將被使用。
        webView.getSettings().setUseWideViewPort(true);
        //設定WebView是否支援使用螢幕控制元件或手勢進行縮放,預設是true,支援縮放。
        webView.getSettings().setSupportZoom(true);
        //設定WebView是否使用預覽模式載入介面。
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,String url){
                webView.loadUrl(url);
                return true;
            }
            public void onLoadResource(WebView view, String url) {
                if (!isLoadResources) {
                    Log.i(TAG, "Block resource loading:" + url);
                    return;
                } else {
                    Log.i(TAG, "Continue resource loading:" + url);
                    super.onLoadResource(view, url);
                }
            }

            // Intercepts error message
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                Log.i(TAG, failingUrl);
                Toast.makeText(MainActivity.this, "網頁錯誤: " + errorCode + " 網頁不可用",
                        Toast.LENGTH_LONG).show();
            }

            // Intercepts form resubmission
            public void onFormResubmission(WebView view, Message dontResend,
                                           Message resend) {
                Log.i(TAG, "Resubmission");
                Toast.makeText(MainActivity.this, "不可重複提交,按Back回到上級網頁",
                        Toast.LENGTH_SHORT).show();

            }

            // Intercepts page started event
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                Log.i(TAG, "Page load start");
            }

            // Intercepts page finished event
            public void onPageFinished(WebView view, String url) {
                Log.i(TAG, "Page load finish");
            }
        });
        try {
            //清理快取,這裡如果不清理快取,有時候重新載入程式,JS cavas沒有執行
            webView.clearCache(true);
            //載入HTML5網頁(這個網頁就是你掛在伺服器中的路徑)
            webView.loadUrl("http://tomopad.com/love.html");
        }catch (Exception ex){
            ex.printStackTrace();
        }
        player = MediaPlayer.create(this,R.raw.wyy);
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    @Override
    protected void onStop() {
        if(player.isPlaying()){
            player.pause();
        }
        super.onStop();
    }

    @Override
    protected void onStart() {
        if(!player.isPlaying()){
            player.start();
        }
        super.onStart();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent mHomeIntent = new Intent(Intent.ACTION_MAIN);
            mHomeIntent.addCategory(Intent.CATEGORY_HOME);
            mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            MainActivity.this.startActivity(mHomeIntent);
            return true;
        }else {
        super.onKeyDown(keyCode,event);
        return false;
        }
    }
}

0x04

相關推薦

WebviewHTML5一個表白APP

0x01 近年來,WebView + HTML5做移動應用開發也越來越流行,於是就打算把一個HTML5的表白網頁放在Webview中,封裝在一個APP中。用手機,也就可以達到很好的展示效果。(剛開始的時候,直接通過手機瀏覽器訪問,無法播放背景音樂,並且橫豎屏切

javascript和html5一個音樂播放器,附帶源碼

功能 優化 str 自由 所有 音樂app 作者 弧形 ner 效果圖: 實現的功能 1、首頁 2、底部播放控件 3、播放頁面 4、播放列表 5、排行榜 6、音樂搜索 輸入搜索關鍵詞,點擊放大鏡圖標 7、側邊欄 目錄結構 開發心得與總結 1、輪播圖 首

HTML5一個個人網站,此文僅展示個人主頁介面。內附原始碼下載地址

html5 ,用css去修飾自己的個人主頁 程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio

React-Native+Mobx一個迷你水果商城APP

前言最近一直在學習微信小程式,在學習過程中,看到了wxapp-mall這個微信小程式的專案,覺得很不錯,UI挺小清新的,便clone下來研究研究,在看原始碼過程中,發現並不複雜,用不多的程式碼來實現豐富的功能確實令我十分驚喜,於是,我就想,如果用react-native來做一個類似這種小專案難不難呢,何況,寫

Vue.js來開發一個電影App的前端部分

column 多種方式 -a 目標 部分 cli 多路由 cdn tor 我們要構建一個什麽樣的App? 我們大多數人使用在線流媒體服務(如Netflix)觀看我們最喜歡的電影或者節目。這篇文章將重點介紹如何通過使用vue.js 2建立一個類似風格的電影流媒體WEB交互界

MVC5+EF6+WebApi 一個小功能(三) 項目搭建

個人 bapi 依賴 mic ots add spl 空白 項目 一般一個項目開始之前都會有啟動會,需求交底等等,其中會有一個環節,大講特講項目的意義,然後取一個高大上的項目名字,咱這是一個小功能談不上項目,但是名字不能太小氣了。好吧,就叫Trump吧。沒有任何含義,玩嘛!

MVC5+EF6+WebApi 一個考試功能(五) 前端主題

mvc fun 用戶 jquery github 2.4 body 平臺 alert 內容概述 前面絮絮叨叨沒正事,到現在為止也沒有開始寫代碼,不過在考慮下貌似這一節還是開始不了。 B/S架構開發有一個特點,就是用瀏覽器打開,不同的用戶群體可能有不同的風格,不論是管

enumitem巨集包一個首行空兩格,第二行頂格的列表環境怎麼

【問題描述】        我想做如圖的格式,但是我用下面的命令出不來 \begin{enumerate}[labelwidth=3em,itemindent=2em,labelsep=0.5em,listparindent=2em,leftmargin=0em,la

[心得]jenkinsjira自動化質量測試開發

jenkins+jira的方案在網際網路圈非常流行。 jira主要用來管理project上的任務,類似老前輩bugzilla。但是前者收費,後者開源免費。我們用了一段時間jira,後來就使用最原始的excel來管理研發需求了。現在jira僅僅用來規範上線流程。

java的JFrame一個登入系統的介面

package com.sxt; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import jav

一個表白小程式

這裡演示一個表白小程式。 程式的靈感來自於我曾經某天刷騰訊小視訊,發現一個表白程式十分的有趣,雙十一那天去網上搜了搜還沒有搜到現成的程式碼。於是就在網上原有程式碼的基礎之上,自己動手擼了一番。用的是Python語言的Tkinter。 廢話不說,看效果: 程式碼

DELPHI 為 WINDOWS 一個帶聲音的模擬鬧鐘

   嗨,大家好。我是夢尋,這是我的第一次發帖子,請大家多多鼓勵、多多支援,畢竟嘛,予人方便予己方便。OK,轉入正題,現在就來講如何做一個帶響聲的錶盤式的 CLOCK。   首先我們應選擇新建一個程式,並在窗體中加入以下元件:    Timer1: TTimer;    Im

NodeJs使用Io一個聊天室

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

Vue 一個簡單的購物app

有意思 應用程序 其中 ins com 簡單的 node.js 引入 大神 前言 最近在學習Vue的使用。看了官方文檔之後,感覺挺有意思的。於是著手做了一個簡單的購物app。這是我第一次在這個網站上寫分享,如有不當之處,請多多指教。 一整個項目寫下來,最大的感覺就是組件式開

html5表白神器開發,一個浪漫的程式設計師

效果知識點:css33D場景、3D變換、愛心製作技巧、3D立方體制作技巧、自定義動畫,原生js DOM節點操作、迴圈等。 html5表白神器原始碼: <!doctype html><!--聲明當前文件為html文件--> <html lang

python來一個APP | python GUI 基礎(實戰)

上程式碼 import tkinter as tk class APP: def __init__(self, master): frame = tk.Frame(mas

HTML5audio標籤一個最簡單的音訊播放器

在做系統的時候,要求做一個音訊播放器,就在網上查找了一些資料,發現這樣的資料還是很千篇一律的,EasyUI框架並沒有給我們一個音訊播放器的功能,在bootstrap上有,但是也是結合html5來寫的,因此,我們在這裡就用純的html5血一個音訊播放器,如何播放本地的音訊。

HTML5+CSS3一個好看的介面

效果圖:滑鼠經過影象的時候會觸發hover 1s內轉一圈=-=程式碼:<!DOCTYPE html><html lang="zh-cn">  <head>    <title>MyHtml.html</title> 

Java GUI一個簡單的管理系統

java 管理系統 gui 1.先完成主頁面MainUI(代碼如下)package com.pag_1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.

怎麽cookie一個選項卡?

eight splay i++ 作用 code round tab 多網站 個性化 什麽是cookie? Cookies雖然一般都以英文名呈現,但是它還是有一個可愛的中文名“小甜餅”。Cookies是指服務器暫存放在你的電腦裏的txt格式的文本文件資料,主要用