適配時,請注意單位 px dpi

2021-07-25 16:58:48 字數 3407 閱讀 8377

兩個問題:

1、控制viewpager時候,若想在同一介面顯示出來2-3個item該怎樣(效果如圖所示)

2、控制viewpager顯示多個item時候,item的檢視被擠壓,該怎麼辦?

解答:1、要想實現圖中效果,發現只要控制viewpager中的兩個引數:

android:cliptopadding="false"android:paddingleft="20dp"android:paddingright="20dp"
cliptopadding引數,網上是有講解的;主要控制是paddingleft和paddingright,雖然為啥我也不太清楚;那麼問題來了。。。padding的距離,該如何控制呢?
開始是想寫死乙個合適的,後來發現,手機寬高比不同,適配會有問題,過寬手機可能會導致兩邊的卡片露不出來,還算勉強可以;但是過窄的手機就不行了,會導致每個item被padding嚴重擠壓,然後變形,甚至顯示不全。解決道路只剩下用**根據手機螢幕的寬高來適配了
2、適配思路:paddingleft=0.5*(螢幕寬-寬)
最苦惱的莫過於**中獲取的長度,單位是啥?dp?px?還是啥?
最後根據網上查到的資料,做一下總結:
1)獲取到本地尺寸(單位是px畫素),從而得到比例:如圖:536*798

bitmapfactory.options opts =newbitmapfactory.options();

opts.injustdecodebounds=true;

bitmapfactory.decoderesource(getresources(), r.drawable.bg_quiz_card_front, opts);

opts.insamplesize= 1;

opts.injustdecodebounds=false;

intwidth = opts.outwidth;

intheight = opts.outheight;

2)因為viewpager我們是固定了高度400dp,那麼對應的imageview高度也會是400dp,那麼對應的,我們根據根據的寬高比,就獲得了在控制項中的寬度
intpicwidth = (int) ((double) 400 * (double) ((double) width / (double) height));
3)接著,我們想獲取螢幕的dp,從而得到差值
windowmanager wm = (windowmanager) getactivity().getsystemservice(context.window_service);

displaymetrics dm =newdisplaymetrics();

wm.getdefaultdisplay().getmetrics(dm);

intwidthscreen = dm.widthpixels;// 螢幕寬度(畫素)

intheightscreen = dm.heightpixels; // 螢幕高度(畫素)

floatdensity = dm.density;//螢幕密度(0.75 / 1.0 / 1.5)

intdensitydpi = dm.densitydpi;//螢幕密度dpi(120 / 160 / 240)

//螢幕寬度演算法:螢幕寬度(畫素)/螢幕密度

intscreenwidth = (int) (widthscreen / density);//螢幕寬度(dp)

intscreenheight = (int) (heightscreen / density);//螢幕高度(dp)

4)接著我們給viewpager賦值計算得後的padding距離
padding=(螢幕寬度-寬度)/2
這裡需要注意:viewpager.setpadding(paddingleft, paddingtop, paddingright, paddingbottom);
這個方法的引數都是px
我們需要把計算後的值換成px才行,
floatsubwidth = screenwidth - picwidth;

intpaddingleft = (int)(dimenutils.dip2px(getactivity(), subwidth)*0.5);

intpaddingright = paddingleft, paddingtop = 0, paddingbottom = 0;

public static int dip2px(context context,floatdpvalue) 

dip2px方法如上
最後呼叫
viewpager.setpadding(paddingleft, paddingtop, paddingright, paddingbottom);
就完成適配啦

跳槽人員請注意

許多跳槽者參加應聘面試時,都會被招聘者問及離開原來職位的原因。若是由於上班路途太遠 專業不對口 隨遷搬家等人人都可以理解的因素,說起來無顧忌,如果是以下四種因素,就要慎之又慎了,弄不好,就會失去了應聘機會。1 收入低沒勁幹 這樣的跳槽理由會使招聘者誤認為你很計較個人得失,對工作沒有吃苦精神,把個人利...

C Linq ForEach 使用請注意

使用c linq的確給我們帶來了很多的方便,但是如果不合理使用,會造成一些隱藏的bug,而且很難被發現。今天我就分享乙個工作中遇到的問題。需求 對list進行遍歷,把滿足某一條件的item remove掉。listlist new list for int i 0 i 1000 i il.forea...

CSDN 請注意版權問題

其實我以前也在 csdn 上申請過專欄 記得當時開通了還比較激動 也使用過上面的 blog 服務 但後來都放棄了 csdn 的專欄是被迫放棄的,因為要大力發展 blog 可是 blog 的發展路線不好,變成了文章 copy paste 的集中地 不管是哪一家 bsp 如果做不到去中心化,其他的再怎麼...