现在的安卓设备层出不穷,屏幕大小、分辨率也是五花八门,这对于安卓开发者来说就是灾难。 不过现在某谷公司推出了一款安卓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>