多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android 面試題總結之Android 基礎(六)

Android 面試題總結之Android 基礎(六)

來源:程序員人生   發布時間:2016-06-03 08:25:46 閱讀次數:3682次

Android 面試題總結之Android 基礎(6)

在上1章節Android 面試題總結之Android 基礎ListView(5) 主要是ListView的優化,原理和1些基本問題。

在瀏覽進程中有任何問題,請及時聯系。如需轉載請注明 fuchenxuan de Blog
本章系《Android 之美 從0到1 – 高手之路》Android基礎將會總結了Android 布局常見面試問題。其實對基礎方面Android 開發來講,常常面試不過就是UI,網絡,數據庫,這3大方面,本章節總結了筆記經典的問題,希望對廣大Android 開發者,有所幫助。

  • Android 面試題總結之Android 基礎6
  • 布局面試問題
  • 布局適配
  • Android Drawable
  • View 初步了解

布局面試問題

  1. Android 中經常使用的布局都有哪些?
    • FrameLayout
    • RelativeLayout
    • LinearLayout
    • AbsoluteLayout
    • TableLayout
    • GrideLayout(Android 4.0 推出)
  2. 談談 UI 中, Padding 和 Margin 有甚么區分?

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

  3. 使用權重如何讓1個控件的寬度為父控件的 1/3?
    可以在水平方向的 LinearLayout 中設置 weightSum 為 3,然后讓其子控件的 weight 為 1,那末該子控件就是 父控件的 1/3。
  4. Android 中布局的優化措施都有哪些?
    這個問題也屬于Android 性能優化的1部份。
    1、盡量減少布局的嵌套層級
    可使用 sdk 提供的 hierarchyviewer 工具分析視圖樹,幫助我們發現沒有用到的布局。
    2、不用設置沒必要要的背景,避免過度繪制 比如父控件設置了背風景,子控件完全將父控件給覆蓋的情況下,那末父控件就沒有必要設置背景。
    3、使用<include>標簽復用相同的布局代碼
    4、使用<merge>標簽減少視圖層次結構
    該標簽主要有兩種用法:
    1) 由于所有的 Activity 視圖的根節點都是 FrameLayout,因此如果我們的自定義的布局也是 FragmenLayout 的時候那末可使用 merge 替換。
    2) 當利用 IncludeViewStub 標簽從外部導入 xml 結構時,可以將被導入的 xml 用 merge 作為根節 點表示,這樣當被嵌入父級結構中后可以很好的將它所包括的子集融會到父級結構中,而不會出現冗余的節點。
    <merge>只能作為 xml 布局的根元素。
    5、通過<ViewStub>實現 View 的延遲加載
  5. android:layout_gravity 和 android:gravity 的區分?
    第1個是讓該布局在其父控件中的布局方式,第2個是該布局布置其字對象的布局方式。

  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的寬度?

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

    這里寫圖片描述

  7. scrollView 嵌套 listview 方式除丈量還有甚么方法?

    1. 手動設置 ListView 高度
      經過測試發現,在 xml 中直接指定 ListView 的高度,是可以解決這個問題的,但是 ListView 中的數據是可變的,實際高度還需要實際丈量。
      因而手動代碼設置 ListView 高度的方法就誕生了。
    2. 使用單個 ListView 取代 ScrollView 中所有內容
      如果滿足頭布局和腳布局的 UI 設計,直接使用 listview 替換 scrollview
    3. 使用 LinearLayout 取代 ListView
      既然 ListView 不能適應 ScrollView,那就換1個可以適應 ScrollView 的控件,干嗎非要吊死在 ListView 這1棵樹上呢?
      而 LinearLayout 是最好的選擇。但如果我仍想繼續使用已定義好的 Adater 呢?我們只需要自定 義1個類繼承自 LinearLayout,為其加上對 BaseAdapter 的適配。
    4. 自定義可適應 ScrollView 的 ListView
      這個方法和上面的方法是異曲同工,方法 3 是自定義了 LinearLayout 以取代 ListView 的功能,但如果 我脾氣就是倔,就是要用 ListView 怎樣辦?
      那就只好自定義1個類繼承自 ListView,通太重寫其 onMeasure 方法,到達對 ScrollView 適配的效果。
  8. dp 和 px 之間的關系?
    dp:是 dip 的簡寫,指密度無關的像素。 指1個抽象意義上的像素,程序用它來定義界面元素。1個與密度無關的,在邏輯尺寸上,與1個位于像素密度為 160dpi 的屏幕上的像素是1致的。 要把密度無關像素轉換為屏幕像素,可以用這樣1個簡單的公式: 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項目中的圖片資源文件,1般我們需要在以下幾個文件夾中提供不同大小的圖片。

    • xhdpi: 2.0
    • hdpi: 1.5
    • mdpi: 1.0 (baseline)
    • ldpi: 0.75
      如果1張放在mdpi 的圖片加載到內存中大小是 10m ,那末遇到hdpi的裝備圖片加載到內存中大小是15m。
  9. 甚么是屏幕尺寸、屏幕分辨率、屏幕像素密度?
    屏幕尺寸是指屏幕對角線的長度。單位是英寸,1英寸=2.54厘米
    屏幕分辨率是指在橫縱向上的像素點數,單位是px,1px=1像素點,1般是縱向像素橫向像素,如1280×720
    屏幕像素密度是指每英寸上的像素點數,單位是dpi,即“dot per inch”的縮寫,像素密度和屏幕尺寸和屏幕分辨率有關。

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

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

布局適配

在明白上面基礎問題的1些基本概念后,這里總結了1些布局適配的經驗。
在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),1個唯1的layout文件應當保存在res/layout-large/中。

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

Android Drawable

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

這里寫圖片描述

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

View 初步了解

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

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

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

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

    這里寫圖片描述

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

    這里寫圖片描述

    需要注意的是嵌套次數最好不要超過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都包括1個PhoneWindow對象,PhoneWindow設置DecorView為利用窗口的根視圖。在里面就是熟習的TitleView和ContentView,沒錯,平時使用的setContentView()就是設置的ContentView。
    這里寫圖片描述

    關于View的內容還是比較多的,而本文只是作為Android基礎的知識點作為初步了解,后面會有專門的章節來說解關于View的更多知識點。

    水平有限,若有錯漏,歡迎指正,批評,如需轉載,請注明出處–http://blog.csdn.net/vfush,謝謝!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美zzzz | 成人在线手机视频 | 国产永久高清免费动作片www | 日本欧美一区二区三区在线观看 | video18娇小粉嫩极品hd | 另类专区另类专区亚洲 | 性欧美另类高清videos | 亚洲人成网站在线观看播放青青 | 欧美福利在线播放 | 精品久久成人 | 日韩专区亚洲国产精品 | 校园春色亚洲 | 欧美激情xxxx性bbbb | 欧美高清免费精品国产自 | 欧美.成人.综合在线 | 欧美一级二级毛片视频 | 国产精品视频第一页 | 亚洲成av人影片在线观看 | 午夜影院福利 | 中文成人在线视频 | 日韩影院在线观看 | 片在线观看免费观看视频 | 亚洲二三区 | 国产成人久久精品二区三区牛 | 亚洲一区 中文字幕 久久 | 亚洲国产片在线观看 | 午夜免费视频观看在线播放 | yw在线播放| 在线高清国产 | 最新欧美精品一区二区三区不卡 | 成片免费观看视频在线网 | a级午夜 | 毛片毛片 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 日韩中文字幕视频在线观看 | 麻豆精品国产免费观看 | 精品久久香蕉国产线看观看亚洲 | www.av免费| 亚洲网址| 爽好舒服快奶水视频 | 久久精品国产亚洲片 |