中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android布局面試題有哪些

發布時間:2022-01-05 09:44:06 來源:億速云 閱讀:177 作者:iii 欄目:云計算

本篇內容介紹了“Android布局面試題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

  1. Android 中常用的布局都有哪些?

    • FrameLayout

    • RelativeLayout

    • LinearLayout

    • AbsoluteLayout

    • TableLayout

    • GrideLayout(Android 4.0 推出)

  2. 談談 UI 中, Padding 和 Margin 有什么區別?

    android:paddingandroid:layout_margin 的區別,其實概念很簡單,padding 是站在父 view 的角度描述問 題,它規定它里面的內容必須與這個父 view 邊界的距離。margin 則是站在自己的角度描述問題,規定自己和其他(上下左右)的 view 之間的距離,如果同一級只有一個 view,那么它的效果基本上就和 padding 一樣了。

  3. 使用權重如何讓一個控件的寬度為父控件的 1/3?
    可以在水平方向的 LinearLayout 中設置 weightSum 為 3,然后讓其子控件的 weight 為 1,那么該子控件就是 父控件的 1/3。

  4. Android 中布局的優化措施都有哪些?
    這個問題也屬于Android 性能優化的一部分。
    1、盡可能減少布局的嵌套層級
    可以使用 sdk 提供的 hierarchyviewer 工具分析視圖樹,幫助我們發現沒有用到的布局。
    2、不用設置不必要的背景,避免過度繪制 比如父控件設置了背景色,子控件完全將父控件給覆蓋的情況下,那么父控件就沒有必要設置背景。
    3、使用<include>標簽復用相同的布局代碼
    4、使用<merge>標簽減少視圖層次結構
    該標簽主要有兩種用法:
    1) 因為所有的 Activity 視圖的根節點都是 FrameLayout,因此如果我們的自定義的布局也是 FragmenLayout 的時候那么可以使用 merge 替換。
    2) 當應用 Include 或者 ViewStub 標簽從外部導入 xml 結構時,可以將被導入的 xml 用 merge 作為根節 點表示,這樣當被嵌入父級結構中后可以很好的將它所包含的子集融合到父級結構中,而不會出現冗余的節點。
    <merge>只能作為 xml 布局的根元素。
    5、通過<ViewStub>實現 View 的延遲加載

  5. android:layout_gravity 和 android:gravity 的區別?
    第一個是讓該布局在其父控件中的布局方式,第二個是該布局布置其字對象的布局方式。

  6. 關于LinearLayout 的權重算法?

        <LinearLayout  android:layout_width="210dp" android:layout_height="wrap_content" android:orientation="horizontal"><Button  android:layout_width="30dp" android:layout_height="40dp" android:layout_weight="1" android:text="button1" /><Button  android:layout_width="30dp" android:layout_height="40dp" android:layout_weight="1" android:text="button2" /><Button  android:layout_width="30dp" android:layout_height="40dp" android:layout_weight="2" android:text="button3" /> </LinearLayout>


    如上代碼,如何計算出每一個Button的寬度?

    布局大小=剩余空間大小權重所占比例+設定的寬度

    Android布局面試題有哪些

  7. scrollView 嵌套 listview 方式除了測量還有什么方法?

    1. 手動設置 ListView 高度
      經過測試發現,在 xml 中直接指定 ListView 的高度,是可以解決這個問題的,但是 ListView 中的數據是可變的,實際高度還需要實際測量。
      于是手動代碼設置 ListView 高度的方法就誕生了。

    2. 使用單個 ListView 取代 ScrollView 中所有內容
      如果滿足頭布局和腳布局的 UI 設計,直接使用 listview 替代 scrollview

    3. 使用 LinearLayout 取代 ListView
      既然 ListView 不能適應 ScrollView,那就換一個可以適應 ScrollView 的控件,干嘛非要吊死在 ListView 這一棵樹上呢?
      而 LinearLayout 是最好的選擇。但如果我仍想繼續使用已經定義好的 Adater 呢?我們只需要自定 義一個類繼承自 LinearLayout,為其加上對 BaseAdapter 的適配。

    4. 自定義可適應 ScrollView 的 ListView
      這個方法和上面的方法是異曲同工,方法 3 是自定義了 LinearLayout 以取代 ListView 的功能,但如果 我脾氣就是倔,就是要用 ListView 怎么辦?
      那就只好自定義一個類繼承自 ListView,通過重寫其 onMeasure 方法,達到對 ScrollView 適配的效果。

  8. dp 和 px 之間的關系?
    dp:是 dip 的簡寫,指密度無關的像素。 指一個抽象意義上的像素,程序用它來定義界面元素。一個與密度無關的,在邏輯尺寸上,與一個位于像素密度為 160dpi 的屏幕上的像素是一致的。 要把密度無關像素轉換為屏幕像素,可以用這樣一個簡單的公式: pixels=dips*(density/160)。舉個例子,在 DPI 為 240 的屏幕上,1 個 DIP 等 于 1.5 個物理像素。
    布局時最好使用 dp 來定義我們程序的界面,因為這樣可以保證我們的 UI 在各種分辨率的屏幕上都可以正常顯示。

    /** * 根據手機的分辨率從 px(像素) 的單位 轉成為 dp */public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f);
    }/** * 根據手機的分辨率從 dip 的單位 轉成為 px(像素) */public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f);
    }


    于是乎,應該也能理解android項目中的圖片資源文件,一般我們需要在以下幾個文件夾中提供不同大小的圖片。

    • xhdpi: 2.0

    • hdpi: 1.5

    • mdpi: 1.0 (baseline)

    • ldpi: 0.75
      如果一張放在mdpi 的圖片加載到內存中大小是 10m ,那么遇到hdpi的設備圖片加載到內存中大小是15m。

  9. 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?
    屏幕尺寸是指屏幕對角線的長度。單位是英寸,1英寸=2.54厘米
    屏幕分辨率是指在橫縱向上的像素點數,單位是px,1px=1像素點,一般是縱向像素橫向像素,如1280×720
    屏幕像素密度是指每英寸上的像素點數,單位是dpi,即“dot per inch”的縮寫,像素密度和屏幕尺寸和屏幕分辨率有關。

  10. Android 樣式和主題?
    樣式(Styles):
    Android 允許在外部樣式文件中定義 Android 應用程序的 Look 和 Feel ,你可以將定義好的樣式應用在不同的視圖(Views)上。你可以在 XML 文件中定義樣式,并將這些樣式運用到不同的組件上。使用XML這種方式定義樣式,你只需要配置一些通用的屬性,以后如果需要修改樣式,可以集中修改。
    屬性(Attributes):
    你也可以將單個屬性應用到 Android 樣式上,通常會在自定義View 的時候,自定義屬性。
    主題(Themes):
    主題相比單個視圖而言,是應用到整個 Activity 或者 application 的樣式

  11. 如何將Acitivity中的Window的背景圖設置為空?
    getWindow().setBackgroundDrawable(null);android的默認背景是不是為空。

布局適配

在明白上面基礎問題的一些基本概念后,這里總結了一些布局適配的經驗。
在Android 中 有4種普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
常見的普遍分辨率: 低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi) 1080P(xxhdpi)

  • 基本設置
    在中Menifest中添加子元素
    android:anyDensity=”true”時,應用程序安裝在不同密度的終端上時,程序會分別加載xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夾中的資源。
    相反,如果設為false,即使在文件夾下擁有相同資源,應用不會自動地去相應文件夾下尋找資源

  • 適配方案:

    1. 使用wrap_content、math_parent、weight wrap_content:
      根據控件的內容設置控件的尺寸 math_parent:根據父控件的尺寸大小設置控件的尺寸 weight:權重,在線性布局中可以使用weight屬性設置控件所占的比例

    2. 使用相對布局,禁用絕對布局

    3. 創建不同的layout:每一種layout需要保存在相應的資源目錄中,目錄以-為后綴命名。例如,對大尺寸屏幕(large screens),一個唯一的layout文件應該保存在res/layout-large/中。

    4. 使用9-patch PNG圖片:當我們需要使圖片在拉伸后還能保持一定的顯示效果,比如,不能使圖片中的重要像素拉伸,不能使內容區域受到拉伸的影響,我們就可以使用.9.png圖來實現

Android Drawable

Drawable屬于輕量級的、使用也很簡單,Android把可繪制的對象抽象為Drawable,不同的圖形圖像資源就代表著不同的drawable類型, 在實際的開發過程中使用@drawable來使用drawable資源。關于Drawable更多的請看下圖

Android布局面試題有哪些

Android 5.0 新特性–使用SVG圖片資源
SVG的全稱是Scalable Vector Graphics,叫可縮放矢量圖形。它和位圖(Bitmap)相對,SVG不會像位圖一樣因為縮放而讓圖片質量下降。
優點:
* 圖片的完美適配。SVG 圖像在放大或改變尺寸的情況下其圖形質量不會有所損失。這樣我們大大減少了適配所需要的多種分辨率圖片,而且能夠讓圖片完美適配多種分辨率,減少了APK包大小并提升了用戶體驗。
* 尺寸的減小。SVG 是使用XML文件描述的,這種文本格式的圖片尺寸很小,而且便于修改。
* 設計上的輕便。在設計方面我們可以任意修改SVG圖片的顏色,這對于某些情況下需要同一張圖像但不同的顏色圖片是非常方便的,只需要修改fill顏色就可以了。比如,單擊下圖片的不同狀態、按鈕的背景圖片等等。
Android布局面試題有哪些

View 初步了解

  1. View是什么?
    簡單來說,View是Android系統在屏幕上的視覺呈現,也就是說你在手機屏幕上看到的東西都是View。

  2. View是如何繪制出來的?
    View的繪制流程是從ViewRoot的performTraversals()方法開始,依次經過measure(),layout()和draw()三個過程才最終將一個View繪制出來。
    后面的章節會詳細講View 繪制過程,這里只是基礎略帶一下。

  3. View是怎么呈現在界面上的?
    Android中的視圖都是通過Window來呈現的,不管Activity、Dialog還是Toast它們都有一個Window,然后通過WindowManager來管理View。Window和頂級View——DecorView的通信是依賴ViewRoot完成的。

  4. 關于Android View控件的理解
    Android中控件大致被分為兩類ViewGroup,View。ViewGroup作為容器管理View。Android視圖,是類似于Dom樹的架構。父視圖負責測量定位繪制等操作。我們經常在用的findViewById 方法代價昂貴的原因,就是因為他負責至上而下遍歷整棵控件樹,來尋找View實例,在重復操作中盡量少用。現在在用的很多控件都是直接或者間接繼承自View的,為了方便理解可看下圖

    Android布局面試題有哪些

  5. View和ViewGroup什么區別?
    Android的UI界面都是由View和ViewGroup及其派生類組合而成的。其中,View是所有UI組件的基類,而ViewGroup是容納這些組件的容器,其本身也是從View派生出來的。AndroidUI界面的一般結構可參見

    Android布局面試題有哪些

    需要注意的是嵌套次數最好不要超過10層,否則會降低效率,上圖是3層

  6. Android View刷新機制?
    在Android的布局體系中,父View負責刷新、布局顯示子View;而當子View需要刷新時,則是通知父View來完成

  7. RelativeLayout和LinearLayout性能比較?
    1.RelativeLayout會讓子View調用2次onMeasure,LinearLayout 在有weight時,也會調用子View2次onMeasure
    2.RelativeLayout的子View如果高度和RelativeLayout不同,則會引發效率問題,當子View很復雜時,這個問題會更加嚴重。如果可以,盡量使用padding代替margin。
    3.在不影響層級深度的情況下,使用LinearLayout和FrameLayout而不是RelativeLayout。

  8. Android UI界面架構理解
    每個Activity,Dialog,Toast都包含一個PhoneWindow對象,PhoneWindow設置DecorView為應用窗口的根視圖。在里面就是熟悉的TitleView和ContentView,沒錯,平時使用的setContentView()就是設置的ContentView。
    Android布局面試題有哪些


“Android布局面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤峰县| 工布江达县| 壤塘县| 河池市| 金山区| 鹤壁市| 新源县| 尼木县| 扶风县| 册亨县| 柳州市| 石城县| 龙口市| 漳平市| 肇源县| 天台县| 海阳市| 澜沧| 区。| 万年县| 兰溪市| 彭泽县| 从化市| 大悟县| 怀安县| 鸡泽县| 虎林市| 文山县| 榆社县| 嘉黎县| 临朐县| 得荣县| 南汇区| 邯郸市| 石屏县| 抚松县| 封开县| 罗城| 寿光市| 佳木斯市| 嵩明县|