Android GridView n行,自適應高度佔滿螢幕,不滾動
今天客戶提出一個問題,要求我們首頁的GrdiView,不要滾動,並且要根據不同的解析度的手機和不同大小的手機,來自適應。高度佔滿螢幕。
於是我就開始了做螢幕的自適應。。首先,我根據張鴻洋大神的關於螢幕的自適應部落格的http://blog.csdn.net/lmj623565791/article/details/45460089,生成了一系列尺寸檔案
我是直接下載的jar,然後直接生成的,但是這個預設基準為400*320的,但是我們美工給的設計圖的比例是646*375的(這是根據IOS來的)。
所以這個我不能用,,於是我就把GenerateValueFiles這個類copy了下來,然後修改了裡面的引數
int baseW = 375;//設計圖的寬
int baseH = 646;//設計圖的高
然後。根據客戶的需要適配的尺寸。修改SUPPORT_DIMESION裡面的內容。
然後。大家就可以生成資原始檔了。我用的是as。
在類上右擊,然後選擇,執行Run…Main即可。
然後,就可以在你的佈局檔案中,直接用了。例如設計圖的toolbar的高度是44px,則你就可以直接寫 android:layout_height=”@dimen/y44”,而不再需要擔心我是否要轉換下(Ps; @dimen/x44 代表寬度是44)
這樣寫以後。適配就好了很多。。
但是還有個問題就是相同尺寸的手機,手機的dpi不一樣。。還是會造成前段的縮放不同,於是,就有了在同是720*1280的手機。一個dpi是240,一個dpi是320,就出現了,同樣是兩行,dpi為320的GridView,剛好充滿螢幕,但是在240上,就出現,沒有充滿螢幕。
然後。。。就有了。計算螢幕剩下的高度然後/行數。來實現充滿全屏。
這裡還有個知識點,就是獲取控制元件的高度。
通過view.getHeight()獲取控制元件的高度或者寬度是0,那是因為
熟悉view繪製流程的朋友應該一眼就看出來了。在onCreate中。我們的控制元件事實上還並沒有畫好,換句話說,等onCreate方法執行完了,我們定義的控制元件才會被度量(measure),所以我們在onCreate方法裡面通過view.getHeight()獲取控制元件的高度或者寬度肯定是0。
那麼我們怎麼得到控制元件的高度呢??
No1:
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
imageView.measure(w, h);
int height = imageView.getMeasuredHeight();
int width = imageView.getMeasuredWidth();
這樣的方法非常easy,就是我們自己來測量
No2:
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
vto.removeOnPreDrawListener(this);
int height = imageView.getMeasuredHeight();
int width = imageView.getMeasuredWidth();
return true;
}
});
這種方法。我們須要註冊一個ViewTreeObserver的監聽回撥,這個監聽回撥,就是專門監聽畫圖的,既然是監聽畫圖,那麼我們自然能夠獲取測量值了,同一時候。我們在每次監聽前remove前一次的監聽。避免反覆監聽。
No3:
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
imageView.getHeight();
imageView.getWidth();
}
});
這種方法於第2個方法基本同樣,但他是全域性的佈局改變監聽器,所以是最推薦使用的。
看過自定義帶重新整理和載入更多的ListView這個視屏的童鞋,應該見過方法3.。。視屏裡,講師用的就是這個,來獲取重新整理佈局的高度的。。
至此。。完美解決了GridView,自適應高度,佔滿螢幕。
還要個禁止GridView的滑動,,
**gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
return true;
default:
break;
}
return false;
}
});**
OK。就這樣。。感謝文章中用到的知識點的提供者。
然後獻上一句我最近在一個人的朝聖中看到的話:
我們的選擇不同又如何?反正我們殊途同歸。。。
相關推薦
Android GridView n行,自適應高度佔滿螢幕,不滾動
今天客戶提出一個問題,要求我們首頁的GrdiView,不要滾動,並且要根據不同的解析度的手機和不同大小的手機,來自適應。高度佔滿螢幕。 於是我就開始了做螢幕的自適應。。首先,我根據張鴻洋大神的關於螢幕的自適應部落格的http://blog.csdn.net/l
iOS【終極方案】精準獲取webView內容高度,自適應高度
關於WebView內容高度的獲取,相信很多人都踩過坑,無法獲取到準確高度,導致頁面佈局出現差錯,搜到的資料很多但都無法解決問題,以下是個人經驗總結: 專案需求實現H5文章&原生評論效果,文章是載入H5連結,評論資訊是後臺介面提供,以列表形式展示。 實現思路:
android ListView 巢狀scrollView 自適應高度
很多時候我們的需求要求我們在scrollView裡面巢狀ListView,但是直接巢狀的話,ListView只會顯示一個Item,這時候就需要ListView根據Item的數量來自適應高度了。 //
ListView 與 GridView 在ScrollView中自適應高度
ListView public static void setListViewHeightBasedOnChildren(ListView listView) { if (limi
Android GridView設定行高,即item高度
其實很簡單,設定GridView中的item佈局中的跟節點中的padding屬性即可。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a
Android GridView自適應高度(不出現滾動條)
最近有個需求就是,網格狀顯示,且需要自適應高度(不出現滾動條,如果有滾動條就需要考慮GrideView互相巢狀的滑動事件編寫了,雖然不麻煩,但佈局看起來卻不一定好看),大概看了一下網上的解決方法,最終採用瞭如下方案: public class
div實現自適應高度的textarea,實現angular雙向綁定
amp 屬性 top 方式 androi android 可編輯 str == 相信不少同學模擬過騰訊的QQ做一個聊天應用,至少我是其中一個。 過程中我遇到的一個問題就是QQ輸入框,自適應高度,最高高度為3row。 如果你也像我一樣打算使用textarea,那麽很抱歉,你一
iframe自適應高度,以及一個頁面加載多個iframe
nload 自適應 ntb new 一個 type set var con <iframe id="iframepage" src="Index.html" name="iframepage" frameborder="0" width="1349" scroll
【css】子元素浮動到了父元素外,父元素沒有隨子元素自適應高度,如何解決?
正常情況 如果子元素沒有設定浮動(float),父元素的高度會隨著子元素高度的改變而改變的。 設定浮動以後 父元素的高度不會隨著子元素的高度而變化。 例如:在一個ul中定義若干個li,並設定float='left' <!DOCTYPE html> <html lang="en"&g
Android WebView 圖片超出寬度自適應,點選檢視大圖
webView 配置 WebSettings webSettings = webView.getSettings(); webSettings.setJava
Android評論彈出窗根據輸入法自適應高度
需求分析:當我們點選輸入框時,會調出輸入法軟鍵盤,如果不做處理,PopupWindow評論視窗可能會擠到螢幕最上方,更糟糕的事件是看不到我們的輸入框,連自己輸入什麼內容都看不到,這樣使用者體驗非常差!下面先讓大家看我們做出來的效果圖: 上圖可以看出,輸入法彈出和隱藏,對
CSS圖片兩端對齊,自適應列表佈局末行對齊修復例項頁面
寫在前面 前端開發,圖片兩端對齊,是十分常見的,也是十分痛苦的,我試過好多方法,通過整理,認為下面還是比較靠譜的,在實踐中大家可以試試,歡迎一起學習,一起進步 HTML程式碼 HTML程式碼非常簡單,用的是DIV,裡面用的是SPAN標籤。沒有采用Ul li 標籤,是因為在實踐應用中總是出現好
網頁中的iframe自適應高度寬度,延遲計算高寬度
//在iframe onlad時執行下面的程式碼 id="myFileTableIframe" function IframeAutoHeightAndWidth(){ var iframe=document.getElementById("myFileTableI
Android學習第7篇——碎片實踐,結合ListView的簡單閱讀應用,自適應手機和平板
在學過了碎片(Fragment)、ListView之後,實現一個自適應手機和平板的文章閱讀應用效果圖:手機: 平板:二、實現過程:1、新建一個文章實體類Newspublic class News { private String title; private
Android 自適應的一種佈局,weight
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr
layer彈出層自適應高度,垂直水平居中
1、高度自適應:success: function(layero, index) { layer.iframeAuto(index); },2、layer垂直居中進入layer.js,增加幾行程式碼。具體如圖:
總結iframe高度自適應,自適應子頁面高度
var browserVersion = window.navigator.userAgent.toUpperCase(); var isOpera = browserVersion.indexOf("OPERA") > -1 ? true : false; var isFireFox = brow
[置頂] RecyclerView實現瀑布流,圖片自適應高度
話不多說,先上效果圖 對於RecyclerView,相信大家都不陌生了,這個集listView,GridView,瀑布流效果與一身強大控制元件,漸漸地滲透在每個App.... 還是回到正題,如何讓RecyclerView裡的圖片自適應高度? 我們知道,要讓RecyclerView有瀑布流效果,R
iframe 自適應高度,更改內容時iframe高度怎麼根據新的內容高度自動改變
//code from http://caibaojian.com/iframe-adjust-content-height.html <iframe src="backtop.html" fr
android ViewPager 自適應高度
很多Android開發者會遇到的問題,ViewPager無法自適應內容的高度,包括子Fragment或view 下面根據需求給出2中方式來動態根據內容設定ViewPager的高度: 1.是網上大家都說的取所有view最大高度作為ViewPager的高度程式碼