Ⅰ android 新控制項之ConstraintLayout(約束布局)
ConstraintLayout (約束布局) 繼承於ViewGroup 允許開發者以靈活的方式定位和調整小部件的大小
ConstraintLayout 可讓開發者使用扁平視圖層次結構(無嵌套視圖組)創建復雜的大型布局。它與 RelativeLayout 相似,其中所有的視圖均根據同級視圖與父布局之間的關系進行布局,但其靈活性要高於 RelativeLayout ,並且更易於與 Android Studio 的布局編輯器配合使用。我理解為ConstraintLayout是一個更加靈活且減少嵌套的 RelativeLayout 的布局
ConstraintLayout作為支持庫提供,開發者可以在從 API 級別 9 (Gingerbread) 開始的 Android 系統上使用。
相信在面對一些復雜的UI頁面,咱們都是使用 RelativeLayout , LinearLayout 層層嵌套實現的.雖然能實現效果.但是層層嵌套層層解析載入View 無疑會耗費載入時間,耗費手機性能.這是時候ConstraintLayout(約束布局),就應運而生了,它出現的目的就是減少嵌套,優化層層嵌套狀況帶來的弊端
要在 ConstraintLayout 中定義某個視圖的位置, 您必須為該視圖添加至少一個水平約束條件和一個垂直約束條件 。每個約束條件均表示與其他視圖、父布局或隱形引導線之間連接或對齊方式。每個約束條件均定義了視圖在豎軸或者橫軸上的位置;因此每個視圖在每個軸上都必須至少有一個約束條件,但通常情況下會需要更多約束條件。
當您將視圖拖放到布局編輯器中時,即使沒有任何約束條件,它也會停留在您放置的位置。不過,這只是為了便於修改;當您在設備上運行布局時,如果視圖沒有任何約束條件,則會在位置 [0,0](左上角)處進行繪制。
在圖 1 中,布局在編輯器中看起來很完美,但視圖 C 上卻沒有垂直約束條件。在設備上繪制此布局時,雖然視圖 C 與視圖 A 的左右邊緣水平對齊,但由於沒有垂直約束條件,它會顯示在屏幕頂部
請注意,約束中不能有循環依賴。
相對定位是在 ConstraintLayout 中創建布局的基本構建塊之一。這些約束允許您相對於另一個小部件定位給定的小部件。您可以在水平和垂直軸上約束一個小部件:
如下圖,這告訴系統我們希望按鈕 B 的左側被約束到按鈕 A 的右側。這樣的位置約束意味著系統將嘗試讓兩側共享相同的位置。
這是可用約束的列表:
app:layout_constraintLeft(自身)_toLeftOf(相對於的控制項)="相對的控制項ID"
1.2 layout_constraintBaseline_toBaselineOf 基線對齊
如果設置了側邊距,它們將應用於相應的約束(如果存在)(圖 ),將邊距強制為目標端和源端之間的空間。通常的布局邊距屬性可用於此效果
2.1屬性:
請注意,邊距只能為正數或等於零,並且取Dimension.
2.2. 約束目標View.GONE的時候 的邊距
3.1 居中定位,就是把定位控制項的左邊對應目標的左邊 右邊對應目標的右邊,上邊對應目標的上邊
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
如上圖,Button的左邊位於父布局的左邊,右邊位於父布局的右邊就做到了水平居中的效果
3.2 偏移 : 有時候居中展示還需要做出偏移效果
可以以一定角度和距離約束一個小部件中心相對於另一個小部件中心。這允許您將一個小部件定位在一個圓圈上
ConstraintLayout對標記為 的小部件進行了特定處理View.GONE。
GONE像往常一樣,小部件不會被顯示並且不是布局本身的一部分(即,如果標記為 ,它們的實際尺寸不會改變GONE)。
但就布局計算而言,GONE小部件仍然是其中的一部分,但有一個重要區別:
注意:
使用的邊距將是 B 在連接到 A 時定義的邊距(參見圖 7 示例)。在某些情況下,這可能不是您想要的邊距(例如,A 到其容器的一側有 100dp 的邊距,B 到 A 的邊距只有 16dp,將 A 標記為已消失,B 到容器的邊距為 16dp)。出於這個原因,您可以指定在連接到被標記為已消失的小部件時使用的備用邊距值(請參閱 上面有關已消失的邊距屬性的部分 )
1.1 您可以為自身定義最小和最大尺寸ConstraintLayout
1.2 控制項尺寸約束
android:layout_width可以通過 3 種不同方式設置和 android:layout_height屬性 來指定控制項的尺寸:
重要提示:
MATCH_PARENT不建議用於ConstraintLayout. 可以通過MATCH_CONSTRAINT將相應的左/右或上/下約束設置為來定義類似的行為"parent"。
WRAP_CONTENT (添加在 1 . 1中):強制約束
如果維度設置為WRAP_CONTENT,則在 1.1 之前的版本中,它們將被視為文字維度——也就是說,約束不會限制結果維度。雖然通常這已經足夠(並且更快),但在某些情況下,您可能希望使用WRAP_CONTENT,但繼續強制執行約束以限制結果維度。在這種情況下,您可以添加相應的屬性之一:
MATCH_CONSTRAINT維度(添加在 1 . 1中)
當維度設置為MATCH_CONSTRAINT時,默認行為是讓結果大小佔用所有可用空間。有幾個額外的修飾符可用:
layout_constraintWidth_min和layout_constraintHeight_min: 將設置此維度的最小尺寸
layout_constraintWidth_max和layout_constraintHeight_max: 將設置此維度的最大尺寸
layout_constraintWidth_percent和layout_constraintHeight_percent: 將此維度的大小設置為父維度的百分比
比率: 寬高比
您還可以將小部件的一個維度定義為另一個維度的比率。為此,您需要將至少一個約束維度設置為0dp(即MATCH_CONSTRAINT),並將屬性設置layout_constraintDimensionRatio為給定的比率。例如:
除此之外,在設置寬高比的值的時候,還可以在前面加W或H,分別指定寬度或高度限制。 例如:
app:layout_constraintDimensionRatio="H,2:3"指的是 高:寬=2:3
app:layout_constraintDimensionRatio="W,2:3"指的是 寬:高=2:3
...
Guildline的主要屬性:
Constraint 約束布局為了解決嵌套布局的弊端,更快的載入頁面而出現,但是約束布局需要整體架構頁面要有明確的構建頁面的思維,故而學習以及思維模式要有的.所以個人感覺是簡單頁面還是用相對布局,線性布局就夠了,對於復雜布局約束布局是你優化頁面載入的不二之選.
*寫作不容易,且贊且珍惜!!!*
Ⅱ android app在個別三星手機上有時出現布局錯亂
如果手機下載安裝的第三方應用出現問題,無法正常使用(無法開啟、卡屏、閃退等),三星手機一般建議進行以下步驟排查及處理:
1.關閉重新啟動該應用。
2.建議將此軟體卸載重新安裝嘗試。
3.更換其他版本嘗試。
4.更新下手機系統版本後安裝嘗試
5.備份手機數據(電話簿、簡訊息、多媒體文件等),恢復出廠設置後重新安裝嘗試
6.若恢復出廠後依舊無法使用,同時其他第三方軟體可以正常使用,只有此軟體不能正常運行,是與手機系統存在兼容性問題。建議將手機送至就近的服務中心進行檢測及進一步處理。
Ⅲ android 怎麼分析app界面布局(device monitor不起作用)
android 的device monitor不起作用,抓取不到真機android 9.0 的uix,可以採用adb命令的辦法,分兩步,一步獲取uix,一步獲取截圖。
命令如下:
Ⅳ 如何解決AndroidApp開發布局顯示問題
Android app開發布局顯示的方式如下:
View的布局顯示方式有下面幾種:線性布局(Linear Layout)、相對布局(Relative Layout)、表格布局(Table Layout)、網格視圖(Grid View)、標簽布局(Tab Layout)、列表視圖(List View)、絕對布局(AbsoluteLayout)。
View的布局顯示方式直接影響用戶界面,View的布局方式是指一組View元素如何布局,准確的說是一個ViewGroup中包含的一些View怎麼樣布局。ViewGroup類是布局(layout)和視圖容器(View container)的基類,此類也定義了ViewGroup.LayoutParams類,它作為布局參數的基類,此類告訴父視圖其中的子視圖想如何顯示。例如,XML布局文件中名為layout_something的屬性(參加上篇的4.2節)。我們要介紹的View的布局方式的類,都是直接或間接繼承自ViewGroup類,如下圖所示:
Ⅳ 在安卓,IOS的app中,其頁面布局是怎樣實現的
從使用場景上,Web App用戶面臨比原生APP用戶更嚴峻的問題: 1、 頁面跳轉更加費力,不穩定感更強 思考點:如何減少跳轉(扁平結構、頁面布局技巧),增加數據及展示的流暢流程及穩定性(技術) 2、 更小的頁面空間(由於瀏覽器的導航本身佔用一部分屏幕空間),更大的信息記憶負擔 移動設備的屏幕要小得多。這種如同透過門縫進行的閱讀增加了認知的負擔。人腦的短期記憶是不穩定的,用戶在滾動屏幕的過程中需要臨時記憶的信息越多,他們的表現就會越差。——《貼心設計:打造高可用性的移動產品》 思考點:排版更清晰、信息更簡練 (可在原生APP基礎上去掉一些豐富、復雜的視覺表現) 3、 導航不明顯,原有底部導航消失,有效的導航遇到挑戰 思考點:如何有效的提供導航?有哪些形式? 4、 交互動態效果收到限制,影響一些頁面場景、邏輯的理解。 思考點:比如登錄注冊流程的彈出、完成及異常退出,做好文字提示。 針對以上困境,解決方法總結如下: 首先,從APP到WAP版,在產品上,最明顯且核心的: 1、 精簡功能,只將核心的任務實現,非核心的枝節可考慮刪減。 2、 做好新的Web App導航. 3、 補充從Web App 對 下載原生APP 的引導。 一、常見的幾種Web APP導航樣式 1.1頂部底部導航的設計: 1.2導航快捷鍵設計: 美團:頂部欄固定位置 淘寶:懸浮圓圈–可的按鈕 優酷:非首屏時頁面右側懸浮 二、有效的導航設計 1、 基本的快捷導航中包括 返回常用頁面(如 首頁 我的 等)的快捷方式 2、 出現深層架構時 及時補充返回重要層級頁面的快捷方式 3、 情境式導航,方便用戶快捷跳轉到ta想去的頁面,如購買結束時提供查看訂單詳情的按鈕。 PS:Web APP更加需要畫頁面跳轉的流程圖,摸清各個頁面的入口,尤其是頁面返回的流程;有些簡化的返回按鈕,可以特殊註明返回到的頁面 在哪裡出現引導? 一般首頁、核心任務的頁面(如 電商Web APP的商品詳情頁 、視頻Web APP的視頻觀看頁) 二、引導下載APP有哪些形式? 頁面頂部放置下載條 頁面底部懸浮層引導 融合在頁面首屏中 下載按鈕形式 底部Foot里含客戶端下載入口 其次,在設計Web App時,有以下小技巧可以參考: 1、 從頁面布局上減少跳轉:使用交互技巧隱藏文字(eg 騰訊視頻) 利用收起按鈕 減少頁面跳轉。 2、 取消float浮層,增大展示空間(eg:大眾點評) 取消float浮層,同時在詳情尾部再次加上 「購買」按鈕。 浮層的轉換處理。 3、 頁面中對圖片進行縮小(因情況而異)的處理、精簡一些標簽導航的視覺展示。 視覺微調。 技術上注意點: 1)各手機瀏覽器的兼容測試 2)底層服務的調取(能調取,但只有當其是核心功能時才保留 eg:新浪、美團等皆去掉了頭像上傳功能) 3)注意離線數據存儲,減少數據請求頻率。 4)考慮保存用戶的哪些數據:設置、個人數據、閱讀錨點、跳出頁面等。 5)避免動效與瀏覽器的交互沖突 6)按順序 非同步載入 eg: 騰訊視頻 騰訊視頻非同步載入。 雖然Web App目前處於比較尷尬的地位,我們是由於原APP客戶端中一些頁面需要分享出去才開啟製作Web App版。 但是不得不承認,基於Web的輕APP 更新迭代起來更方便,隨著H5技術的成熟和發展,也許以後就是基於H5的Web App的天下了 0.0
Ⅵ ios和android設計規范區別
Android 整體視覺設計規范
App 界面的整體視覺組成大致可以分為四個部分:
StatusBar(狀態欄)、TopBar(頭部欄)、Body Content(內容區域)、FootBar(底部欄)。
StatusBar 的樣式由系統 UI 決定,除背景配色外,不需要做其他的設計。
TopBar 兩個系統平台規范上的顯示高度與內容布局有明顯的差異,按各自的規范進行設計。
Body Content 除控制項外,採用相同的布局與視覺設計。
FootBar 除控制項外,採用相同的布局與視覺設計。
二、Android差異化設計案例解讀
1. StatusBar/TopBar 差異化設計
2. 常用的三個系統圖標/控制項差異化
3. 搜索/輸入控制項差異化
4. 彈窗樣式差異化
三、Android系統交互與iOS系統交互的差異化設計
1. 交互方式:
除了上面提到了彈窗樣式與交互差異化之外,對於一些系統交互行為,推薦盡量使用 iOS 與 Android 各自平台的系統控制項與交互方式,降低開發與用戶學習成本。系統交互行為主要包含以:返回上級/關閉當前頁面的方式、通知開啟或者關閉設置、發送/提交內容(鍵盤自帶或者新增按鈕點擊)、Item 列表排序/刪除、提示窗顯隱、時間選擇控制項、手勢操作等等。
2. 交互動效:
交互動效也推薦盡量使用 iOS 與 Android 各自平台的系統提供的動效。比如 iOS 的鏡頭切近與高斯模糊,Android 的紙墨磁吸等等。
單條 item 的交互差異示例
總體來說,就是以 iOS 版為參照,底部欄與中間內容區域盡量保持相同的設計,通過對狀態欄、頭部樣式、控制項(開關、選框、搜索、輸入)、系統圖標(返回、分享、更多)、彈窗樣式、系統交互進行 Android 規范化差異,以保證該 App 的設計在兩個不同的系統平台即能符合中國用戶的使用習慣,又能適當體現系統的不同風格與特性。
Ⅶ 如何修改安卓APP的界面布局
修改安卓APP界面布局步驟:
File --> New --> android xml file,選擇 一個最外層的容器,輸入名字便可創建。
可以復制一個已有的布局,在裡面做修改。
View7種布局概述
1、線性布局(Linear Layout)
2、相對布局(Relative Layout)
3、表格布局(Table Layout)
4、列表視圖(List View)
5、網格視圖(Grid View)
6、絕對布局(AbsoluteLayout)
7、標簽布局(Tab Layout)
Ⅷ App登錄界面----布局篇
我自學了3個月的Android基礎,居然一個App都做不出來。在我之前學的同時居然忘記了之前學的內容。所以我現在重新開始復習,這篇文章將是我復習的開始也是基礎的穩固,同時也是將來記不得了可以自我回顧的筆記。首先是從App登錄開始。
首先第一是布局,登錄界面布局那就要用到控制項,登錄界面所需控制項如下:
1.姓名 輸入框 密碼 輸入框:就要有Textview文本控制項 X 2, Editview輸入文本框控制項 X 2
2.立即注冊 忘記密碼 登錄 :就要有Button控制項 X 3
既然要布局就要有布局控制項:可以用RelativeLayout相對布局,LinearLayout線性布局,TableLayout表格布局,FrameLayout幀布局,AbsoluteLayout絕對布局。我要選用就就是前兩個布局:RelativeLayout相對布局或者LinearLayout線性布局。
這就是我最終預想所要達到的效果:
首先打開布局文件:展開app--->res--->layout--->activity_main.xml
切換到設計模式Design:
然後從調色板Palette就是控制項庫拖拽出所需控制項:
2個Textview,2個Editview ,3個Button.一開始布局控制項就是相對布局控制項,RelativeLayout相對布局控制項允許通過指定顯示對象相對於父容器或其他兄弟控制項的相對位置結合margin,padding來進行布局。
然後我們再切換迴文本模式Text:
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>這就組成了一個控制項。
再來解釋解釋RelativeLayout相對布局控制項是啥意思:
上圖所表現的意思就是RelativeLayout相對布局控制項的特點:TextView文本控制項基於父容器(RelativeLayout相對布局控制項)之下,再看圖:
它會自動添加默認屬性:android:text="文本控制項"//這是文本屬性可以輸入文字
android:textSize="50dp"//這是文本大小屬性是控制text屬性的大小
android:layout_width="wrap_content"//這是寬,選擇的自適應屏幕
android:layout_height="wrap_content"這是高。
android:layout_marginTop="253dp"// 重點就在這里了:在RelativeLayout相對布局下拖出的控制項會有這條屬性,意思是TextView相距父容器253dp的距離
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
好了我們繼續:我寫的這個布局呢?只用了兩個EditView控制項和三個Button控制項。先說EditView控制項。
拖拽出來改好了各種屬性但是和我的不一樣,哪裡不一樣?有邊框,邊框還是圓角。怎麼弄的?這是改變了它的樣式。首先目錄找到drawable文件按下Alt+lns鍵,點擊Drawable resource file
那就會彈出下面這個框框好創建資源文件,File name:這是資源文件的名字,Root element:這是需要創建什麼類型的資源文件。
假如沒有出現這個對話框而是另外的對話框就請更換模式
將Android 目錄模式切換成Project目錄模式
找到drawable文件重復上面操作就會出現
名字就自己取吧,類型選擇shape文件
這就是我為EditView設置的資源文件,那麼怎麼載入它呢?
用背景background屬性來載入:@drawable/border用@選擇文件位置載入就成功了。
文本框就做好了。噢!!!等等還有個屬性android:hint="登錄"還沒介紹,這是提示語:比如請輸入用戶名,請輸入密碼,這樣的提示語,只起到提示作用。範例:android:hint="請輸入用戶名"
好吧依次類推,Button按鈕也是這樣。我們先來看忘記密碼,立即注冊兩控制項這兩我沒這樣載入資源文件,我只用了3條屬性,
android:background="@null"//這條意思是背景設置路徑為空,作用是消除邊框。
android:shadowColor="#338AFF"//改變按鈕背景顏色,讓它看起來和相對布局背景融為一體。
android:textColor="#0066CC"//改變文字顏色
怎麼樣是不是和QQ登錄界面的差不多
那再來看立即登錄按鈕,這個按鈕我用了三個資源文件,為了讓按鈕按下抬起有一個變色效果,能夠反饋用戶視覺:您已按下按鈕。
首先看按下的資源文件:
這是按下的模樣,radius是設置圓角,然後是按下後的顏色。
再來看抬起:
這是抬起時候的樣子,圓角按下抬起都要設置一樣,不然按下是一個樣,抬起又是另一個樣子,然後是抬起的顏色。
這是兩個資源文件,如何讓按鈕呈現出按下抬起的不同效果呢?
就需要另一個資源文件來操控:selector資源文件
由他來控制這兩個資源文件:
<item/>這是資源文件的標簽,包括shape資源文件的:<corners/><solid/>都是標簽
標簽<item/>裡面
android:drawable="@drawable/clickroundedcolor"//是載入按下資源文件,
android:state_pressed="true"//true就是對,就是一個判斷作用,判斷是否按下,按下就載入按下的資源文件
然後再一個子標簽<item/>
<item android:drawable="@drawable/roundedcolor"/>也就是說當上面pressed不為true的時候執行下面這個標簽載入抬起狀態的效果。
這就做成了按下深藍抬起淺藍的顏色效果。那今天就到這里,復習到了什麼Editview Button控制項的使用然後在原來的基礎上學到了EditView 和Button控制項的UI設計一些細節效果。
還熟悉了Android studio。之前用Eclipse學習的Android,現在改用AS還特別不習慣,希望復習後我會熟練Android studio。恩,還有看到忘記密碼,立即注冊兩個按鈕是不是還會聯想到還有兩個布局。沒錯,忘記密碼和立即注冊這兩個布局文件,就不用記錄了,相信會了登錄主界面布局,其他兩個不在話下。
Ⅸ Android 將App的內容延伸到狀態欄/導航欄
來自我的CSDN博客: http://blog.csdn.net/dahaohan/article/details/52175190
看過Android的桌面應用都是介樣的:
如何讓自己的應用也達到這般效果呢?這里就介紹幾種常用的方法以及它們之間的區別。
首先展示下此次demo的布局和初始狀態:
初始效果圖如下:
使用這個方式首先要理解幾個概念,窗口層級以及窗口background/窗口透明:
Google在API-19 以及API-21新增對狀態欄/導航欄窗口透明和顏色的控制:
對應的在主題內即可控制:
這里首先要明了這里狀態欄和導航欄窗口是系統級窗口而Activity對應的時應用窗口,它們屬於不同的窗口層級;
然後狀態欄/導航欄系統級窗口是在App應用窗口之上,故而Activity應用窗口雖然有整個屏幕的大小,但是可顯示內容的區域得除去其上疊加的不透明的窗口區域。詳細的窗口計算繪制可參考大神老羅的博文:
Android窗口管理服務WindowManagerService計算Activity窗口大小的過程分析
下面來使用主題控制導航欄/狀態欄透明,同時看看上述兩種設置透明的方式效果有何不同:
初始桌面和啟動Activity效果圖:
可以看到雖然導航欄/狀態欄透明了,當時應用窗口顯示的內容依然只是除去了兩個系統窗口之外的區域,並沒有衍生到導航欄/狀態欄之下。
效果如下:
可以看到已經將應用的內容布局延伸到導航欄/狀態欄下方了,來看看關於android:windowTranslucentStatus
android:windowTranslucentNavigation的官方說明看看來理解其與設置color transparent的區別:
根據FLAG的說明,可以看出設置該標志位等同於View申請設置:
PS:從效果圖看,雖然布局延伸到狀態欄導航欄區域,但是相應的內容「hello world」文字也被狀態欄/導航欄遮住了。在布局根視圖設置fitsSystemWindows為true可以使得,系統自動為視圖添加一個狀態欄/導航欄高度的padding:
效果如下:
查看SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 和 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN的說明,可以發現其實還有兩個非常接近的FLAG:
根據官方的說明提示,SYSTEM_UI_FLAG_FULLSCREEN / SYSTEM_UI_FLAG_HIDE_NAVIGATION主要用於動態切換隱藏/顯示系統導航欄/狀態欄;例如書籍閱讀應用/視頻播放應用等。而像游戲類的全屏應用則推薦使用window flag。
上述的透明導航欄/狀態欄等API基本是需要API-19或是API-21才能使用的,這里還有一種API-1的方案能夠實現布局內容全屏:
實際上只需要設置FLAG_LAYOUT_NO_LIMITS就足夠了;這FLAG是看Android原生的Launcher / Keyguard源碼,看到有用到如此設置,其窗口設置具體原理我也沒有弄清..... 有大神了解可以指點下。
PS:這個套路下,使用fitsSystemWindows="true"是無效的,智能自己控制號布局位置。