如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
隨著越來越的的app使用沉浸式狀態欄,有必要對沉浸式狀態欄學習一下,查看了很多資料,沉浸式狀態欄重要的無法三點:1.實現全屏 (Android4.4跟5.0全屏處理方式有別需分開處理 )2.設置全屏之后為了保證自己寫的布局不與狀態欄重疊,需要在跟xml的跟布局設置android:fitsSystemWindows=”true” ?;谶@幾點處理方式可能很多,但是為了便于項目中工具類封裝,本編實現方式均已代碼方式呈現,xml設置方式可以自行查閱相關資料 3.改變狀態欄顏色
—1.全屏設置
對于4.4以上系統,因4.4以上系統是可以設置全屏,代碼如下:
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
對于5.0系統 具體代碼
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
僅僅做全屏處理,我們會發現不管是在4.4系統上還是在5.0系統上,我們的布局內容會與狀態欄內容出現重疊。
下圖為4.4系統
下圖為8.0系統
為了解決全屏設置重疊狀態欄,我們需要在全屏之上預留狀態欄的高度以便正常顯示狀態欄,而處理方式也很簡單 activity layout根目錄添加下面代碼
android:fitsSystemWindows=”true” 而此處我建議用代碼設置,因為通常我們項目中會提取BaseActivity基類抽出一些共性,這種方式比在每個xml中設置屬性更方便
rootView.setFitsSystemWindows(true) 此處的rootView指的就是activity對應的跟布局;
進行以上處理之后我們會發現現在狀態欄跟我們的布局內容不再重疊了,接下來我們就只需要處理狀態欄的顏色問題了。具體代碼如下
ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
childView.setFitsSystemWindows(true); }
對于4.4系統因為沒有改變狀態欄顏色的api,我們可以通過添加一個與狀態欄等高的View到根布局的父容器中,而根布局的父容器就是一個ID為android.R.id.content的幀布局被裝飾的容器中,這樣只需要設置View的顏色即可。對于5.0及以上系統,因已提供設置狀態欄和導航欄顏色的api,直接設置即可;
對于4.4以上5.0一下系統
View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.RED); content.addView(view);
對于5.0及以上系統
window.setStatusBarColor(Color.RED);
獲取狀態欄高度
private int getStatusHeight() { int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){ return getResources().getDimensionPixelSize(resourceId);
} return 0;
}
以上就是實現沉浸式狀態欄的具體過程。整體代碼如下:
package com.example.administrator.myjavadeamo.activity; import android.graphics.Color; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import com.example.administrator.myjavadeamo.R; public class StatusBarActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標題欄 setContentView(R.layout.activity_status_bar); initWindow(); }
private void initWindow() {
Window window=getWindow(); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
//5.0以上的手機
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
childView.setFitsSystemWindows(true); }
window.setStatusBarColor(Color.GREEN); }else if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
//4.4以上5.0一下的手機
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
childView.setFitsSystemWindows(true); }
View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.GREEN); content.addView(view); }
} /**
* 獲取狀態欄高度
* @return
*/ private int getStatusHeight() {
int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){
return getResources().getDimensionPixelSize(resourceId); }
return 0; }
}
最終實現結果:
4.4系統
8.0系統
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
JavaScript 創建動態頁面。事件是可以被 JavaScript 偵測到的行為。 網頁中的每個元素都可以產生某些可以觸發 JavaScript 函數或程序的事件。比如說,當用戶單擊按鈕或者提交表單數據時,就發生一個鼠標單擊(onclick)事件,需要瀏覽器做出處理,返回給用戶一個結果。主要事件表總結如下:
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
一、跨域科普
跨域,即跨站HTTP請求(Cross-site HTTP request),指發起請求的資源所在域不同于請求指向資源所在域的HTTP請求。
二、如何產生跨域
當使用前后端分離,后端主導的開發方式進行前后端協作開發時,常常有如下情景:
a、后端開發完畢在服務器上進行部署并給前端API文檔。
三、解決方案
1、JQuery+ajax+jsonp 跨域訪問
下面給出例子:
html 前端代碼:
服務器端:
2、通過注解的方式允許跨域
在Controller類或其方法上加@CrossOrigin注解,來使之支持跨域。
其中origins為CrossOrigin的默認參數,即跨域來源,*即任何來源,也可以是其他域名。即可以以以下形式:
該注解用于方法上,寫法相同,處理時,SpringMVC會對類上標簽和方法上標簽進行合并。
3、通過配置文件的方式允許跨域
在web.xml中添加如下配置:
b、前端在本地進行開發并向遠程服務器上部署的后端發送請求。
c、在這種開發過程中,如果前端想要一邊開發一邊測試接口,就需要使用跨域的方式。
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
在用2.x開發時有的地方的顏色樣式是通過添加 color="primary"
屬性的形式設置的,但是升級3.x之后這種方式除了一些自帶的color屬性的組件、標簽(eg: )可以生效,其他的都失效了。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
XML 不是 HTML 的替代。
XML 和 HTML 為不同的目的而設計:
HTML 旨在顯示信息,而 XML 旨在傳輸信息
xml的用途:
XML 簡化數據共享
XML 簡化數據傳輸
<?xml version="1.0" encoding="UTF-8"?> 聲明
以及根元素 子元素 以及定義根元素結尾
如例
聲明
<?xml version="1.0" encoding="UTF-8"?>
根元素
<note>
子元素
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
定義根元素結尾
命名的規范
在 Windows 應用程序中,換行通常以一對字符來存儲:回車符(CR)和換行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 來存儲新行。
在舊的 Mac 系統中,使用 CR 來存儲新行。
XML 以 LF 存儲換行。
XML 和 HTML 之間的差異
XML 把數據從 HTML 分離
XML 簡化平臺變更
XML 使您的數據更有用
XML 用于創建新的互聯網語言
所有的 XML 元素都必須有一個關閉標簽
XML 標簽對大小寫敏感、
XML 必須正確嵌套
XML 屬性值必須加引號
實體引用
XML 以 LF 存儲換行
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
下載地址:https://v3.bootcss.com/
1. 下載Bootstrap
進入后下載這個標題的Bootstrap
下載完成后,將所需的css,js復制到工程中即可
2. 拷貝官方的模塊文件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3個meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其后! --> <title>Bootstrap 101 Template</title> <!-- Bootstrap --> <link href="css/bootstrap.min.css" rel="stylesheet"> </head> <body> <h1>你好,世界!</h1> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> </body> </html>
3. 頁面添加組件
<button type="button" class="btn btn-primary">(首選項)Primary</button>
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-default">Left</button>
<button type="button" class="btn btn-default">Middle</button>
<button type="button" class="btn btn-default">Right</button>
</div>
然后將二者結合即可:
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-primary">Left</button>
<button type="button" class="btn btn-primary">Middle</button>
<button type="button" class="btn btn-primary">Right</button>
</div>
- 最后的結果如下:
至此你就可以簡單的用前端框架做出美觀的界面了!
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
彈性布局(Flexbox)確實為我們構建復雜、靈活的布局帶來了很大的便利,但是它的兼容性確實讓人很頭痛,下面是我遇到的一個問題:
理想效果:
IE11效果:
html大概結構:
這里大致說一下css,input-container寬高沒設死,由input決定,并設置position: relative;相對定位,并采用display: flex;彈性布局。tooltip設置絕對定位,通過top調整垂直位置,由input-container的彈性布局屬性設置水平居中(是不是覺得我很作死,為什么不直接用絕對定位就把垂直水平都搞定了。哈哈,一切源于一顆裝B+傻B的心,不過,能實際體會一下flexbox帶來的問題,我覺得也挺好的)。
結果在chrome下正常,IE11下就成上圖那樣了,我上MDN Web看了一下,說彈性布局是支持IE11的(下圖),但是從上圖來看,IE下垂直方向是對的,但是水平方向卻不對,說明flexbox還是沒被支持,我也嘗試著添加了各種前綴,還是不行。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
浮動是什么?
浮動元素會脫離文檔流進行左浮或者右浮,直到碰到父級元素或者其他的浮動元素。
為什么清除浮動:浮動會導致父元素高度坍塌,因為浮動脫離文檔流,浮動以后不占文檔流的位置,撐開的父元素高度肯定會坍塌。
清除浮動的八種方法:
1、父級div給出固定的高度。手動定義height,這樣就解決了父級元素獲取不到高度的問題。
優點:代碼量少,簡單容易掌握。
缺點:只適合高度固定的布局,如果高度和父級div不同會出現問題。
2、overflow,設置overflow:hidden。
優點:代碼少,瀏覽器支持。
缺點:會把超出的部分隱藏起來,而且不能配合position使用
3、額外標簽,添加一個新的標簽,如div,或者br,并且設置標簽的屬性clear:both;清除浮動,讓父級能自動獲得高度。
優點:代碼少,瀏覽器支持,不會各種問題。
缺點:會有很多空的div或者br。
4、使用單偽類after和zoom,使用方法:
.clearfloat:after{
content:"";//設置內容為空
height:0;//高度為0
line-height:0;//行高為0
display:block;//將文本轉為塊級元素
visibility:hidden;//將元素隱藏
clear:both//清除浮動
}
.clearfloat{
zoom:1;為了兼容IE
}
優點:瀏覽器支持好,大型的瀏覽器都在使用,建議使用。
缺點:代碼多,需要after和zoom都要使用才能兼容主流的瀏覽器。
5、雙偽類清除浮動。使用方法:
.clearfloat:before,.clearfloatafter {
content: "";
display: block;
clear: both;
}
.clearfloat {
zoom: 1;
}
缺點:不嚴謹不建議使用
6、父級div跟著浮動,所有代碼一起浮動就會形成一個整體,
缺點:會產生新的問題,不建議使用。
7、父級定義display:table;將div屬性變成的表格。
缺點:產生新的問題,而且影響布局。
8、overflow:auto;需要設置width,不設置height,瀏覽器會自動檢測浮動區的高度。
缺點:容易生成滾動條。
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
藍藍設計的小編 http://www.syprn.cn