美高梅网址注册-澳门mgm4858集团登录网址
做最好的网站
来自 澳门mgm4858集团登录网址 2019-09-30 15:41 的文章
当前位置: 美高梅网址注册 > 澳门mgm4858集团登录网址 > 正文

在layout文件下创建很容易美高梅网址注册:,单

美高梅网址注册 1

    我们需要借助“限定符(Qualifiers)”来在运行时判断程序是应该使用双页模式还是单页模式。修改FragmentDemo项目中的activity_main.xml文件:

屏幕方向限定符

  • res/layout-land
  • res/layout-port
  • res/layout-sw600dp-land
  • res/layout-sw600dp-port
  • Nexus 4 (4.7英寸 768x1280:xhdpi)

美高梅网址注册 2dimen_example1.png

  • Nexus S (4英寸 480x800:hdpi)

美高梅网址注册 3dimen_example2.png

即使使用dp,依然不能解决屏幕分辨率的适配问题,我们可以针对不同的屏幕创建不同的dimen值。

  • res/values/dimens.xml

     <resources> <dimen name="button_length_1">180dp</dimen> <dimen name="button_length_2">160dp</dimen> </resources>
    
  • res/values-480x800/dimens.xml

     <resources> <dimen name="button_length_1">113dp</dimen> <dimen name="button_length_2">100dp</dimen> </resources>
    
  • 官方文档

  • Github Sample

     <?xml version="1.0" encoding="utf-8"?> <android.support.percent.PercentRelativeLayout xmlns:andro xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="30%" app:layout_widthPercent="30%"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="20%" app:layout_widthPercent="20%"/> </android.support.percent.PercentRelativeLayout>
    

美高梅网址注册 4newsreader_land.png美高梅网址注册 5newsreader_port.png

当NewsReader在横屏时是双面板,左侧是HeadLinesFragment, 右侧是ArticleFragment, 点击新闻标题, 切换ArticleFragment的内容。当NewsReader在竖屏时是单面板,只有个HeadLinesFragment, 点击新闻标题,跳转到ArticleActivity去显示新闻内容。所以,要实现这样的横竖屏适配,只是通过布局是完成不了的,不同业务逻辑的处理,还需要写代码来完成,这就是我们的自适应用户界面。

  • res/values/layouts.xml

     <resources> <item name="main_layout" type="layout">@layout/onepane_with_bar</item> <bool name="has_two_panes">false</bool> </resources>
    
  • res/values-sw600dp-land/layouts.xml

     <resources> <item name="main_layout" type="layout">@layout/twopanes</item> <bool name="has_two_panes">true</bool> </resources>
    
  • res/values-sw600dp-port/layouts.xml

     <resources> <item name="main_layout" type="layout">@layout/onepane</item> <bool name="has_two_panes">false</bool> </resources>
    
View articleView = findViewById(R.id.article);mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE;//如果能够找到ArticleFragment则是双面板

public void onHeadlineSelected(int index) { mArtIndex = index; if (mIsDualPane) { // display it on the article fragment mArticleFragment.displayArticle(mCurrentCat.getArticle; } else { // use separate activity Intent i = new Intent(this, ArticleActivity.class); i.putExtra("catIndex", mCatIndex); i.putExtra("artIndex", index); startActivity; }}

本文部分文字和图片直接摘录自以下内容:

  • Android官网
  • Android开发:最全面、最易懂的Android屏幕适配解决方案

美高梅网址注册 6

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment 
        android:id="@+id/left_fragment"
        android:name="ga.orlion.fragmentdemo.LeftFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    
</LinearLayout>

为了保证用户获得一致的用户体验效果,使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果,则需要我们进行屏幕适配。

之前在写屏幕适配的时候,考虑到平板和手机的尺寸不一样,所以想新建一个layout_large文件,想起了以前创建layout文件的做法,具体参见:Android Studio 在layout文件夹建立子文件夹但是发现还是有问题。对应的activity还是只是指向第一个layout文件中的activity_main.xml文件。找了下解决的方法,这里记录下: 我需要的是在layout和layout_large文件下都创建activity_main2.xml这个文件,在layout文件下创建很容易,直接创建就好了,这里记录下创建layout_large这个文件。1.右键res->new->Android resource file

    Android中一些常见的限定符:

布局别名

  • 适配手机的单面板布局:res/layout/activity_main.xml
  • 适配尺寸>7寸平板的双面板布局(Android 3.2前):res/layout-large/activity_main.xml
  • 适配尺寸>7寸平板的双面板布局(Android 3.2后):res/layout-sw600dp/activity_main.xml

最后的两个文件的xml内容是完全相同的,这会带来:文件名的重复从而带来一些列后期维护的问题,修改一个文件,可能忘记修改另外一个。于是为了要解决这种重复问题,我们引入了布局别名

  • 适配手机的单面板布局:res/layout/activity_main.xml

  • 适配尺寸>7寸平板的双面板布局:res/layout/activity_twopanes.xml

  • res/values/layout.xml

     <?xml version="1.0" encoding="utf-8"?> <resources> <item name="main" type="layout">@layout/activity_main</item> </resources>
    
  • res/values-large/layout.xml

     <?xml version="1.0" encoding="utf-8"?> <resources> <item name="main" type="layout">@layout/activity_twopanes</item> </resources>
    
  • res/values-sw600dp/layout.xml

     <?xml version="1.0" encoding="utf-8"?> <resources> <item name="main" type="layout">@layout/activity_twopanes</item> </resources>
    
  • setContentView(R.layout.main);

3.单击Size,然后点击 >>这个箭头,进入下面这个界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment 
        android:id="@+id/left_fragment"
        android:name="ga.orlion.fragmentdemo.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    
    <fragment 
        android:id="@+id/right_fragment"
        android:name="ga.orlion.fragmentdemo.RightFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"/>
</LinearLayout>
  • OpenSignal
  • 友盟统计

美高梅网址注册 7

    可以看到,layout/activity_main布局只包含一个碎片,即单页模式,而layout-large/activity_main布局包含了两个碎片,即双页模式。其中large就是一个限定符,那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,而屏幕小的还是会加载layout文件夹下的布局。运行。

最小宽度限定符

  • 在手机较小的屏幕上,加载layout文件夹布局
  • 标准7英寸平板(其最小宽度为 600 dp),加载layout-sw600dp文件夹的布局
  • 在Android3.2版本及之后版本

美高梅网址注册 8image.png

        3. 停止状态

  • ldpi~120dpi
  • mdpi~160dpi
  • hdpi~240dpi
  • xhdpi~320dpi
  • xxhdpi~480dpi
  • xxxhdpi~640dpi

2.进入New Resource File,按照如下图所示进行设置

        当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。或者通过调用 FragmentTransaction的                 remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用 addToBackStack()方法,这时的碎片也会进         入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。

尺寸限定符

  • 在手机较小的屏幕上,加载layout文件夹布局
  • 在平板电脑和电视的屏幕上, 加载layout-large文件夹的布局
  • Android3.2版本之前

4.最后在res目录下创建好了包和xml文件

        2. onCreateView()

Density Independent Pixels,即密度无关像素。

        5. onDetach()

  • 品牌机型碎片化
  • 屏幕尺寸碎片化
  • 操作系统碎片化

        4. 销毁状态

Android SDK加载图片流程

  1. Android SDK会根据屏幕密度自动选择对应的资源文件进行渲染加载,比如说,SDK检测到你手机的分辨率是xhdpi,会优先到xhdpi文件夹下找对应的图片资源;
  2. 如果xhdpi文件夹下没有图片资源,那么就会去分辨率高的文件夹下查找,比如xxhdpi,直到找到同名图片资源,将它按比例缩小成xhpi图片;
  3. 如果往上查找图片还是没有找到,那么就会往低分辨率的文件夹查找,比如hdpi,直到找到同名图片资源,将它按比例放大成xhpi图片。

根据加载图片的流程,可以得出理论上提供一套图片就可以了。

    虽然动态添加碎片的功能很强大,可以解决很多实际开发中的问题,但是它毕竟只是在一个布局文件中进行一些添加和替换操作。 如果程序能够根据设备的分辨率或屏幕大小在运行时来决定加载哪个布局,那我们可发挥的空间就更多了。因此本节我们就来探讨一下Android中动态加载布局的技巧。

  • 160dpi, 1dp = 1px
  • 240dpi, 1dp = 1.5px
  • 320dpi, 1dp = 2px
  • 480dpi, 1dp = 3px
  • 640dpi, 1dp = 4px

 

ScreenAdaptDemo

        为碎片创建视图(加载布局)时调用。

手机在横向和纵向上的像素点数总和,单位是像素,1px = 1像素点,举个栗子,1080x1920,即宽度方向上有1080个像素点,在高度方向上有1920个像素点。

        碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用                  FragmentTransaction的 remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用                       addToBackStack()     方法,这时的碎片也会进入到销毁状态。

使用px在低、中、高屏幕密度下的效果##

美高梅网址注册 9density-test-bad.png

    很多平板应用采用都是双页模式(程序在左侧的面板上显示一个包含子项的列表,在右侧的面板上显示内容),因为平板电脑放的屏幕足够大,完全可以同时显示下两页的内容,但手机屏幕一次就只能显示一页的内容,因此两个页面需要分开显示

weight的使用

美高梅网址注册 10weight_examples.png

  • 当layout_width为0dp,layout_weight分别是1和2

     <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="weight = 1"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="weight = 2"/> </LinearLayout>
    
  • 当layout_width为match_parent,layout_weight分别为1和2

     <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="weight = 1"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="2" android:text="weight = 2"/> </LinearLayout>
    

本文由美高梅网址注册发布于澳门mgm4858集团登录网址,转载请注明出处:在layout文件下创建很容易美高梅网址注册:,单

关键词: