android——屏幕適配

一、屏幕適配的重要性

在 Android 開發中,屏幕適配是非常關鍵的。因為 Android 設備具有各種各樣的屏幕尺寸、分辨率和像素密度。如果沒有進行良好的屏幕適配,應用可能會出現顯示不完整、元素拉伸或壓縮變形、字體大小不合適等問題,極大地影響用戶體驗。

二、基本概念

  1. 屏幕尺寸(Screen Size)
    • 指的是屏幕的對角線長度,通常以英寸(inch)為單位。例如,常見的手機屏幕尺寸有 5.5 英寸、6.1 英寸等,平板屏幕尺寸可能有 7 英寸、10 英寸等。不同的屏幕尺寸需要考慮布局的調整,以確保內容在各種尺寸的屏幕上都能合理展示。
  2. 分辨率(Resolution)
    • 表示屏幕上像素的數量,通常用水平像素數 × 垂直像素數來表示,如 1920×1080。高分辨率屏幕能夠顯示更清晰的圖像,但也意味著需要合理安排布局和資源,避免元素過小或過大。
  3. 像素密度(Density)
    • 是指每英寸屏幕所包含的像素數量,單位是 dpi(dots per inch)。例如,低密度屏幕(ldpi)的像素密度約為 120dpi,中密度屏幕(mdpi)約為 160dpi,高密度屏幕(hdpi)約為 240dpi,超高密度屏幕(xhdpi)約為 320dpi 等。不同的像素密度會影響圖像資源的清晰度,需要為不同密度的屏幕提供合適的資源。

三、適配方法

  1. 布局適配
    • 使用相對布局(RelativeLayout)和線性布局(LinearLayout)
      • 相對布局可以通過設置控件之間的相對位置關系來實現靈活的布局。例如,可以將一個按鈕設置為相對于另一個按鈕的右邊或者下方。線性布局則可以按照水平或垂直方向排列子控件,并且可以通過設置權重(weight)來分配子控件在布局中的空間比例。
      • 示例:
        • 在一個線性布局中,有兩個按鈕,想要讓它們平分屏幕寬度,可以將線性布局的方向設置為水平,然后為兩個按鈕設置相同的權重。
        ?
        <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Button 1"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Button 2"/>
        </LinearLayout>
        
    • 使用百分比布局(Percent Support Library)
      • 這是一個支持庫,它允許通過百分比來設置視圖的大小和位置。可以在布局文件中精確地指定一個視圖占父視圖寬度或高度的百分比。
      • 示例:
        • 要讓一個 TextView 占據父視圖寬度的 50%,可以這樣設置:

        <android.support.percent.PercentFrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"app:layout_widthPercent="50%"android:text="This is a TextView"/>
        </android.support.percent.PercentFrameLayout>
        
    • 使用約束布局(ConstraintLayout)
      • 這是 Android Studio 中推薦的布局方式,它通過約束來定義視圖的位置和大小。可以在可視化編輯器中方便地添加和編輯約束條件。
      • 例如,要讓一個視圖在父視圖的中心,可以添加以下約束:
        • 視圖的水平中心與父視圖的水平中心對齊,垂直中心與父視圖的垂直中心對齊。

        <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"android:text="Centered Text"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
        
  2. 尺寸資源適配
    • 創建不同維度的資源文件
      • 根據不同的屏幕尺寸(如小屏幕、正常屏幕、大屏幕、超大屏幕)創建對應的尺寸資源文件。例如,在res/values - smallres/values - normalres/values - largeres/values - xlarge等文件夾下分別定義尺寸值。
      • 以定義文本大小為例,在res/values - small文件夾下的dimens.xml文件中可以定義較小的文本尺寸:
        ?
        <resources><dimen name="text_size">12sp</dimen>
        </resources>
        

        而在res/values - normal文件夾下的dimens.xml文件中可以定義適中的文本尺寸:
        ?
        <resources><dimen name="text_size">14sp</dimen>
        </resources>
        
    • 使用限定符(Qualifiers)
      • 除了屏幕尺寸,還可以使用像素密度限定符(如mdpihdpixhdpi等)、方向限定符(land表示橫向,port表示縱向)等來提供不同的資源。
      • 例如,為不同像素密度的屏幕提供不同的圖片資源。將一張圖片的不同分辨率版本分別放在drawable - mdpidrawable - hdpidrawable - xhdpi等文件夾下。Android 系統會根據設備的像素密度自動選擇合適的圖片進行顯示。
  3. 代碼適配
    • 獲取屏幕參數并動態調整布局
      • 在代碼中可以通過DisplayMetrics類獲取屏幕的參數,如屏幕密度、分辨率等,然后根據這些參數動態地調整視圖的大小和位置。
      • 示例:
        • 以下代碼可以獲取屏幕密度并根據密度來設置視圖的大小:

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        float density = displayMetrics.density;
        Button button = findViewById(R.id.button);
        // 根據屏幕密度設置按鈕的寬度
        button.setWidth((int)(100 * density));
        
    • 使用自適應框架(如 AutoSize)
      • 有一些開源的框架可以幫助進行屏幕適配,例如 AutoSize。它可以自動根據屏幕寬度適配字體大小和視圖大小,減少手動適配的工作量。

屏幕適配是一個綜合性的工作,需要結合布局、資源和代碼等多種方式,以確保應用在各種 Android 設備上都能有良好的顯示效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64090.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oscp學習之路,Kioptix Level2靶場通關教程

oscp學習之路&#xff0c;Kioptix Level2靶場通關教程 靶場下載&#xff1a;Kioptrix Level 2.zip 鏈接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取碼: 1111 搭建好靶場之后輸入ip a看一下攻擊機的IP。 確定好本機IP后&#xff0c;使用nmap掃描網段&…

第二十六周機器學習筆記:PINN求正反解求PDE文獻閱讀——正問題

第二十六周周報 摘要Abstract文獻閱讀《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 問題的設置3.偏微分方程的數據驅動解3.1 連續時間模型3.1.1 …

【安全編碼】Web平臺如何設計防止重放攻擊

我們先來做一道關于防重放的題&#xff0c;答案在文末 防止重放攻擊最有效的方法是&#xff08; &#xff09;。 A.對用戶密碼進行加密存儲使用 B.使用一次一密的加密方式 C.強制用戶經常修改用戶密碼 D.強制用戶設置復雜度高的密碼 如果這道題目自己拿不準&#xff0c;或者…

中關村科金智能客服機器人如何解決客戶個性化需求與標準化服務之間的矛盾?

客戶服務的個性化和標準化之間的矛盾一直是一個挑戰。一方面&#xff0c;企業需要提供標準化的服務以保持運營效率和成本控制&#xff1b;另一方面&#xff0c;為了提升客戶滿意度和忠誠度&#xff0c;企業又必須滿足客戶的個性化需求。為此&#xff0c;中關村科金推出了智能客…

OPPO Android面試題及參考答案 (上)

性能優化方面,講一下圖片內存占用計算,以及如何避免持有不必要的引用。 在 Android 中,計算圖片內存占用主要與圖片的尺寸和像素格式有關。對于一張位圖(Bitmap),其內存占用大小可以通過以下方式估算:內存占用 = 圖片寬度 圖片高度 每個像素占用字節數。例如,常見的 …

Agent 案例分析:金融場景中的智能體-螞蟻金服案例(10/30)

Agent 案例分析&#xff1a;金融場景中的智能體 —螞蟻金服案例 一、引言 在當今數字化時代&#xff0c;金融行業正經歷著深刻的變革。隨著人工智能技術的飛速發展&#xff0c;智能體&#xff08;Agent&#xff09;在金融場景中的應用越來越廣泛。螞蟻金服作為金融科技領域的…

ElasticSearch 的工作原理

理解 ElasticSearch 的工作原理需要從索引、搜索、以及其背后的核心機制幾個方面來探討。 1. ElasticSearch 是什么&#xff1f; ElasticSearch 是一個分布式搜索和分析引擎&#xff0c;適用于各種類型的數據&#xff0c;例如文本、數值、地理位置、結構化或非結構化數據。它基…

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE開發環境(支持JLINK、STLINK、DAPLINK)

導言 Embedded IDE官網:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil開發STM32項目&#xff0c;也有vscode Keil開發STM32程序。SI或vscode編寫代碼&#xff0c;然后切換Keil編譯、下載、調試程序。有一段時間&#xff0c;我也是這么干的。但是&#xff0c;程…

光譜相機的工作原理

光譜相機的工作原理主要基于不同物質對不同波長光的吸收、反射和透射特性存在差異&#xff0c;以下是其具體工作過程&#xff1a; 一、光的收集 目標物體在光源照射下&#xff0c;其表面會對光產生吸收、反射和透射等相互作用。光譜相機的光學系統&#xff08;如透鏡、反射鏡…

ThinkPHP接入PayPal支付

ThinkPHP 5接入PayPal 支付&#xff0c;PayPal的流程是服務器請求Paypal的接口下單&#xff08;需要傳訂單id/支付成功的重定向地址/支付失敗的重定向地址&#xff09;&#xff0c;接會返回一個支付地址&#xff0c;項目服務器把地址返給用戶&#xff0c;用戶打開鏈接登錄Paypa…

stream流的toMap

假設有這么一個類: import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id id;…

html + css 淘寶網實戰

之前有小伙伴說&#xff0c;淘寶那么牛逼你會寫代碼&#xff0c;能幫我做一個一樣的淘寶網站嗎&#xff0c;好呀&#xff0c;看我接下來如何給你做一個淘寶首頁。hahh,開個玩笑。。。學習而已。 在進行html css編寫之前 先了解下網頁的組成和網頁元素的尺寸吧 1.網頁的組成 …

神經網絡、深度學習、卷積神經網絡

好的&#xff01;我會盡量詳細且易懂地為你解釋這些概念&#xff0c;并在最后用簡單直白的語言總結一下。 1. 神經網絡思想 神經網絡是靈感來自于生物大腦神經元的工作原理&#xff0c;是一種模仿人類大腦處理信息的方式來設計的數學模型。我們的大腦由億萬個神經元組成&…

設計模式01:創建型設計模式之單例、簡單工廠的使用情景及其基礎Demo

一、單例模式 1.情景 連接字符串管理 2.好處 代碼簡潔&#xff1a;可全局訪問連接字符串。性能優化&#xff1a;一個程序一個連接實例&#xff0c;避免反復創建對象&#xff08;連接&#xff09;和銷毀對象&#xff08;連接&#xff09;。線程安全&#xff1a;連接對象不會…

【不太正常的題】LeetCode.232:用棧的函數接口實現隊列

&#x1f381;個人主頁&#xff1a;我們的五年 &#x1f50d;系列專欄&#xff1a;初階數據結構刷題 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 &#x1f697; 1.問題描述&#xff1a; 題目中說了只能使用兩個棧實現隊列&#xff0c;并且只能使用…

Linux搭建text-generation-webui框架,安裝通義千問大模型,開放對外api,voxta測試對話圖文教程

目錄 text-generation-webui部分 開放對外API 通義千問部分 遠程API對話測試部分 text-generation-webui部分 本來不想發這個文章的&#xff0c;但是自己部署的時候看了挺多人的帖子&#xff0c;很多發的不全面&#xff0c;要么就是跟著他們流程走有些小問題啥的&#xff…

QT程序發布后,mysql在其它電腦設備無法連接數據庫

QT程序發布后&#xff0c;mysql在其它電腦設備無法連接數據庫 D:\mysql-5.7.24-winx64\lib, mysql-5.7.24-winx64是一個壓縮包&#xff0c;用于啟動mysql服務&#xff0c;創建數據庫 壓縮包 解決方法&#xff1a; 拷貝庫到exe的相同目錄&#xff0c;libmysql.dll,libmysql.li…

ElasticSearch 的核心功能

要深入理解 ElasticSearch 的核心功能&#xff0c;需要全面掌握其 全文搜索、分析、聚合 和 索引生命周期管理&#xff08;ILM&#xff09; 的設計原理和實際應用。 1. 全文搜索 ElasticSearch 的全文搜索是其核心功能之一&#xff0c;依賴于倒排索引和強大的分詞、相關性評分…

在Nginx部署Web應用,如何保障后端API的安全

1. 使用HTTPS和http2.0 參考&#xff1a;Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 設置嚴格的CORS策略 通過add_header指令設置CORS頭。 只允許來自https://frontend.yourdomain.com的請求訪問API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…

Nginx單向鏈表 ngx_list_t

目錄 基本概述 數據結構 接口描述 具體實現 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源碼 和 《深入理解 Nginx&#xff1a;模塊開發與架構解析》 基本概述 Nginx 中的 ngx_list_t 是一個單向鏈表容器&#xff0c;鏈表中的每一個節…