日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 屏幕完美适配,Android完美适配不同屏幕

發布時間:2024/9/19 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 屏幕完美适配,Android完美适配不同屏幕 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android的碎片化一直都是頭疼的問題,即使使用dp,sp在不同的手機上表現也差強人意,在github上尋找后沒有發現合適的,今天就自己擼了個。

先上圖,看了真相才知道值不值得擁有。。。

適配前:

大屏幕

小屏幕

適配后:

大屏幕

小屏幕

是不是按固定比例縮放了!!!

接下來說下實現

一般我們開發時都是拿到按一定比列的設計圖,比如1920*1080的高寬比的。那么就可以拿設計給的比列來作為基準,進行縮放,比如屏幕是1280*768 那么就按1280/1920 ?768/1080 的比列來設計。當然這里還要分情況:

1.有固定寬高的就要按寬高比來縮放 就可以取1280/1920? 768/1080 中小的(這是拿來做例子)

2.文字大小的縮放怎么縮放,也是按小的比列

3.margin padding 怎么縮放 就按那個方向就那么了,比如是marginTop 那就按768/1080

思路就是這樣,代碼

public classAdapterConstraintLayoutextendsConstraintLayout {

private static final intDESIGN_WIDTH=1080;

private static final intDESIGN_HEIGHT=1920;

private static final floatDESIGN_SCALE=3.0f;

private floatmScale;

private floatmFontScale;

private floatmScaleX=0;

private floatmScaleY=0;

publicAdapterConstraintLayout(Context context) {

this(context, null);

}

publicAdapterConstraintLayout(Context context,AttributeSet attrs) {

this(context,attrs,0);

}

publicAdapterConstraintLayout(Context context,AttributeSet attrs, intdefStyle) {

super(context,attrs,defStyle);

Point point =newPoint();

((WindowManager) context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getSize(point);

//橫屏

if(point.x> point.y) {

mScaleX= (point.x*1.0f/DESIGN_HEIGHT);

mScaleY= (point.y*1.0f/DESIGN_WIDTH);

}else{//豎屏

mScaleX= (point.x*1.0f/DESIGN_WIDTH);

mScaleY= (point.y*1.0f/DESIGN_HEIGHT);

}

floatdensity =DESIGN_SCALE/ getResources().getDisplayMetrics().density;

floatscaleDensity =DESIGN_SCALE/ getResources().getDisplayMetrics().scaledDensity;

floatminScale = Math.min(mScaleX,mScaleY);

mScale= minScale * density;

mScaleX*= density;

mScaleY*= density;

mFontScale= minScale * scaleDensity;

}

@Override

public voidaddView(View child) {

super.addView(child);

}

@Override

public voidaddView(View child, intindex) {

super.addView(child,index);

}

@Override

public voidaddView(View child, intwidth, intheight) {

super.addView(child,width,height);

}

@Override

public voidaddView(View child,ViewGroup.LayoutParams params) {

if(!isInEditMode()) {

transformSize(child,(LayoutParams) params);

}

super.addView(child,params);

}

private voidtransformSize(View child,LayoutParams params) {

if(params.width>0&& params.height>0) {//按比列

params.width*=mScale;

params.height*=mScale;

}else{

//width

if(params.width>0) {

params.width*=mScaleX;

}

//height

if(params.height>0) {

params.height*=mScaleY;

}

}

//font size

if(childinstanceofAppCompatTextView) {

final floattextSize = ((AppCompatTextView) child).getTextSize();

((AppCompatTextView) child).setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize *mFontScale);

}else if(childinstanceofAppCompatButton) {

final floattextSize = ((AppCompatButton) child).getTextSize();

((AppCompatButton) child).setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize *mFontScale);

}else if(childinstanceofAppCompatEditText) {

final floattextSize = ((AppCompatEditText) child).getTextSize();

((AppCompatEditText) child).setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize *mFontScale);

}

//margin

params.leftMargin*=mScaleX;

params.topMargin*=mScaleY;

params.rightMargin*=mScaleX;

params.bottomMargin*=mScaleY;

//padding

intpaddingLeft = (int) (getPaddingLeft() *mScaleX);

intpaddingTop = (int) (getPaddingTop() *mScaleY);

intpaddingRight = (int) (getPaddingRight() *mScaleX);

intpaddingBottom = (int) (getPaddingBottom() *mScaleY);

child.setPadding(paddingLeft,paddingTop,paddingRight,paddingBottom);

}

}

代碼不復雜,就是對寬高,margin padding進行設置

好了 接下來是使用 直接用就行了

這里沒有單獨抽出去,比如不想用在ConstraintLayout怎么辦 ,可以抽出去,跟百分比一樣

github

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的android 屏幕完美适配,Android完美适配不同屏幕的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲第一免费视频 | 国产日韩av在线 | 无码精品黑人一区二区三区 | 爱福利视频一区二区 | 久久国语对白 | 五月天最新网址 | 中文字幕在线观看免费 | 美景之屋电影免费高清完整韩剧 | 日本成人福利视频 | 福利国产在线 | 插插插综合 | 日韩国产综合 | 日韩欧美一二区 | 高h免费视频| 欧美成人做爰大片免费看黄石 | 一区三区在线观看 | 奇米影视一区二区三区 | 91avcom| 牛牛精品一区二区 | 一级黄色在线视频 | 欧美视频在线观看一区 | 国产精品国产三级国产播12软件 | 91爽爽 | 日韩欧美视频在线免费观看 | 国产精品系列在线观看 | 夜夜嗨av一区二区三区四区 | 天天做天天爽 | 亚洲a色| 欧美脚交| 中国免费黄色片 | 手机看片久久久 | 伊人艹 | 国产精品激情 | 一区精品二区国产 | 草草影院第一页yycc.com | 国产精品国产三级国产普通话对白 | 日韩精品免费一区二区三区竹菊 | 91麻豆精品国产91久久久无需广告 | 色婷综合 | 色婷婷免费视频 | 日日拍拍| 黄色片免费在线 | 成人性视频免费网站 | 一级中国毛片 | 久久久精品久久久 | 日韩影视一区二区三区 | 日韩在线免费视频观看 | 久久午夜夜伦鲁鲁片无码免费 | 97精品久久久 | 91九色国产ts另类人妖 | 99热最新在线 | www亚洲天堂 | 男生草女生视频 | 夜夜撸小说 | www.av777| 综合久久91 | 久久成人精品视频 | 国产另类xxxxhd高清 | 日韩免费av| 中文字幕在线免费视频 | 好看的黄色网址 | 污黄视频在线观看 | 成人精品视频网站 | 毛片基地站 | 久久桃花网 | 污黄网站在线观看 | 国内自拍小视频 | porn麻豆| 九九涩| 免费裸体视频网站 | 麻豆三级| 被黑人猛躁10次高潮视频 | 先锋资源一区二区 | 性农村xxxxx小树林 | 黄色日批网站 | 国语久久 | 亚洲乱仑 | 国产美女91呻吟求 | 欧美一级片在线观看 | 国产r级在线 | 污黄视频在线观看 | 国产又爽又黄又嫩又猛又粗 | 鲁鲁在线 | 亚洲精品2区 | 国产亚洲一区二区三区 | 日日夜夜精品免费视频 | 欧美视频在线不卡 | 人妻熟人中文字幕一区二区 | 无码国产精品久久一区免费 | 日本黄区免费视频观看 | av资源站最新av | 四虎成人影视 | 久久久久久九九 | 成人免费观看网站 | 日韩欧美精品在线 | 亚洲视频国产视频 | 婷婷影院在线观看 | 美女主播福利视频 | 激情视频91 |