安卓屏幕适配

博客首页
android代码阅读器源码

现在的安卓设备层出不穷,屏幕大小、分辨率也是五花八门,这对于安卓开发者来说就是灾难。 不过现在某谷公司推出了一款安卓IDE,看网上各种喷,个人觉得挺不错的(顺便推销一下, jetbrain推出的各种IDE还是不错的,java的intellij,c/c++的clion,包括androidstudio也是基于 intellij做出来的,除了有点耗内存外,其它可以跟vs媲美,当然,纯属个人偏见,勿喷)。

其实有了androidstudio,做安卓的屏幕适配就没那么烦了,只要把各种布局文件和样式文件 分离,然后新建对应的样式文件就好了。废话不多说,有图有真相。

先上两张效果图:

这是我的项目结构:(右图是新建各种屏幕的步骤)

可以看到res目录下的values中的dimens文件,分为了4个类型,large、normal、small、xlarge, 安卓会在运行的时候自动选择合适的资源来使用,这就有一个要求,在所有的屏幕下用同一套布局,而只是 其中的具体值不同(例如:margin、padding、width、height等等),当然,你也可以新建用这种方式新建 不同的布局文件,只是这样的话工作量就会很大,因为要同时维护不同的几套布局文件,而采用相同的布局 文件的话就只需要调节各种值就行了,个人认为这种方式比较轻松。

下面贴出个sytels文件和不同的dimens文件。

<!--this is styles.-->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--app theme-->
    <style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
        <item name="android:colorPrimaryDark">@color/status_bar</item>
        <item name="android:navigationBarColor">@color/navigation_bar</item>
    </style>

    <!--main activity-->
    <style name="MainWebView">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:background">@color/main_activity_background</item>
    </style>

    <style name="MainMenuButton">
        <item name="android:layout_width">@dimen/main_menu_button_size</item>
        <item name="android:layout_height">@dimen/main_menu_button_size</item>
        <item name="android:layout_gravity">end|bottom</item>
        <item name="android:text">@string/main_menu_text</item>
    </style>

    <!--select file activity-->
    <style name="SelectFileActivity" parent="android:Theme.Material.NoActionBar">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:colorPrimaryDark">@android:color/transparent</item>
        <item name="android:navigationBarColor">@android:color/transparent</item>
    </style>

    <style name="SelectFileList">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_margin">@dimen/select_file_list_margin</item>
        <item name="android:padding">@dimen/select_file_list_padding</item>
        <item name="android:background">@drawable/select_file_list_background</item>
    </style>

    <style name="SelectFileItem">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:padding">@dimen/select_file_item_padding</item>
    </style>

    <style name="SelectFileItemImage">
        <item name="android:layout_width">@dimen/select_file_item_image_size</item>
        <item name="android:layout_height">@dimen/select_file_item_image_size</item>
    </style>

    <style name="SelectFileItemText">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:singleLine">true</item>
        <item name="android:paddingLeft">@dimen/select_file_item_text_padding_left</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:layout_gravity">center_vertical</item>
        <item name="android:textSize">@dimen/select_file_item_text_size</item>
    </style>
</resources>
    
<!-- this is dimen large -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="main_menu_button_size">80dp</dimen>

    <dimen name="select_file_list_corner">20dp</dimen>
    <dimen name="select_file_list_margin">80dp</dimen>
    <dimen name="select_file_list_padding">10dp</dimen>

    <dimen name="select_file_item_padding">5dp</dimen>
    <dimen name="select_file_item_image_size">70dp</dimen>
    <dimen name="select_file_item_text_padding_left">20dp</dimen>
    <dimen name="select_file_item_text_size">30sp</dimen>
</resources>
    
<!-- this is dimen normal -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="main_menu_button_size">60dp</dimen>

    <dimen name="select_file_list_corner">15dp</dimen>
    <dimen name="select_file_list_margin">30dp</dimen>
    <dimen name="select_file_list_padding">10dp</dimen>

    <dimen name="select_file_item_padding">5dp</dimen>
    <dimen name="select_file_item_image_size">50dp</dimen>
    <dimen name="select_file_item_text_padding_left">20dp</dimen>
    <dimen name="select_file_item_text_size">20sp</dimen>
</resources>