亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

AutoLayout android studio

2019-11-08 00:21:54
字體:
來源:轉載
供稿:網友

引入

Android Studio

將autolayout引入

dependencies {    compile 也可以直接

dependencies { compile 'com.zhy:autolayout:1.4.5'}Ecl
ipse

建議使用As,方便版本更新。實在不行,只有復制粘貼源碼了。

用法

第一步:

在你的項目的AndroidManifest中注明你的設計稿的尺寸。

<meta-data android:name="design_width" android:value="768"></meta-data><meta-data android:name="design_height" android:value="1280"></meta-data>

第二步:

讓你的Activity繼承自AutoLayoutActivity.

非常簡單的兩個步驟,你就可以開始愉快的編寫布局了,詳細可以參考sample。

其他用法

如果你不希望繼承AutoLayoutActivity,可以在編寫布局文件時,將

LinearLayout -> AutoLinearLayoutRelativeLayout -> AutoRelativeLayoutFrameLayout -> AutoFrameLayout

這樣也可以完成適配。

目前支持屬性

layout_widthlayout_heightlayout_margin(left,top,right,bottom)pading(left,top,right,bottom)textSizemaxWidth, minWidth, maxHeight, minHeight

配置

默認使用的高度是設備的可用高度,也就是不包括狀態欄和底部的操作欄的,如果你希望拿設備的物理高度進行百分比化:

可以在application的onCreate方法中進行設置:

public class UseDeviceSizeApplication extends Application{    @Override    public void onCreate()    {        super.onCreate();        AutoLayoutConifg.getInstance().useDeviceSize();    }}

預覽

大家都知道,寫布局文件的時候,不能實時的去預覽效果,那么體驗真的是非常的不好,也在很大程度上降低開發效率,所以下面教大家如何用好,用對PreView(針對該庫)。

首先,你要記得你設計稿的尺寸,比如 768 * 1280

然后在你的PreView面板,選擇于設計圖分辨率一致的設備:

然后你就可以看到最為精確的預覽了:

兩個注意事項:

你們UI給的設計圖的尺寸并非是主流的設計圖,該尺寸沒找到,你可以自己去新建一個設備。不要在PreView中去查看所有分辨率下的顯示,是看不出來適配效果的,因為有些計算是動態的。

擴展

對于其他繼承系統的FrameLayout、LinearLayout、RelativeLayout的控件,比如CardView,如果希望再其內部直接支持"px"百分比化,可以自己擴展,擴展方式為下面的代碼,也可參考issue#21:

package com.zhy.sample.view;import android.content.Context;import android.support.v7.widget.CardView;import android.util.AttributeSet;import com.zhy.autolayout.AutoFrameLayout;import com.zhy.autolayout.utils.AutoLayoutHelper;/** * Created by zhy on 15/12/8. */public class AutoCardView extends CardView{ private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this); public AutoCardView(Context context) { super(context); } public AutoCardView(Context context, AttributeSet attrs) { super(context, attrs); } public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) { return new AutoFrameLayout.LayoutParams(getContext(), attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!isInEditMode()) { mHelper.adjustChildren(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); }}

注意事項

ListView、RecyclerView類的Item的適配

sample中包含ListView、RecyclerView例子,具體查看sample

對于ListView

對于ListView這類控件的item,默認根局部寫“px”進行適配是無效的,因為外層非AutoXXXLayout,而是ListView。但是,不用怕,一行代碼就可以支持了:

@Overridepublic View getView(int position, View convertView, ViewGroup parent){    ViewHolder holder = null;    if (convertView == null)    {        holder = new ViewHolder();        convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);        convertView.setTag(holder);        //對于listview,注意添加這一行,即可在item上使用高度        AutoUtils.autoSize(convertView);    } else    {        holder = (ViewHolder) convertView.getTag();    }    return convertView;}

注意AutoUtils.autoSize(convertView);這行代碼的位置即可。demo中也有相關實例。

對于RecyclerView
public ViewHolder(View itemView){      super(itemView);      AutoUtils.autoSize(itemView);}//...@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){     View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, parent, false);     return new ViewHolder(convertView);}

一定要記得LayoutInflater.from(mContext).inflate使用三個參數的方法!

指定設置的值參考寬度或者高度

由于該庫的特點,布局文件中寬高上的1px是不相等的,于是如果需要寬高保持一致的情況,布局中使用屬性:

app:layout_auto_basewidth="height",代表height上編寫的像素值參考寬度。

app:layout_auto_baseheight="width",代表width上編寫的像素值參考高度。

如果需要指定多個值參考寬度即:

app:layout_auto_basewidth="height|padding"

用|隔開,類似gravity的用法,取值為:

width,heightmargin,marginLeft,marginTop,marginRight,marginBottompadding,paddingLeft,paddingTop,paddingRight,paddingBottomtextSize.

TextView的高度問題

設計稿一般只會標識一個進行依賴使用,如果一定要以module引用,參考該issue#74

(2)RadioGroup,Toolbar等控件中的子View無法完成適配

這個其實上文已經提到過了,需要自己擴展。不過這個很多使用者貢獻了他們的擴展類可以直接使用,參考autolayout-widget,如果沒有發現你需要的容器類,那么你就真的需要自行擴展了,當然如果你完成了擴展,可以給我發個PR,或者讓我知道,我可以加入到autolayout-widget中方便他人,ps:需要用到哪個copy就好了,不要直接引用autolayout-widget,因為其引用了大量的庫,可能很多庫你是用不到的。

(3)java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

這個問題是因為默認AutoLayoutActivity會繼承自AppCompatActivity,所以默認需要設置Theme.AppCompat的theme;

如果你使用的依舊是FragmentActivity等,且不考慮使用AppCompatActivity,你可以選擇自己編寫一個MyAutoLayoutActivity extends 目前你使用的Activity基類,例如MyAutoLayoutActivity extends FragmentActivity,然后將該庫中AutoLayoutActivity中的邏輯拷貝進去即可,以后你就繼承你的MyAutoLayoutActivity就好了。

ps:還是建議盡快更新SDK版本使用AppCompatActivity.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲有声小说3d| 欧美午夜女人视频在线| 91av在线网站| 久久久久北条麻妃免费看| 神马久久桃色视频| 欧美激情精品久久久久久久变态| 国产精品久久久av| 热久久视久久精品18亚洲精品| 在线免费看av不卡| 亚洲高清久久久久久| 国产精品黄视频| 日韩电影中文字幕| 日韩高清a**址| 国产精品最新在线观看| 亚洲欧美精品suv| 国产精品久久久久久久电影| 国产ts一区二区| 亚洲女人被黑人巨大进入| 欧美成人黑人xx视频免费观看| 国产精品www色诱视频| 国产精品视频在线观看| 97超碰国产精品女人人人爽| 亚洲精品在线看| 国产一区二区三区欧美| 国产精品欧美久久久| 亚洲男人天堂2019| 欧美怡红院视频一区二区三区| 在线日韩精品视频| 日韩在线观看网址| 欧美专区中文字幕| 清纯唯美日韩制服另类| 亚洲欧美中文日韩v在线观看| 欧美日韩激情美女| 九色精品免费永久在线| 亚洲成人网av| 久久露脸国产精品| 国产精品自拍视频| 亚洲白拍色综合图区| 黄色成人在线播放| 国产成人综合精品| 国产视频久久久久| 韩剧1988在线观看免费完整版| 92福利视频午夜1000合集在线观看| 性欧美视频videos6一9| 日av在线播放中文不卡| 久久久久久久久爱| 久久久久国产视频| 91精品国产高清自在线看超| 2019亚洲男人天堂| 91嫩草在线视频| 日韩欧美在线观看视频| 国产一区二区美女视频| 国产成人高清激情视频在线观看| 日韩成人av在线播放| 久久躁狠狠躁夜夜爽| 日韩中文有码在线视频| 欧美在线视频免费播放| 欧美老少配视频| 国产91精品最新在线播放| 久久久国产成人精品| 国产精品永久在线| 亚洲精品在线看| 亚洲自拍偷拍第一页| 色偷偷88888欧美精品久久久| 久久免费少妇高潮久久精品99| 中文字幕欧美日韩在线| 日韩av在线网页| 国产精品午夜视频| 中文字幕九色91在线| 亚洲成年网站在线观看| 亚洲欧洲激情在线| 精品偷拍各种wc美女嘘嘘| 欧美裸体xxxx| 国产精品青青在线观看爽香蕉| 成人在线中文字幕| 国内精品中文字幕| 亚洲高清一二三区| 亚洲亚裔videos黑人hd| 国产精品视频999| 国产精品免费电影| 亚洲欧美国产视频| 欧美性色19p| 亚洲精品乱码久久久久久按摩观| 亚洲一区二区免费| 欧美午夜精品久久久久久人妖| 欧美日在线观看| 国产精品入口夜色视频大尺度| 国产视频亚洲精品| 在线看日韩欧美| 国产精品免费视频久久久| 国产成人jvid在线播放| 亚洲欧美国产日韩中文字幕| 日韩经典一区二区三区| 一本色道久久综合亚洲精品小说| 91人人爽人人爽人人精88v| 国产综合福利在线| 久久久精品一区二区三区| 国产精品视频播放| 在线日韩精品视频| 亚洲精品电影久久久| 日本精品中文字幕| 国产精品九九久久久久久久| 欧美日韩aaaa| 欧美精品videofree1080p| 欧美性猛交xxxx久久久| …久久精品99久久香蕉国产| 亚洲国产精彩中文乱码av| 日本精品久久久| 亚洲欧美日韩精品久久奇米色影视| 欧美激情一区二区三区高清视频| 5566成人精品视频免费| 国产成人精品一区二区在线| 成人精品在线视频| 啪一啪鲁一鲁2019在线视频| 欧美成aaa人片在线观看蜜臀| 中文字幕欧美专区| 亚洲国产成人久久综合一区| 成人深夜直播免费观看| 蜜臀久久99精品久久久久久宅男| 亚洲国产精品系列| 国产成人avxxxxx在线看| 国产欧美一区二区三区视频| 精品香蕉在线观看视频一| 7777精品久久久久久| 亚洲视频电影图片偷拍一区| 日韩欧美中文免费| 日韩欧美aaa| 亚洲欧美精品一区| 日韩av网站大全| 亚洲国语精品自产拍在线观看| 国产精品v片在线观看不卡| 亚洲精品免费网站| 精品在线欧美视频| 久久精品99久久久香蕉| 亚洲国内高清视频| 日韩成人在线观看| 日本高清不卡的在线| 影音先锋日韩有码| 777国产偷窥盗摄精品视频| 亚洲a在线播放| 亚洲综合国产精品| 蜜臀久久99精品久久久久久宅男| 国产v综合v亚洲欧美久久| 日韩美女激情视频| 国产精品成人播放| 77777少妇光屁股久久一区| 91老司机精品视频| 亚洲欧美中文字幕在线一区| 精品无人国产偷自产在线| 国产精选久久久久久| 亚洲福利视频在线| 国产精品亚洲精品| 精品露脸国产偷人在视频| 久久精品成人一区二区三区| 国产成人jvid在线播放| 国产成人精品一区二区三区| 久久精品视频导航| 欧美在线视频导航| 国模叶桐国产精品一区| 精品亚洲一区二区三区在线播放| 成人在线精品视频| 欧美日韩美女在线| 亚洲精品久久久久| 亚洲理论电影网|