dp 布局 手机android_android布局文件 像素转dp - CSDN
  • android的xml布局当中,经常会看到dip、dp、px、sp等单位,知道它们的作用才可以更加精确的布局UI。 dip:英文device independent pixels(设备独立像素)。所有的设备都有一个统一的dip大小(480*320),就是说,...

    在android的xml布局当中,经常会看到dip、dp、px、sp等单位,知道它们的作用才可以更加精确的布局UI。

    dip:英文device independent pixels(设备独立像素)。所有的设备都有一个统一的dip大小(480*320),就是说,android的dip就是把屏幕的高分成了480个dip,宽分成了320个dip,每个dip在高中表示屏幕的1/480,在宽中表示屏幕的1/320。这样做的好处显而易见,我们可以使应用UI在不同大小的屏幕上都能正常的显示。

    dp:完全等同于dip。

    px:pixels,就是绝对像素。大小固定,不会随着屏幕不同而改变。

    sp:scaled pixels,放大像素,主要用于字体显示,也是为了字体显示可以适应不同大小尺寸的屏幕。

    展开全文
  • 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了设置px的方法...

    在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了设置px的方法,例如setPadding,并没有提供设置dp的方法。这个时候,如果需要设置dp的话,就要将dp转换成px了。

    以下是一个应用类,方便进行px和dp之间的转换。


    import android.content.Context;
    
    public class DensityUtil {
    
    	/**
    	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
    	 */
    	public static int dip2px(Context context, float dpValue) {
    		final float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (dpValue * scale + 0.5f);
    	}
    
    	/**
    	 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
    	 */
    	public static int px2dip(Context context, float pxValue) {
    		final float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (pxValue / scale + 0.5f);
    	}
    }

    ---------------------------------------------------------------------------

    GL(arui319)

    http://blog.csdn.net/arui319

    <本文可以转载,但是请保留以上作者信息。谢谢。>

    ---------------------------------------------------------------------------

     

     


     

    展开全文
  • px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guide,下同)。 偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他...

    相信每个Android新手都会遇到这个问题,希望这篇帖子能让你不再纠结。

    px:

    即像素,1px代表屏幕上一个物理的像素点;

    px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guide,下同)。

    偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位如dp会显得模糊。

    dp:

    这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

    不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果,见下图。

    更新20140701: 是不是所有android手机的屏幕宽度用dp衡量都是固定值(例如320dp)呢?答案是否定的,如果写一个程序画宽度等于320dp的横线,在不同手机上运行,会发现在有些手机上横线比手机屏幕短,有些则比屏幕长,在平板上与手机上相比差别则更加明显。

    dip:

    与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。

    sp:

    与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

    还有几个比较少用到的尺寸单位:

    mm:

    即毫米;

    in:

    即英寸,1英寸=2.54厘米(约);

    pt:

    1pt=1/72英寸=0.035厘米;

    最佳实践,文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize="16sp"、layout_width="60dp";偶尔需要使用px单位,例如需要在屏幕上画一条细的分隔线时:

    <View layout_width="match_parent" layout_height="1px"/>
    
    
    转载自:http://www.cnblogs.com/bjzhanghao/archive/2012/11/06/2757300.html
    展开全文
  • Android dp方式的屏幕适配-原理 传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp、sp值后导致的其他问题。 我之前写过一些相关的文章和工具插件,也收到了很多网友的反馈。 ...

    Android dp方式的屏幕适配-原理

    传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp、sp值后导致的其他问题。
    我之前写过一些相关的文章和工具插件,也收到了很多网友的反馈。
    今天特编写此篇博客,重新整理以前的思路,同时也融入我近期更深刻的理解和总结,完整解答各位网友的疑惑。

    友情链接,感谢鸿神提供的思路。
    张鸿洋的《Android 屏幕适配方案》:

    https://blog.csdn.net/lmj623565791/article/details/45460089

    和其他大神的相关博客,自行搜索

    我的前几篇文章:
    Android屏幕适配dp、px两套解决办法

    https://blog.csdn.net/fesdgasdgasdg/article/details/52325590

    Android dp方式的屏幕适配工具使用(bat批处理方式)

    https://blog.csdn.net/fesdgasdgasdg/article/details/78107653

    Android dp方式的屏幕适配工具使用(Android Studio插件方式)

    https://blog.csdn.net/fesdgasdgasdg/article/details/78108169

    Android dp方式的屏幕适配工具使用(一些疑惑和注意事项)

    https://blog.csdn.net/fesdgasdgasdg/article/details/78133821

     

    GitHub源码地址:https://github.com/mengzhinan/PhoneScreenMatch

    GitHub插件源码地址:https://github.com/mengzhinan/ScreenMatch

    IDEA插件包地址:https://plugins.jetbrains.com/plugin/10058-screenmatch

     

     

    我们按照下面问题的纲要和对应解答,来一步步思考和理解我的解决思路。

    1、背景1:google建议我们在编码时使用计量单位为dp、sp、match_parent或wrap_content。

    *单位dp和sp。
    上述google给我们的建议,都知道。
    顺便露一句:1dp=(1/160*)(inch)=(2.54/160)(cm)。在任何设备上都是定长,除非设备参数被厂商修改。

    [dp等于物理定长]
    官网链接:

    https://developer.android.google.cn/guide/practices/screens_support

     

     

     

    2、对于《多屏幕适配》,究竟是出了什么疑难问题?(需要产品介入抉择)


    *在不同的宽度dp的手机上需要实现等比缩放。

    如上图。我们按照google的建议,编码UI时,使用dp的方式硬编码,那么在不同宽度dp的手机上的视觉效果会有误差,感觉布局向某一侧挤压了。
    当然,需要说明的是,控件的物理长度是不变的,因为我上面提到dp等于现实世界的物理长度。

    而不同手机的宽度dp值可能是不一样的,这就是问题所在。

     

     

    如果产品需要上图2中的效果,实现不同宽度dp的手机展现的UI整体布局一致,怎么办?
    这就是多屏幕适配UI的问题。
    当然,产品乐意图1的效果,有点整体偏差无所谓,那就不需要看下文了,over。

    此时,我们明确一个需求,UI在不同的宽度dp的手机上需要实现等比缩放,达到UI整体效果一致。

     

    3、背景2:google提供了资源目录的限定符规则。


    *基于google的sw<N>dp限定符规则,提供多套dimens.xml文件。
    即google允许在项目 res/ 目录内支持的资源目录创建带有限定符规则的同名目录。

    如:drawable-hdpi,layout-land,strings-en.xml等。
    官网链接:

    https://developer.android.google.cn/guide/topics/resources/providing-resources

    本文需要提到的是sw<N>dp限定符。请详细阅读官网文档的此章节。

    在我的案例中,此限定符作用在values目录上,如:

    values-sw384dp
    values-sw410dp
    values-sw480dp

    手机系统在运行期间,根据手机实际的宽度dp值,去寻找指定宽度dp的values目录,然后使用里面的一套资源作用在UI上。比喻手机运行时的实际宽度dp值是410,那么系统会使用values-sw410dp下面的资源作用在app上。

    但需要注意一点。如果你的手机宽度dp值为410.69。或许你可以生成values-sw410.59dp这个目录来做适配,我没试过。个人建议你写成values-sw410dp,而不是values-sw410.59dp或values-sw411dp。因为系统会向下寻找等于或小于410.59的值的values目录,直到默认的values目录为止。

    手机宽度dp值计算方法之一:

    DisplayMetrics dm = getResources().getDisplayMetrics();
    //手机宽度dp值 = 手机实际宽度像素px / 手机屏幕密度比
    float widthDP = dm.widthPixels / dm.density;

    sw的意思是smallestWidth,即手机的最小宽度dp值。
    其实更确切的说,是指手机宽度和高度的dp值中最小者。
    对于常规手机而言,肯定是宽度dp值较小。如果手机切换成横屏了,那么就是高度dp值较小。
    但无论是横屏还是竖屏状态,最小者的dp值是不变的。即无论横竖屏状态,此手机都只会寻找对应宽度dp的values目录下的相关文件(dimens.xml)来处理UI尺寸问题,而避免了横竖屏切换时UI变形问题。

    比喻你的手机宽度是360dp,高度是640dp。那么无论是横屏还是竖屏时,程序运行时都会寻找values-sw360dp的目录(如果有)来作用在UI上。而不会是竖屏使用values-sw360dp,横屏时使用values-sw640dp了,自己实验。
    如果你不希望这个结果,那么你可以选择values-w<N>dp的目录方式,具体参考上面官网文档说明,自己实验。


    此时,我们理解了google官方的原理。剩下的,我们需要定义dimen变量,并生成对应手机宽度dp的dimens.xml文件来作用在UI上,实现UI等比缩放效果。

     

    4、手机宽度360dp和dp_360的由来,基础dimen变量键值对定义。


    *屏幕宽度等分为360份,认为dp_360变量表示沾满屏幕,等价于match_parent。

    在众多的主流尺寸手机中,如1920x1080、1280x720等,测试发现,他们的手机宽度dp值是360dp,覆盖范围达到90%,但是不包括现在流行的全面屏、刘海屏(没测试)。设计师提供的标注图一般也是720px或者1080px的,我们拿来转换为对应的dp值时也是默认基于360的基准值,如果让设计师帮忙转换也是一样的结果。
    即无论是对传统尺寸手机宽度的计算,或者是开发期间开发和设计的共同认知,都认为是360dp为手机屏幕宽度值。
    为了迎合这个标准,便于计算,所以我也就以360作为适配方案的基准值,即360的由来。

    根据上面的潜认识,我把屏幕宽度的dp值定为dp_360这个变量(注意是变量,不是360dp这个固定值),
    即把任意手机的屏幕等分为360份,
    然后在默认的values/dimens.xml文件中定义了一套变量,变量名和变量值是1:1关系的。
    如:

    好处是:
    a、就算只使用values/dimens.xml文件,也可适配90%的传统手机。
    b、变量的定义直观易懂,屏幕等分为360份,每一份为dp_1,沾满屏幕宽度为dp_360。
    c、便于转换设计图px为dp值。
    d、避免硬编码,便于统一管理。就算不使用我的适配方案。


    5、结合values/dimens.xml文件的dp_xxx变量键值对和sw<N>dp规则,生成其他dimens.xml文件。


    *等比缩放dimens.xml的键值对的值。

    例如:我有一个宽度为360dp和720dp的手机,如何基于已适配的360dp,再来生成720dp的dimens.xmla文件呢?
    手机宽度dp值从360变化到了720,增加了2倍,那么把手机宽度为360dp的dimens.xml文件中的每一个dimen值乘以2,变量名(键值)不变,是不是就实现了原理?

    比喻一个按钮宽度layout_width="@dimen/dp_180",在360dp宽度的手机上实际值是180dp,刚好是手机宽度的一半;在720dp宽度的手机上实际值是360dp,还是手机宽度的一半。
    等比缩放效果[所得即所见]。

    总算知道原理了,好用。但是总不能我手写dimen文件、手动乘法计算值吧?
    当然,我有工具啊。请关注文章开头的连接~~~~~~~
    1、bat执行jar包的批处理方式。
    2、Android Studio插件方式。

     

    6、针对某未知宽度dp值的手机,如何适配或取消适配?


    *根据手机的宽度dp值,生成对应的values目录和dimens.xml文件。

    如果确定要适配某手机,必须得知道该手机的实际运行时宽度dp值。
    然后Android开发这边得到这个dp值,工具生成对应的values和dimens.xml文件即可。
    无需修改页面或者java类的代码,但是需要重新发版了。

    若如想对640dp宽度的手机UI取消适配,怎么办?
    仅仅只需要删除 values-sw640dp目录和子文件即可。
    无需修改代码,但是需要重新发版了。

    当然了,未覆盖到的范围肯定是没有处理UI等比缩放适配的了。这点是硬伤。

     


    7、如何根据设计提供的px标注图,转换为dimens.xml中的dimen变量?


    *除以基准值360,压缩到手机可视范围内。

    常规的,设计会给宽度为1080或720px的图。
    我们假定以宽度755px的图为例。
    已知,设计给的图尺寸宽高为755px-1265px,其中一个按钮的像素px值宽高为100px-50px,
    怎么在基于360等份的手机上编写按钮的dp值呢?

    高度先不说。
    基于宽度,设计图755px,要压缩到dp_360的范围内。压缩比例=755/360=2.1(约)。
    即设计图内的所有内容,都要压缩2.1倍,才能用上基于dp_360范围的变量。

    搜嘎

    按钮宽度压缩2.1倍,等于100/2.1=dp_48(约)(变量,不是具体的dp值)
    类推,按钮高度,等于50/2.1=dp_24
    上面计算的约等于,取整或四舍五入都可以,接近即可。

    之所以建议设计给出的设计图为360的倍数,如720或1080,那是因为除以360基准值,得到的压缩比例为整数。那么后续我们在设置控件的宽高时就不用四舍五入得到近似值了。

     


    8、基于宽度适配,忽略高度。


    *基于宽度360等份的适配,高度自行使用ScrollView。

    上面说到,基于设计图的宽度,压缩到360等份范围的手机屏幕内。
    但是注意,设计图上的内容都保留了宽高比不变,即内容不会变形。

    那么又有另外一个问题,由于保证了内容宽高比不变,是不是会有些手机的屏幕无法容纳整张设计图内容?
    对。!!!!!你自己使用ScrollView滚动吧。我要是限制高度,那么在有些异形手机上必然会出现控件的高度挤压或拉伸。并且上例中,控件的高度计算就不能使用宽度的压缩比例了。这样就更复杂,或者适配出的效果会更恶心了。

     

    总结:

    *把屏幕宽度等分成360份,实现UI在不同大小的手机上等比缩放。

    我使用的values目录限定符规则是sw<N>dp,上述提到的手机宽度dp值都指最小宽度,即手机宽度、高度dp值中的较小者,与当前横、竖屏状态无关。

    如果你使用的限定符规则为w<N>dp,则宽度仅仅指代当前横、竖屏状态中的"宽度"dp值。横、竖屏切换时"宽度"dp值会变化,系统会使用对应变化的values目录下的资源。

    手机、平板、电视开发都可以使用这套适配方案,但是使用的UI设计图只能是针对各自类型的。例如,做电视开发时,只能使用针对电视而给出的UI设计图,而不能使用手机的UI设计图。

    针对宽度dp值做屏幕适配时,建议不要其他领域的宽度dp值,即针对平板而开发的app,可以适配平板可能出现的其他宽度dp值,但是就不要添加手机或电视可能出现的宽度dp值了。针对平板的app运行在电视或手机上,UI本身就不搭调,适配了宽度dp值又有何用?

    有点:工具生成,无需修改代码。添加或移除方便。

    缺点:是否是产品需要的效果?无法覆盖全部机型。

     

     

    感谢QQ网友Alpha的优秀建议


    参考文档:

    https://developer.android.google.cn/guide/topics/resources/providing-resources

    https://developer.android.google.cn/guide/practices/screens_support

     

     

     

    展开全文
  • xml文件中dp,dip,px,??? 什么时候用dp,什么时候用px?
  • 线性布局:线性布局是我们在开发中最常见的布局方式之一,线性布局可以分为水平线性布局和垂直线性布局这两种布局方式 线性布局的属性(决定布局中元素的位置和布局): android:layout_gravity ( 是本元素相对于...

    一、线性布局(LinearLayout)

    线性布局:线性布局是我们在开发中最常见的布局方式之一,线性布局可以分为水平线性布局和垂直线性布局这两种布局方式

    线性布局的属性(决定布局中元素的位置和布局):

    android:layout_gravity ( 是本元素相对于父元素的对齐方式 )

    android:gravity="bottom|right"(是本元素所有子元素的对齐方式,设置在父元素上,多个值用|隔开)

    android:layout_gravity (子元素在父元素的对齐方式,设置在子元素上)

    当 android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left(左),right(右),center_horizontal(水平居中) 是生效的。
    当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top(上),bottom(下),center_vertical (垂直居中)是生效的。

    android:padding="10dp" (是本元素所有子元素的与父元素边缘的距离,设置在父元素上) 

    android:layout_marginLeft="10dp"(子元素与父元素边缘的距离,设置在子元素上)

    android:orientation (线性布局以列或行来显示内部子元素)

    android:layout_weight ="1"  分配分配权重值

    这就是线性布局做出来的效果啦,下边来说一下权重这个东西。

    权重:

    android:layout_weight="1"通过设置控件的layout_weight属性以控制各个控件在布局中的相对大小,线性布局会根据该控件layout_weight值与其所处布局中所有控件layout_weight值之和的比值为该控件分配占用的区域。

    在水平布局的LinearLayout中有4个TxtView,这4个TextView的layout_weight属性值都为1,那么这4个TextView的大小将拉伸到总大小的四分之一。如果layout_weight指为0,控件会按原大小显示,不会被拉伸;对于其余layout_weight属性值大于0的控件,系统将会减去layout_weight属性值为0的控件的宽度或者高度,再用剩余的宽度或高度按相应的比例来分配每一个控件显示的宽度或高度。

    权重最基本的用法就是  对线性布局指定方向(水平或垂直)上剩余空间分配的一个规则,先把规定的大小占完,再来按比例分配剩余空间

    特殊情况:

    首先计算数值,所有控件加起来后可能超过屏幕大小了,这个时候剩余值就应该是负的,此时按权重分配,权重大的分得值比较大,但是负的,这个时候加上原来的值,反而变小

     权重有一个很有用的特点,在一些特殊应用场景,比如有两个控件,一个设置了权重,一个不设置权重,那么这个设置权重的控件会后加载渲染。

     

    以上就是线性布局的介绍和属性啦,接下来说一下相对布局。

    二、相对布局(RelativeLayout

     

    相对布局:相对布局也是常用的布局之一,它可以设置某一个控件相对于其他控件的位置,这些位置可以包括上下左右等,因此相较于其他的布局方式而言具有很大的灵活性。

     

    相对布局常用的属性:

    第一类:属性值为true或false
      android:layout_centerHrizontal 水平居中
      android:layout_centerVertical 垂直居中
      android:layout_centerInparent 相对于父元素完全居中
      android:layout_alignParentBottom 贴紧父元素的下边缘
      android:layout_alignParentLeft 贴紧父元素的左边缘
      android:layout_alignParentRight 贴紧父元素的右边缘
      android:layout_alignParentTop 贴紧父元素的上边缘
      android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
      第二类:属性值必须为id的引用名“@id/id-name”
      android:layout_below 在某元素的下方
      android:layout_above 在某元素的的上方
      android:layout_toLeftOf 在某元素的左边
      android:layout_toRightOf 在某元素的右边
      android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
      android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
      android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
      android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
      第三类:属性值为具体的像素值,如30dip,40px
      android:layout_marginBottom 离某元素底边缘的距离
      android:layout_marginLeft 离某元素左边缘的距离
      android:layout_marginRight 离某元素右边缘的距离
      android:layout_marginTop 离某元素上边缘的距离

    android:gravity  
    android:gravity属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右 

    android:layout_gravity 
    android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity="right"则button靠右 

    android:layout_alignParentRight 
    使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。 

    android:scaleType: 
    android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别: 

    CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 

    CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) 

    CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 

    FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示 

    FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 

    FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 

    FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示 

    MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。 

     注意:图片文件夹里面的图片命名是不能大写的。

    说完这两个布局,咱们再来看看这两个布局的区别。

    线性布局(LinearLayout):在该标签下的所有子元素会根据orientation属性的值来决定是按行或者是按列来逐个显示。代码示例如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical"   
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" >  
        
        <Button  
            android:id="@+id/button1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="@string/app_name" />  
       
        <Button  
            android:id="@+id/button2"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="@string/hello_world" />  
       
        <Button  
            android:id="@+id/button3"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="@string/test" />  
       
    </LinearLayout>

    而相对布局,则是根据控件的相对位置而言,比如居于按钮的左侧或者右侧,示例如下:

     <RelativeLayout   
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent">  
            <Button  
                android:id="@+id/button2"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:layout_toRightOf="@id/button1"  
                android:layout_alignTop="@id/button1"  
                android:text="@string/hello_world" />  
       
            <Button  
                android:id="@+id/button1"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:layout_alignParentLeft="true"  
                android:layout_alignParentTop="true"  
                android:text="@string/app_name" />  
       
        </RelativeLayout>

    所以说,线性布局比较适合所有控件都是整齐排列的页面,相对布局比较随意一点,可以按照自己的想法来放置控件的位置。但是相对布局的写起来比较麻烦一点,需要自己考虑好所有控件的的布局。

     

    展开全文
  • 为了使UI界面在不同大小的移动端显示器上能够正常显示,大家可能都知道使用sp作为字体大小的单位,dp作为其他元素长度的单位。 前几天看了一篇文章关于 App设计规范的,文章用心写的非常好,这里是链接...
  • 300dp 这是dimen文件中300dp高度的设置 代码中引入形式为:getResources().getDimensionPixelOffset(R.dimen.popupwindow_width_dingyue)
  • Android系统中已经提供了非常多好用的控件,这让我们在编写布局的时候可以很轻松。但是有些时候我们可能需要反复利用某个已经写好的布局,如果你总是使用复制粘贴的方式来进行布局重用,这显然是一种很笨的做法。而A
  • 众所周知,Android厂商非常多,各种尺寸的android手机、平板层出不穷。导致了Android生态环境的碎片化现象越来越严重。Google公司为了解决分辨率过多的问题,在Android的开发文档中定义了px、dp、sp,方便开发者适配...
  • 1. 获取你要进行改变的控件的布局 LinearLayout.LayoutParams linearParams =(LinearLayout....2.设置布局的高度 后面的参数就是对应xml中的 42dp 可以根据需要进行改变 linearParams.height=((int)TypedValue
  • 那么我们平时看到的Android手机中那些漂亮的界面是怎么显示出来的呢?这就要用到Android的布局管理器了,网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于
  • 前言 约束概述 转换布局 开始 创建布局 添加约束 基线约束 Chains Properties 设置宽高比例 Guidelines ... 本篇 ConstraintLayout 讲解...ConstraintLayout 是一个 ViewGroup,它的出现是为了解决复杂布局时,布局嵌套
  • 使用RelativeLayout即可实现重叠布局——RelativeLayout标签内容里面的下层布局会浮现在上层布局之上;上层布局会被下层布局覆盖 实现layout: <RelativeLayout android:layout_width="match_parent" ...
  • 如标题所说,尽量使用android:layout_marginLeft="10dp",虽然android:paddingLeft="10dp"是内间距,其实也可以使用控件间距实现一样效果,而且目前 RelativeLayout 使用内间距android:paddingLeft="10dp",魅族一...
  • 1. 使用px替代dp进行开发存在的一些问题虽然网上有使用px替代dp进行开发的技巧,比如鸿洋大神的这篇文章,但存在以下问题: 需要建很多分辨率目录: 虽然是用脚本工具自动生成的,但是看着长长的一串还是很吓人: ...
  • Android 中使用代码动态布局 本文介绍在android中使用代码动态布局,有时候根据不同的需求,比如需要根据服务器上的条目个数来决定app中页面布局控件(显示个数,图标等)。此处介绍通过java代码进行动态布局。 ...
  • Android项目:手机安全卫士(3)—— 主界面布局1 总纲前面实现了“手机安全卫士”的闪屏界面与版本检测升级问题,接下来的任务就是实现主界面了,这个相对简单,因为没有涉及到具体的功能开发,本文主要内容:九宫...
  • 基本理论: Android六大基本布局分别是: 线性布局LinearLayout 表格布局TableLayout 相对布局RelativeLayout 层布局FrameLayout ...在手机程序设计中,绝对布局基本上不用,用得相对较多的是线...
  • XML对开发者来说十分的...笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件。 首先说一下动态设置布局在项目中的应用,拿高德地图举个例子,如下图:
1 2 3 4 5 ... 20
收藏数 116,492
精华内容 46,596
关键字:

dp 布局 手机android