1. 程式人生 > >Android GridView實現自適應正方形

Android GridView實現自適應正方形

GridView佈局

    <GridView
        android:id="@+id/gv_personal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/userpage_bar"
        android:background="@color/White"
        android:horizontalSpacing="10dp"
        android:listSelector="#ffffff"
        android:numColumns="3"//不可缺少
        android:padding="10dp"
        android:layout_marginTop="15dp"
        android:verticalSpacing="10dp"
        android:columnWidth="100dp"//不可缺少
        android:stretchMode="columnWidth"//不可缺少
        ></GridView>


在item佈局中引用中自定義佈局

public class SquareLayout extends RelativeLayout {
    public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public SquareLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareLayout(Context context) {
        super(context);
    }

    @SuppressWarnings("unused")
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // For simple implementation, or internal size is always 0.
        // We depend on the container to specify the layout size of
        // our view. We can't really know what it is since we will be
        // adding and removing different arbitrary views and do not
        // want the layout to change as this happens.
        setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));

        // Children are just made to fill our space.
        int childWidthSize = getMeasuredWidth();
        int childHeightSize = getMeasuredHeight();
        //高度和寬度一樣
        heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

介面卡和載入介面卡不變。

下面是在手機上執行的截圖

SquareGridView測試截圖

SquareGridView測試截圖

下面是在Nexus 7平板上的截圖:

測試程式在Nexus 7上的截圖

測試程式在Nexus 7上的截圖

可以看到上面的效果雖然也是正方形,但是在大螢幕下顯示100dp的方塊是否看起來太小了。 把該尺寸在平板上修改大點是非常容易的。只需要在 values-sw600dp 目錄中(Nexus 7 的最小螢幕寬度為600dp)建立一個檔案

dimens.xml 內容如下:

Java
1234&lt;?xml version="1.0"encoding="utf-8"?&gt;&lt;
resources&gt;&lt;dimen name="itemSize"&gt;140dp&lt;/dimen&gt;&lt;/resources&gt;

這樣當程式在Nexus 7上執行的時候,會根據140dp來計算列數。最終效果如下:

在Nexus 7上改進後的佈局

在Nexus 7上改進後的佈局

同樣的,如果想在手機橫屏(比如Galaxy Nexus手機)下也顯示大一點的圖,則可以根據手機的長度的dp值分別設定一個區間

比如Galaxy Nexus手機螢幕高度為640dp,但是在橫屏情況下應用能用的寬度只有570dp,另外的70dp位於右側的系統功能鍵(返回鍵、Home鍵、最近任務鍵)佔用了。所以建立個目錄

values-w570dp-land,在裡面設定ItemWidth即可, dimens.xml 內容:

Java
1 2 3 4 &lt;?xmlversion="1.0"encoding="utf-8"?&gt; &lt;resources&gt; &lt;dimenname="itemSize"&gt;140dp&lt;/dimen&gt; &lt;/resources&gt;

下面兩個圖是橫屏的對比

Galaxy Nexus 橫屏顯示小圖示

Galaxy Nexus 橫屏顯示小圖示

Galaxy Nexus 橫屏顯示修改後的圖示

Galaxy Nexus 橫屏顯示修改後的圖示

現在效果已經完成了,只差沒有選中按下狀態的標示了。 要實現這個Press狀態,可在item.xml中新增一個View,當Press的時候 顯示一個半透明的圖層來標示。

修改後的item.xml 程式碼如下

Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 &lt;?xmlversion="1.0"encoding="utf-8"?&gt; &lt;org.goodev.squaregrid.SquareLayoutxmlns:android="http://schemas.android.com/apk/res/android" :layout_width="match_parent" android:layout_height="wrap_content" &gt; &lt;ImageView android:id="@+id/icon" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:src="@drawable/ic_launcher"

相關推薦

Android GridView實現適應正方形

GridView佈局 <GridView android:id="@+id/gv_personal" android:layout_width="match_parent" android:layout_he

css實現適應正方形的方法

固定 如果 spa size 一個 idt width 正方 pad 頁面布局中,我們經常需要用百分比來實現寬度自適應,但是如果這時候高度要跟寬度呈固定比例變化,該怎麽辦呢? 很簡單,我們可以利用元素的padding或margin的百分比值是參照寬度的這一特性來實現, 即如

純css實現適應正方形

在處理移動端頁面時,我們有時會需要將banner圖做成與螢幕等寬的正方形以獲得最佳的體驗效果,如Flipbord的移動頁面: 方案一:CSS3 中新增了一組相對於可視區域百分比的長度單位 vw, vh, vmin, vmax。其中 vw 是相對於視口寬度百

【聊技術】在Android實現適應文字大小顯示

本週的聊技術話題和大家說說如何在Android中實現自適應文字大小顯示。 想象一下,在佈局中,通常顯示文字的區域大小是固定的,但是文字長度並不總是固定的。比如列表中的文章標題、介面下方的按鈕文字等等。 為了儘可能讓這些文字可見,傳統的做法是通過文字長度設定文字大小,或者通過android:ellipsize屬

android設置GridView高度適應實現全屏鋪滿效果

== post http istview div GridView dap item 拉伸 使GridView每個item的高度自適應拉伸,達到整個GridView剛好鋪滿全屏的效果。 public static void setGridViewMatchParent(G

css實現高度適應正方形

spl splay code gin tle margin content div hidden <!DOCTYPE html> <html> <head> <title></title> </hea

div實現適應高度的textarea,實現angular雙向綁定

amp 屬性 top 方式 androi android 可編輯 str == 相信不少同學模擬過騰訊的QQ做一個聊天應用,至少我是其中一個。 過程中我遇到的一個問題就是QQ輸入框,自適應高度,最高高度為3row。 如果你也像我一樣打算使用textarea,那麽很抱歉,你一

Rem實現適應初體驗

4.2 使用 技術分享 我不 container script def 第一次 動態改變 第一次做移動端的頁面,遇到的第一個問題就是移動端的輪播圖。其實輪播圖的插件有很多,但是完全滿足需求的並不容易找。 需求: 1.實現基本的觸屏輪播圖效果 2.傳入非標準比例的圖片,

2017年總結的前端文章——border屬性的多方位應用和實現適應三角形

content ott 現在 修改 缺點 顏色 b- 固定 瀏覽器 border屬性是在實際的應用中使用頻率比較高的一個屬性,除了作為邊框使用,利用border屬性的一些特征以及表現方式,可以在實現一些比較常見的效果(如等高布局,上下固定內容滾動布局和繪制CSS圖標等),利

Rem是如何實現適應布局的?

span 理解 radi brush 研究 工程師 結果 -s sha 作為前端工程師的我們,在h5頁面布局的過程中會使用rem布局,大家都知道rem是相對長度單位,但是作為前端的我們該如何去讓rem布局自適應iphone4、iphone6、iphone6、iphone6p

如何在Hexo中實現適應響應式相冊功能

use images tin 博客 pps otc markdown min win 用最清晰簡潔的方法整合一個響應式相冊 效果 技術選型 由於我選用的主題使用了fancyBox作為圖片彈出展示的框架,查看後表示很不錯,能滿足需要 http://fancyapps.c

UWP 新手教程2——怎樣實現適應用戶界面

ups UC 全部 rac msf puts steam 12px 微軟雅黑 系列文章UWP新手教程1——UWP的前世今生 如上文所說的,布局面板依據可用的屏幕空間。

rem實現適應

等於 直接 設置字體大小 字體大小 字體 媒體 應該 有一個 ont 總結一下,rem實現自適應:用rem代替px,配合媒體查詢設置font-size 首先,px是死的。若一律用px,那就會大的顯得小,小的屏幕顯得大。其次,rem是活的,通過設置字體大小可以引起rem的改變

CSS實現適應不同大小螢幕的背景大圖的兩種方法(轉簡書)

CSS實現自適應不同大小螢幕的背景大圖的兩種方法 一張清晰漂亮的背景圖片能給網頁加分不少,設計師也經常會給頁面的背景使用大圖,我們既不想圖片因為不同解析度圖片變形,也不希望當在大屏的情況下,背景有一塊露白,簡而言之,就是實現能自適應螢幕大小又不會變形的背景大圖,而且背景圖片不會隨著

[譯]使用 JavaScript 和網路資訊 API 實現適應服務

原文地址:Adaptive Serving using JavaScript and the Network Information API 原文作者:Addy Osmani 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:Ra

[UWP]使用AdaptiveTrigger實現適應佈局

原文: [UWP]使用AdaptiveTrigger實現自適應佈局 這篇部落格將介紹如何在UWP開發中使用AdaptiveTrigger實現自適應佈局。 場景1:窗體寬度大於800時,窗體背景色為綠色,窗體在0到800之間為藍色。 XAML Code: <Grid x:Name="La

qt顯示圖片並且實現適應佈局

對話方塊開啟圖片 QString fileName = QFileDialog::getOpenFileName(this, tr("open iamge"),//對話方塊名稱 ".",//預設開啟檔案位置“.”檔案目錄"/"根目錄 tr("image files(*

RecyclerView GridView 矩形適應

最近公司要做一個類似GridView控制元件佈局的資料展示,要求資料的item每個都是矩形的,尋思著網上找個框架用唄, 所有網上找了一個重寫GridLayoutManager類的佈局管理用了一下,效果不理想,太麻煩每次都要new,所以尋思著自己寫了一個。 在不實現Gri

css3實現適應的3行,左右行固定寬度,中間適應,要求先渲染中間部分

tps article tails blank you csdn https tail www https://blog.csdn.net/thqy39/article/details/73512478 https://www.cnblogs.com/ranzige/p/4

css實現適應背景圖及背景圖透明度處理

前言 大屏視覺化在展示方式上之所炫酷是因為有很多科技感圖形的襯托,這些圖形可以來自圖表元件,也可以是UI元件,具備科技感的UI元件實際上比常見的元件庫中的元件多了一個樣式屬性(即backgroundImage),但是在做元件自適應的時候往往一張背景圖是不能滿足自適應的需求的