可以模仿360手機(jī)衛(wèi)士懸浮窗的那份代碼的基礎(chǔ)上繼續(xù)開發(fā)。
創(chuàng)新互聯(lián)始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過多達(dá)10年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:公路鉆孔機(jī)等企業(yè),備受客戶贊揚(yáng)。
打開手機(jī)衛(wèi)士主界面,然后上拉,然后點(diǎn)擊快捷設(shè)置,然后點(diǎn)擊桌面懸浮窗,就可以將360手機(jī)衛(wèi)士安卓版桌面浮窗調(diào)出來了,具體步驟如下:
1、安裝最新的360手機(jī)衛(wèi)士。
2、點(diǎn)開隱私保護(hù),打開右上角的三個(gè)點(diǎn)。
3、點(diǎn)開衛(wèi)士設(shè)置,點(diǎn)開懸浮窗。
4、開啟內(nèi)存清理懸浮窗, 選擇顯示樣式,安仔樣式或是加速球。
5、可以選擇僅在桌面顯示,若開啟則懸浮窗只出現(xiàn)在桌面,若關(guān)閉則懸浮窗會(huì)跟隨打開頁面一直出現(xiàn)。
6、可以同時(shí)開啟拖動(dòng)清理內(nèi)存,這樣直接拖動(dòng)懸浮窗圖標(biāo),就可以輕松清理內(nèi)存了。
好吧,已看到你的評(píng)論,我在這里再回答一次:
1)你所說的置頂如果是屬于懸浮窗效果,那么JFrame實(shí)例化后,再添加一行如下的代碼:
form1.setAlwaysOnTop(true);//?總是允許窗口置頂
2)時(shí)分秒更簡(jiǎn)單了,除一除轉(zhuǎn)轉(zhuǎn)換就行了,沒有技術(shù)含量。
3)快捷鍵通過JButton類的setMnemonic方法實(shí)現(xiàn)
So,綜上,整個(gè)程序的實(shí)現(xiàn)算法如下:
package?hky.example;
import?java.awt.BorderLayout;
import?java.awt.Container;
import?java.awt.GridLayout;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?java.awt.event.KeyEvent;
import?java.awt.event.WindowEvent;
import?java.awt.event.WindowListener;
import?java.io.*;
import?java.util.*;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JOptionPane;
import?javax.swing.JPanel;
import?javax.swing.JTextField;
import?javax.swing.plaf.OptionPaneUI;
public?class?Demo{
static?boolean?isRuning=false;
static?boolean?isFirst=true;
static?Integer?hmsCounter=0;
static?int?hour,minute,second;
@SuppressWarnings("unchecked")
public?static?void?main(String[]?args)?throws?Exception?{
JFrame?form1?=?new?JFrame("Form1");
form1.setAlwaysOnTop(true);//?1)總是允許窗口置頂
JTextField?jTextField?=?new?JTextField(10);
jTextField.setSize(10,?10);
jTextField.setText("0");
jTextField.setEditable(false);
JButton?jButton?=?new?JButton("開始");
jButton.setSize(10,?10);
Thread?thread?=?new?Thread(new?Runnable()?{
@Override
public?void?run()?{
while?(true)?{
while(isRuning){
++hmsCounter;?
//3)時(shí)分秒顯示
hour=hmsCounter/3600;
minute=hmsCounter%3600/60;
second=hmsCounter%60;
jTextField.setText(hour+"時(shí)"+minute+"分"+second+"秒");
try?{Thread.sleep(1000);}?catch?(Exception?e2)?{}
}
try?{Thread.sleep(200);}?catch?(Exception?e2)?{}//?修復(fù)上一次回答的版本可能會(huì)存在的Bug
}
}
});
jButton.setMnemonic(KeyEvent.VK_ENTER);//?2)給JButton發(fā)送?Alt+Enter快捷鍵
jButton.addActionListener(new?ActionListener()?{
@Override
public?void?actionPerformed(ActionEvent?e)?{
String?text=jButton.getText().equals("開始")?"暫停":"開始";
jButton.setText(text);
isRuning=!isRuning;
if(isFirst){
thread.start();
isFirst=false;
}
}
});
JPanel?panel?=?new?JPanel();
panel.setSize(200,?200);
panel.add(jTextField,?BorderLayout.NORTH);
panel.add(jButton,?BorderLayout.CENTER);
form1.add(panel);
form1.setBounds(200,?100,?250,?150);
form1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form1.addWindowListener(new?WindowListener()?{
@Override
public?void?windowOpened(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?windowIconified(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?windowDeiconified(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?windowDeactivated(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?windowClosing(WindowEvent?e)?{
//?窗口關(guān)閉前取出文本框的數(shù)字保存到外部文件,代碼在此處寫
JOptionPane.showMessageDialog(null,?"Are?you?sure?closing?");
}
@Override
public?void?windowClosed(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
@Override
public?void?windowActivated(WindowEvent?e)?{
//?TODO?Auto-generated?method?stub
}
});
form1.setVisible(true);
}
}
由于項(xiàng)目需求,需要實(shí)現(xiàn)一個(gè)應(yīng)用內(nèi)懸浮窗功能,要求是:
經(jīng)過搜索,我發(fā)現(xiàn)了一個(gè)第三方庫(kù)EasyFloat( ),功能相當(dāng)強(qiáng)大。
EasyFloat支持四種懸浮窗:
那么問題來了,我要實(shí)現(xiàn)的功能是應(yīng)用內(nèi)的懸浮窗,回到桌面后沒必要繼續(xù)顯示懸浮窗。所以我并不想申請(qǐng)懸浮窗權(quán)限。何況由于不同安卓手機(jī)系統(tǒng)的限制,懸浮窗權(quán)限沒有一個(gè)統(tǒng)一的申請(qǐng)方式,需要針對(duì)不同手機(jī)系統(tǒng)做單獨(dú)適配,測(cè)試起來也麻煩。
既然 CURRENT_ACTIVITY 不需要權(quán)限,那么有沒有辦法通過 CURRENT_ACTIVITY 來實(shí)現(xiàn)應(yīng)用內(nèi)全局懸浮窗呢?
思路:
經(jīng)過測(cè)試,這個(gè)方案完全可行。以下是實(shí)現(xiàn)步驟:
App.java:
layout_float_window.xml:
實(shí)現(xiàn)效果:
期間遇到一個(gè)編譯錯(cuò)誤:
查詢資料得知,這是由于EasyFloat是kotlin實(shí)現(xiàn)的,而我的工程是java開發(fā)的,根據(jù) , 加上kotlin相關(guān)支持即可。
效果圖:
App.java:
Utils.java:
最終實(shí)現(xiàn)效果:
完整源碼地址:
ToolTipText
setToolTipText("htmlbody bgcolor='white'點(diǎn)擊我/body/html")
網(wǎng)頁名稱:java懸浮窗代碼 網(wǎng)頁懸浮窗代碼
路徑分享:http://www.muchs.cn/article44/hhicee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、網(wǎng)站建設(shè)、電子商務(wù)、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)