1. 程式人生 > >Android GridView n行,自適應高度佔滿螢幕,不滾動

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的高度程式碼