當前位置:首頁 » 安卓系統 » android獲取布局

android獲取布局

發布時間: 2023-06-01 07:21:30

⑴ android 怎麼拿到activity 布局文件

android拿到activity的好運銀布局文件的話,是要結合activty使用的,在oncreate方法裡面,就悄虧可友宴以初始化布局,然後拿到對應的控制項對象。

⑵ Android怎麼得到Layout里的布局文件里的自定義組件

首先獲取當前Activity的LayoutInflater:
LayoutInflater factory=LayoutInflater.from(this);
接著使用LayoutInflater對象獲取Layout
final View DialogView=factory.inflate(R.layout.dialog, null);
最後使用該layout獲取組件
m_EditText1=(EditText)DialogView.findViewById(R.id.ip_address2);

⑶ 關於Android布局你不知道的

Android常見的5個布局,我想大家一定不會陌生。LinearLayout、RelativeLayout和FrameLayout也是使用頻率較高的布局方式,做Android開發的一定使用過。

傳統的5種布局方式:

不過我的問題並不是問面試者如何使用這些基礎的布局,而是要看面試者怎麼解決布局嵌套(影響性能)和屏幕適配問題。

我們都清楚Android界面的布局太復雜,嵌套層次過深,會使整個界面的測量、布局和繪制變得更復雜,對性能會造成影響。所以我們在寫Layout文件時,也要盡量避免布局的嵌套層次過深的問題。

在怎麼解決問題之前,我們得有一個好方法先判斷當前的問題情況。Android SDK工具箱中有一個叫做Hierarchy Viewer的工具,能夠在App運行時分析Layout。

注意: 在ROOT的手機,或者是安裝開發版的ROM的手機可以直接使用Hierarchy Viewer。如果沒有Root的手機(SDK 4.1及以上),需要在你的PC端添加一個環境變數「ANDROID_HVPROTO=ddm」。

下面列舉一些面試者常使用的方式。

merge merge標簽的作用是合並UI布局,使用該標簽能降低UI布局的嵌套層次。

merge標簽可用於兩種情況:

ViewStub ViewStub標簽引入的布局默認不會inflate,既不會顯示也不會佔用位置。 ViewStub常用來引入那些默認不會顯示,只在特殊情況下顯示的布局,如數據載入進度布局、出錯提示布局等。

需要在使用時手動inflate:

ViewStub在一定的程度可以起到減少嵌套層次的作用,特別是很多時候我們的程序可能不需要走到ViewStub的界面。

include 將可復用的組件抽取出來並通過include標簽使用,但<include>標簽能減少布局的層次嗎?

我認為不能。include主要解決的是相同布局的復用問題,它並不能減少布局的層次。

用RelativeLayout代替LinearLayout

很多人為了減少布局層次喜歡用RelativeLayout代替LinearLayout,不過可能達到的效果並不會很明顯。層次是減少了,但本身RelativeLayout就會比LinearLayout性能差一點。

有一些界面,比如一個圖片和一個文本的布局(ListItem常見的布局方式),可以利用TextView有drawableLeft, drawableRight等屬性,完全不需要RelativeLayout或者LinearLayout布局。

傳統的布局方式存在一定的缺陷,如RelativeLayout要兩次測量(measure)它的子View才能知道確切的高度;如果LinearLayout布局的子View有設置了layout_weight,那麼它也需要測量兩次才能獲得布局的高度。

相對於傳統的布局方式,Android官方還推出了兩種新的布局方式:ConstraintLayout和FlexboxLayout。

ConstraintLayout ConstraintLayout即約束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有點類似,控制項之間根據依賴關系而存在,但比RelativeLayout更加靈活。創建大型復雜的布局仍然可以使用扁平的層級(不用嵌套View Group),說的簡單些就是,再復雜的界面也可以只有2層層次。

要使用ConstraintLayout需要在build.gradle中添加相關的support庫:

使用ConstraintLayout可以有效的解決布局嵌套過多導致的性能問題,官方也對其渲染性能進行了優化,並且ConstraintLayout支持可視化的方式編寫布局。

不過學會熟練使用ConstraintLayout會需要一點時間,但這是值得的。

FlexBoxLayout 做過前端開發(CSS方面)的同學對FlexBox一定不會陌生,最近我在做微信小程序開發時也涉及到FlexBox。FlexBox(彈性布局)是w3c在2009年提出的一種新的布局方案,解決以前那種傳統css的盒模型的局限性。

Google開源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一樣的地方),但已經足夠在Android上改進布局的構建方式。

FlexBoxLayout可以理解成一種更高級的LinearLayout,不過比LinearLayout更加強大和靈活。如果我們使用LinearLayout布局的話,那麼不同的解析度,也許我們要重新調整布局,勢必會需要跟多的布局文件放在不同的資源目錄。而使用FlexBoxLayout來布局的話,它可以適應各種界面的改變(所以叫響應式布局)。

如果對前端的Flexbox不太了解的話,你還需要補一些概念,好在這些東西在網上很容易找到。

可能很多讀者會覺這樣的面試題是吹毛求疵,很多項目中哪有這么復雜的界面,根本就用不到這些優化措施。

可以說厲害的人,或者叫高手,可能只是比較多在意這些細節而已。在實踐中的經歷告訴我,很多難於解決的性能問題,並不是因為有一個影響性能的問題無法攻克,而是沒有一個明顯的制約因素,是有各種小問題一點一點堆積起來,最終積重難返。

所以,把細節做好,或者意識到細節的地方可能引發的問題,對我們解決問題是很有幫助的,不要浪費了讓你可以成長的細節。

有需要更多Android高級進階和面試資料的朋友可以私信我獲取

⑷ android獲取布局的高高度和寬度的問題

java">imageback.post(newRunnable(){
run(){
intw=imageback.getWidth().
}
})

只有在View執行完measure之後,才會有width和height

⑸ android怎麼在應用中獲取通知欄的布局

在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話框框架,標題欄框架,狀態欄框架,通知機制,ActionBar框架等等。
下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用於交互事件的通知。它是位於頂層可以展開的通知列表。它會時不時的提醒你什麼軟體該更新了,什麼人發你微信消息了等。
(網上看了下,全面介紹的文章不多,所以就萌生了寫這篇的念頭,隨便當作回顧筆記。下面我就通過官方文檔、源代碼、書上的一些資料匯總下這一塊的知識,並通過一個通知欄的匯總DEMO讓大家更好的了解這個類的使用,內容有點多,可以根據需求看目錄學習)。

Notificaiton狀態通知欄:

功能作用

1.顯示接收到短消息、即使消息等信息 (如QQ、微信、新浪、簡訊)
2.顯示客戶端的推送消息(如有新版本發布,廣告,推薦新聞等)
3.顯示正在進行的事物(例如:後台運行的程序)(如音樂播放器、版本更新時候的下載進度等)

思維導圖結構

思維導圖的大體結構(按照各個節點延伸拓展學習)
Notificaiton -- service -- BroadcastReceiver -- Intent(flag、Action等屬性應用) -- PendingIntent

感慨:
一個Notificaiton通知的拓展使用就要涉及與4大組建的配合,所以學好整體的知識體系。

聯系:
1.由於service 是在後台運行,所以它意圖做什麼我們看不到,可以通過Notificaiton 來顯示提醒(如音樂的後台播放)。
2.service服務和BroadcastReceiver廣播相結合,在加上Notificaiton 顯示(如程序的後台更新)。
3.Intent作為意圖處理,和Notificaiton的點擊時間緊密結合在了一起,並且與BroadcastReceiver和service的聯系也緊密不可以分割。
(service 在後台之後通過BroadcastReceiver來通知Notificaiton 顯示相關東西,在通過Intent完成用戶的意圖操作)

⑹ android 怎麼獲得一個其他布局中的控制項

layout為弊慧返布局,布局裡面可以放任何空間,獲取空間可以用findViewById方法獲取

android 獲取某個布局控制項 添加到另一個租飢布局中

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

LinearLayout relativeLayout = (LinearLayout) findViewById(R.id.layout456);
ImageView imgApple2 = new ImageView(this);
imgApple2.setImageResource(R.drawable.ic_launcher);
relativeLayout.addView(imgApple2);

LayoutInflater factorys = LayoutInflater.from(MainActivity.this);
final View textEntryView = factorys.inflate(R.layout.layout1, null);

//碧老 LinearLayout linearLayout = (LinearLayout) textEntryView
// .findViewById(R.id.layout1);
// relativeLayout.addView(linearLayout);
EditText editText1 = (EditText) textEntryView
.findViewById(R.id.editText1);

relativeLayout.addView(editText1);

熱點內容
lol天使輔助腳本 發布:2025-02-09 11:24:39 瀏覽:139
溯源碼怎麼生成 發布:2025-02-09 11:15:15 瀏覽:442
android70flash 發布:2025-02-09 11:15:06 瀏覽:725
如何查看伺服器拒絕信息 發布:2025-02-09 11:13:07 瀏覽:946
靜態編譯失敗怎麼回事 發布:2025-02-09 11:12:54 瀏覽:215
sql能力 發布:2025-02-09 10:43:50 瀏覽:982
編譯framework 發布:2025-02-09 10:42:11 瀏覽:382
五子棋對戰演算法 發布:2025-02-09 10:12:19 瀏覽:713
php樹菜單 發布:2025-02-09 10:04:10 瀏覽:360
linux保存ip 發布:2025-02-09 10:04:10 瀏覽:24