動態載入布局的技巧

2021-08-07 19:27:56 字數 2904 閱讀 5189

雖然動態載入碎片的功能很強大,可以解決很多實際開發中的問題,但是它畢竟只是在乙個布局檔案中進行一些新增和替換操作。如果程式能夠根據裝置的分辨路或螢幕大小在執行時來決定載入哪個布局,那麼我們可以自由發揮的空間就更多了。下面我們就談一下動態載入布局的技巧。

**使用限定符**

如果你經常是用平板電腦,應該會發現很多的平板應用程式都採用的是雙頁模式(程式會在左側的面板下是乙個包含子項的列表,在右側面板上顯示內容),因為平板電腦的螢幕足夠大,完全可以同時顯示兩頁的內容,但手機螢幕一次只能顯示一頁的內容因此兩個頁面需要分開顯示。

那麼怎樣判斷程式在執行時該使用雙頁模式還是單頁模式呢?這就需要借助限定符來實現了(qualifiers)來實現了。下面我們通過乙個例子來學習一下它的用法,修改fragmenttest專案中的activitty_main.xml檔案,**如下圖所示。

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

**android:layout_width="match_parent"

**android:layout_height="match_parent"

android:id="@+id/left_fragment"

/>

linearlayout>

接著在res目錄下新建layout-large資料夾,在這個資料夾下新建乙個布局,也叫做activity_main.xml,**如下圖所示

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/left_fragment"

android:name="com.example.fragmenttest.leftfragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1" />

android:id="@+id/right_fragment"

android:name="com.example.fragmenttest.rightfragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="3" />

linearlayout>

可以看到,layout/activity_main 布局只包含乙個碎片,而layout-large/activity_main布局包含了兩個碎片,即雙頁模式。其中,large就是乙個限定符,那麼被認為螢幕時large的裝置就會自動載入layout-large資料夾下的布局,而螢幕小的還是載入layout資料夾下的布局。

android中常用的限定符可以參考下表

使用最小寬度限定符

在上面我們使用large限定符成功解決了單雙頁的判斷的問題,不過很快就有乙個新問題出現了,large到底指多大呢?有時候我們希望更靈活的為不同裝置載入布局,不管它們是不是被系統認定為large,這時候就可以使用最小寬度限定符(smallest-widthqualifier)

在res目錄下新建layout-sw600dp資料夾,然後在這個資料夾下新建activity_main.xml布局,**如下所示。

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/left_fragment"

android:name="com.example.fragmenttest.leftfragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1" />

android:id="@+id/right_fragment"

android:name="com.example.fragmenttest.rightfragment"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="3" />

linearlayout>

這就意味著,當程式執行在螢幕寬度大於600dp的裝置上時,會載入layout-sw600dp/activity_main布局,當程式執行在螢幕寬度小於600dp的裝置上時,則仍然載入預設的layout/activity_main布局

動態載入布局

今天在學習第二行 的時候遇到乙個問題,在碎片化的這一節有乙個動態載入布局。所謂動態載入布局就是為了相容手機和平板尺寸上的大一不一。使用動態載入布局的方式程式會根據裝置的解析度或者螢幕大小在執行的時候進行判斷來載入哪乙個布局。先看實現效果 手機 平板 實現方法就是有2個activity main.xm...

android 動態載入布局

android 開發 動態載入布局 動態載入布局分為匯入xml控制項和新建控制項兩種,新增至原布局中,適用於動態變化的介面和不適合用xml固定布局的情況 1 自己新建xml布局並與原來的activity所顯示的布局相關聯 layoutinflaterminflater layoutinflater....

android動態載入布局

由於前段時間專案需要,需要在乙個頁面上載入根據不同的按鈕載入不同的布局頁面,當時想到用 tabhot 不過美工提供的介面圖完全用不上tabhot 所以想到了動態載入的方法來解決這一需求。在這裡我整理了一下,寫了乙個 demo 希望大家以後少走點彎路。首先,我們先把介面的框架圖畫出來,示意圖如下 中間...