2017-04-19 10:54:34 qqqGL 阅读数 1735

android适配是繁琐的事,分辨率多样,考虑因素多,并且ui设计图还是px单位的,这时候你就需要AutoView了,AutoView可以帮你做什么呢?写多个dimens文件? 还是需要写很多的代码?no,这些都不用了,开发还是和之前的一样,而且还可以轻松的和ui设计图对应上

AutoView使用大法

传送门AutoView:https://github.com/Flyjun-Android/AutoView

1、你的build.gradle需要

compile project(':AutoViewCore')

2、在你的BaseActivity上调用

AutoView.init(this);

 or

 AutoView.init(this,1080.0f);

第二个参数为你ui设计图设计的基准尺寸(比如1080 * 1920就是1080,720 * 1280就是720,默认是1080的) 需要在setContentView之前执行

3、在你的布局layout文件中这么使用

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

android:orientation="vertical"
android:id="@+id/layout"
>


<TextView
    android:layout_width="200px"
    android:layout_height="200px"
    android:textSize="50px"
    android:textColor="@android:color/black"
    android:background="@android:color/darker_gray"
    android:text="hello"/>


<com.flyjun.view.AutoRelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="520px"
        android:layout_height="520px"
        android:textSize="80px"
        android:textColor="@android:color/holo_red_light"
        android:background="@android:color/holo_green_light"
        android:text="AutoView"/>

</com.flyjun.view.AutoRelativeLayout>


<include layout="@layout/inlayout"/>

</com.flyjun.view.AutoLinearLayout>

你只需要做的的是

   LinearLayout->AutoLinearLayout 

   RelativeLayout->AutoRelativeLayout

   FrameLayout->AutoFrameLayout

注意,如果你的跟布局也需要适配,需要加上

xmlns:auto="http://schemas.android.com/apk/res-auto"
auto:autoParents="true"

4、AutoView支持的属性几乎涵盖了所有

android.R.attr.textSize

        android.R.attr.padding
        android.R.attr.paddingLeft
        android.R.attr.paddingTop
        android.R.attr.paddingRight
        android.R.attr.paddingBottom

        android.R.attr.layout_width
        android.R.attr.layout_height

        android.R.attr.layout_margin
        android.R.attr.layout_marginLeft
        android.R.attr.layout_marginTop
        android.R.attr.layout_marginRight
        android.R.attr.layout_marginBottom

        android.R.attr.drawablePadding

5、使用代码也可以轻松的适配view,builder模式调用 例如:

AutoView.autoBuilder(view).setWidth(320).setHeight(120).setMarginTop(50).builder();

6、你还可以获取一个已经适配好的值

AutoView.getAutoSize(this,120)

7、如果需要适配横竖屏,那么需要values-land的dimens和values的dimens一起来操作即可 比如都有一个宽度width,都引用这个值即可

8、look look 效果图

720*1280效果图
这里写图片描述

1080*1920效果图
这里写图片描述

1536*2048 nexus9平板效果图
这里写图片描述

2015-07-28 13:07:56 yueritian 阅读数 322
  • ldpi:120(240*320)
  • mdpi:160(320*480)
  • hdpi:240(480*800)
  • xhdpi:320(720*1280)
  • xxhdpi:480(1080*1800)
  • dpi值的计算:
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int height = 1024;
		int weight = 600;
		int temp = (int)(Math.pow(height,2) + Math.pow(weight,2));
		System.out.println(Math.sqrt(temp) / 4);;
	}

2016-05-11 11:22:31 qq_21445563 阅读数 1428

在android适配器中都有一个方法--isEnabled(int position),只要我们重写这个方法就可以了,例如:

<span style="font-size:18px;">@Override
	public boolean isEnabled(int position) {
		// TODO Auto-generated method stub

		return list.get(position).wahoceStatus==0;
	}</span>
item可用,能点击,则返回true---

<span style="font-size:18px;">return true;</span>
item不可用,不能点击,则返回false--

<span style="font-size:18px;">return false;</span>



2015-02-01 01:21:11 yzx0xyz 阅读数 1182

当我的新App面临着iPhone4、5、6、6P 四个系列机型适配时,感觉终于和Android一样了,多屏幕适配的问题终于来了。

想起Android众多的机型适配就有些嘘嘘,幸好,iOS有它的独特武器--Auto Layout与Size Classes。

Auto Layout是解决这个问题的第一步,而Size Classes则更进了一步。

 

关于Auto Layout

Auto Layout从iOS6开始引入,基本已经广泛使用了,官方定义是Auto Layout Is a Constraint-Based, Descriptive Layout System. Auto Layout是一种基于约束的,描述性的布局系统,它通过内定的Constraint(约束)和各项条件来计算出合理的布局。

 

关于Size Classes

Size Classes是对老式UI思路的全新抽象:把各个设备屏幕(iPhone4,5,6,6P,ipad)以及它们的屏幕旋转状态都抽象成屏幕Size的变化,将这些Size归纳成几个类别(Class),3x3共9种Size,每种Size都可以设置特定的一套布局,如果不特殊指定,默认是在(宽任意,高任意)模式下设置,其他8种布局继承它。

相对来说,iOS对UI这块的改动是跨时代性的,Auto layout的出现使得布局的复杂度减少到了View与View的关系上,由根View(也就是屏幕)指定frame,所有子View作相对布局,把frame的概念归一化到根View的frame上;但有了SizeClass后,根视图的frame概念也被移除了,这下整个App的UI和frame已然脱离关系。

忽然想起,这和Android中的match_parent、layout_margin惊人的相似,相互借鉴乎?殊途同归乎?


相比iOS过往,Size Classes的出现是UI布局的一大进步,但相比Android来讲,则还显得不够深入和彻底(分为9种Size)。Android放得更开,只给(宽任意,高任意)一种模式,但是它有fill_parent、wrap_content、layout_margin等非常直观、高效、好用的语句来配合,使用起来非常方便,界面适配也更广。


有一点需要吐槽的是,Auto Layout在storyboard和nib文件里使用还好,纯代码手写就比较冗长和繁杂了,不过也有解决方案,比如使用Masonry

 

关于Auto Layout与Size Classes的具体使用,推荐一些参考资料供参阅

1、为iPhone6设计自适应布局

http://www.cocoachina.com/ios/20141020/9978.html

2、Auto Layout的基本介绍

http://www.cnblogs.com/thefeelingofsimple/p/3316300.html

3、喵神的大作 – Auto Layout入门

http://onevcat.com/2012/09/autoayout/

4、iOS 8 Size Classes 初探

http://blog.sunnyxx.com/2014/09/09/ios8-size-classes/

5、在 Interface Builder中使用Size Classes

http://article.yeeyan.org/view/126760/424005

6、Masonry介绍与使用实践(快速上手Autolayout)

http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/



2015-08-18 19:16:13 u013598660 阅读数 1498

市场上的android手机五花八门,各种尺寸的屏幕让android程序猿们比较头疼。也有一些大神写了一些博客提出了自己的观点。iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己的方法-auto Layout 。本人初学iOS,今天学了自动布局。在学习的过程中,毕竟还是有些知识点没有接触到的,因此写这篇博客来深入的了解一下Auto Layout。

官方解释:
Auto Layout 是一个系统,可以让你通过创建元素之间关系的数学描述来布局应用程序的用户界面。——《Auto Layout Guide
Auto Layout 是一种基于约束的,描述性的布局系统。——《Taking Control of Auto Layout in Xcode 5 - WWDC 2013
我们给布局添上约束 (Constraints)来给控件定位和控制大小。而不是像android和html5一样通过size等属性来控制布局。iOS控件貌似没有size概念,而是完全通过constraints来控制大小。

这里写图片描述
打开storyboard,我在顶部和底部拖了两个控件。看图一目了然,右边iPhone4底部控件看不到了,iPhone6+控件已经偏出。

接下来来看如何解决,先看张图:
这里写图片描述
1、选中view controller
这里写图片描述
2、按住ctrl键,往上拉,选中 Top Space to Top Layout Guide
这里写图片描述
这里写图片描述
此时我们看到的线已变成orange颜色,说明添加的约束不够。继续往左和右边拉。
3、颜色变成绿色就算好了。
这里写图片描述
4、底部的控件一样添加约束。

测试结果:
这里写图片描述
适配成功。
总结:
直接说以后都应该使用storyboard+autolayout感觉是不负责的说法,但是深入思考autolayout是很有必要的!
如下情况使用autolayout会有帮助:
当需要展示的内容很多并且尺寸不固定;
程序需支持屏幕旋转(主要是iPad程序,iPhone程序横屏的场景有点非主流,也不排除..手游..);
但storyboard中使用autolayout有利有弊,好处当然是可视化,实现简单功能很节省时间,但也有弊端,例如不小心移动一个控件就会让弄乱那些约束

android攻略

阅读数 707

没有更多推荐了,返回首页