<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android復(fù)習(xí)(五)設(shè)備兼容—>屏幕適配

      1. 適配使用的布局

        目前版本Google還是希望開發(fā)者通過 ConstraintLayout 布局完成適配

      2. 對于特定屏幕

          創(chuàng)建備用布局,即在res/layout/目錄下創(chuàng)建對應(yīng)尺寸的布局文件 例: layout-w600dp,例如用戶啟動多窗口時

          另在 Android Studio 3.0或更高版本中創(chuàng)建備用布局

      1. 打開默認(rèn)布局,然后點擊工具欄中的 Orientation for Preview 圖標(biāo) 
      2. 在下拉列表中,點擊以創(chuàng)建一個建議的變體(如 Create Landscape Variant),或點擊 Create Other
      3. 如果您選擇 Create Other,系統(tǒng)將顯示 Select Resource Directory。在此窗口中,在左側(cè)選擇一個屏幕限定符,然后將其添加到 Chosen qualifiers 列表。添加完限定符后,點擊 OK。(有關(guān)屏幕尺寸限定符的信息,請參閱下面幾部分。)

      此時系統(tǒng)會在相應(yīng)的布局目錄中創(chuàng)建一個重復(fù)的布局文件,以便您可以開始自定義該屏幕變體的布局。

       

      3.  設(shè)定最小寬度值

         

      最小寬度限定符指定屏幕兩側(cè)的最小尺寸,而不考慮設(shè)備當(dāng)前的屏幕方向,因此這是一種指定布局可用的整體屏幕尺寸的簡單方法。

      下面是其他最小寬度值與典型屏幕尺寸的對應(yīng)關(guān)系:

      • 320dp:典型手機(jī)屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
      • 480dp:約為 5 英寸的大手機(jī)屏幕 (480x800 mdpi)。
      • 600dp:7 英寸平板電腦 (600x1024 mdpi)。
      • 720dp:10 英寸平板電腦(720x1280 mdpi、800x1280 mdpi 等)。

      圖 4 提供了一個更詳細(xì)的視圖,說明了不同屏幕 dp 寬度與不同屏幕尺寸和方向的一般對應(yīng)關(guān)系。

      圖 4. 建議的寬度斷點以支持不同的屏幕尺寸

       

      請記住,最小寬度限定符的所有數(shù)值都是密度無關(guān)像素,因為重要的是系統(tǒng)考慮像素密度(而不是原始像素分辨率)之后可用的屏幕空間量。

      注意:您使用這些限定符指定的尺寸不是實際屏幕尺寸,而是 Activity 的窗口可用的寬度或高度(以 dp 為單位)。Android 系統(tǒng)可能會將部分屏幕用于系統(tǒng)界面(如屏幕底部的系統(tǒng)欄或頂部的狀態(tài)欄),因此部分屏幕可能不可供您的布局使用。如果您的應(yīng)用在多窗口模式下使用,則它只能使用該窗口的尺寸。該窗口進(jìn)行大小調(diào)整時,會使用新窗口尺寸觸發(fā)配置更改,以便系統(tǒng)可以選擇適當(dāng)?shù)牟季治募R虼耍诼暶鞒叽鐣r,您應(yīng)具體說明 Activity 需要的尺寸。在聲明為布局提供多少空間時,系統(tǒng)會考慮系統(tǒng)界面使用的所有空間。

       

      4. 使用布局別名

        

      如果同時支持低于和高于 Android 3.2 的版本,那么您必須同時對布局使用最小寬度限定符和 large 限定符。因此,您應(yīng)創(chuàng)建一個名為 res/layout-large/main.xml 的文件,該文件可能與 res/layout-sw600dp/main.xml 完全相同。

      為避免同一文件出現(xiàn)這種重復(fù),您可以使用別名文件。例如,您可以定義以下布局:

      res/layout/main.xml            # single-pane layout
      res/layout/main_twopanes.xml   # two-pane layout

      并添加以下兩個文件:

      • res/values-large/layout.xml    
        <resources>
                <item name="main" type="layout">@layout/main_twopanes</item>
            </resources>
      • res/values-sw600dp/layout.xml
            <resources>
                <item name="main" type="layout">@layout/main_twopanes</item>
            </resources> 

      這兩個文件的內(nèi)容完全相同,但它們實際上并未定義布局,而只是將 main 設(shè)為 main_twopanes 的別名。由于這些文件具有 large 和 sw600dp 選擇器,因此無論使用的是哪個 Android 版本,它們都適用于大屏幕(低于 3.2 版本的平板電腦和 TV 與 large 匹配,高于 3.2 版本的平板電腦和 TV 與 sw600dp 匹配)

       

      5. dp單位轉(zhuǎn)像素單位的說明

         

      在某些情況下,您需要以 dp 表示尺寸,然后將其轉(zhuǎn)換為像素。dp 單位轉(zhuǎn)換為屏幕像素很簡單:

      px = dp * (dpi / 160)

      假設(shè)在某一應(yīng)用中,用戶的手指至少移動 16 像素之后,系統(tǒng)會識別出滾動或滑動手勢,那么在基準(zhǔn)屏幕上,用戶的手指必須至少移動 16 pixels / 160 dpi,相當(dāng)于 1 英寸的 1/10(2.5 毫米),相應(yīng)手勢才能被識別;而在配備高密度顯示屏 (240dpi) 的設(shè)備上,用戶的手指必須至少移動 16 pixels / 240 dpi,相當(dāng)于 1 英寸的 1/15(1.7 毫米)。此距離短得多,因此用戶會感覺應(yīng)用在該設(shè)備上更靈敏。

      要解決此問題,手勢閾值必須在代碼中以 dp 表示,然后再轉(zhuǎn)換為實際像素。例如:

      kotlin
      
           // The gesture threshold expressed in dp
          private const val GESTURE_THRESHOLD_DP = 16.0f
          ...
          private var mGestureThreshold: Int = 0
          ...
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
      
              // Get the screen's density scale
              val scale: Float = resources.displayMetrics.density
              // Convert the dps to pixels, based on density scale
              mGestureThreshold = (GESTURE_THRESHOLD_DP * scale + 0.5f).toInt()
      
              // Use mGestureThreshold as a distance in pixels...
          }
          
      
      java
      
           // The gesture threshold expressed in dp
          private static final float GESTURE_THRESHOLD_DP = 16.0f;
      
          // Get the screen's density scale
          final float scale = getResources().getDisplayMetrics().density;
          // Convert the dps to pixels, based on density scale
          mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
      
          // Use mGestureThreshold as a distance in pixels...
          
      

        

       

      DisplayMetrics.density 字段根據(jù)當(dāng)前像素密度指定將 dp 單位轉(zhuǎn)換為像素時必須使用的縮放系數(shù)。對于中密度屏幕,DisplayMetrics.density 等于 1.0;對于高密度屏幕,等于 1.5;對于超高密度屏幕,等于 2.0;對于低密度屏幕,等于 0.75。此數(shù)字是一個系數(shù),用其乘以 dp 單位,即可得出當(dāng)前屏幕的實際像素數(shù)。

      使用預(yù)縮放的配置值

      您可以使用 ViewConfiguration 類來獲取 Android 系統(tǒng)常用的距離、速度和時間。例如,可通過 getScaledTouchSlop() 來獲取框架用作滾動閾值的距離(以像素為單位):

      kotlin:
      
           private val GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).scaledTouchSlop
          
      
      java:
      
           private static final int GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).getScaledTouchSlop();
          
      

        

       

      ViewConfiguration 中以 getScaled 為前綴的方法都會返回以像素為單位的值,無論當(dāng)前像素密度是多少,該值都會正確顯示。

       

       

      6. 備用圖片的說明以及l(fā)dpi等說明:

      表 1. 適用于不同像素密度的配置限定符。

      密度限定符說明
      ldpi 適用于低密度 (ldpi) 屏幕 (~ 120dpi) 的資源。
      mdpi 適用于中密度 (mdpi) 屏幕 (~ 160dpi) 的資源(這是基準(zhǔn)密度)。
      hdpi 適用于高密度 (hdpi) 屏幕 (~ 240dpi) 的資源。
      xhdpi 適用于加高 (xhdpi) 密度屏幕 (~ 320dpi) 的資源。
      xxhdpi 適用于超超高密度 (xxhdpi) 屏幕 (~ 480dpi) 的資源。
      xxxhdpi 適用于超超超高密度 (xxxhdpi) 屏幕 (~ 640dpi) 的資源。
      nodpi 適用于所有密度的資源。這些是與密度無關(guān)的資源。無論當(dāng)前屏幕的密度是多少,系統(tǒng)都不會縮放以此限定符標(biāo)記的資源。
      tvdpi 適用于密度介于 mdpi 和 hdpi 之間的屏幕(約 213dpi)的資源。這不屬于“主要”密度組。它主要用于電視,而大多數(shù)應(yīng)用都不需要它。對于大多數(shù)應(yīng)用而言,提供 mdpi 和 hdpi 資源便已足夠,系統(tǒng)將視情況對其進(jìn)行縮放。如果您發(fā)現(xiàn)有必要提供 tvdpi 資源,應(yīng)按一個系數(shù)來確定其大小,即 1.33*mdpi。例如,如果某張圖片在 mdpi 屏幕上的大小為 100px x 100px,那么它在 tvdpi 屏幕上的大小應(yīng)該為 133px x 133px。

      要針對不同的密度創(chuàng)建備用可繪制位圖資源,您應(yīng)遵循六種主要密度之間的 3:4:6:8:12:16 縮放比。例如,如果您有一個可繪制位圖資源,它在中密度屏幕上的大小為 48x48 像素,那么它在其他各種密度的屏幕上的大小應(yīng)該為:

      • 36x36 (0.75x) - 低密度 (ldpi)
      • 48x48(1.0x 基準(zhǔn))- 中密度 (mdpi)
      • 72x72 (1.5x) - 高密度 (hdpi)
      • 96x96 (2.0x) - 超高密度 (xhdpi)
      • 144x144 (3.0x) - 超超高密度 (xxhdpi)
      • 192x192 (4.0x) - 超超超高密度 (xxxhdpi)

       

      7. 在AndroidStuido中使用矢量圖形

      矢量圖形通常以 SVG(可縮放矢量圖形)文件的形式提供,但 Android 不支持此格式,因此您必須將 SVG 文件轉(zhuǎn)換為 Android 的矢量圖格式。

      您可以在 Android Studio 中使用 Vector Asset Studio 輕松地將 SVG 轉(zhuǎn)換為矢量圖,具體步驟如下:

      1. 在 Project 窗口中,右鍵點擊 res 目錄,然后依次選擇 New > Vector Asset
      2. 選擇 Local file (SVG, PSD)
      3. 找到要導(dǎo)入的文件并進(jìn)行任何調(diào)整。

        圖 3. 使用 Android Studio 導(dǎo)入 SVG 文件

         

        您可能會注意到 Asset Studio 窗口中出現(xiàn)了一些錯誤,指出文件的某些屬性不受矢量圖支持。但這不會阻止您導(dǎo)入,只是會忽略不受支持的屬性。

      4. 點擊 Next

      5. 在下一個屏幕上,確認(rèn)您希望從中查找項目文件的源集,然后點擊 Finish

        因為可以對所有像素密度使用一個矢量圖,所以此文件位于默認(rèn)的 drawable 目錄中(您不需要使用特定于密度的目錄):

            res/
              drawable/
                ic_android_launcher.xml
            
        

          

         如需詳細(xì)了解如何創(chuàng)建矢量圖形,請閱讀矢量圖文檔。

       

      posted @ 2020-04-21 13:56  王世楨  閱讀(705)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 午夜夜福利一区二区三区| 中文字幕日韩国产精品| 内射干少妇亚洲69XXX| 国产人妻高清国产拍精品| 久久婷婷综合色一区二区| 好屌草这里只有精品| 成熟了的熟妇毛茸茸| 国内揄拍国内精品对久久| 国产精品美女久久久久久麻豆| 中国CHINA体内裑精亚洲日本| 青青草原国产精品啪啪视频 | 久久亚洲精品情侣| 91福利一区福利二区| 亚洲深深色噜噜狠狠网站| 宅男久久精品国产亚洲av麻豆| 国产揄拍国产精品| 国产欧美日韩一区二区加勒比| 日韩一区二区三区高清视频| 国产成人人综合亚洲欧美丁香花| 日韩高清亚洲日韩精品一区二区| 亚洲精品乱码久久久久久中文字幕| 亚洲真人无码永久在线| 亚洲精品麻豆一二三区| 私人毛片免费高清影视院| 在线午夜精品自拍小视频| 又爽又黄又无遮挡的激情视频| 国产乱色熟女一二三四区| 东京热人妻无码一区二区av| 国产精品中文字幕在线| 久久久久成人精品无码中文字幕| 亚洲69视频| 久久精品av国产一区二区| 日韩av影院在线观看| 日本一区二区三深夜不卡| A毛片终身免费观看网站| 国产精品自在线拍国产手青青机版 | 少妇伦子伦情品无吗| 景东| 东方av四虎在线观看| 国产精品福利自产拍久久 | 色欲狠狠躁天天躁无码中文字幕|