2012-07-12 85 views
0

我需要放置10個ImageView並排(水平行),他們需要從左到右填充整個屏幕。所以如果屏幕的總寬度是100px,那麼每個ImageView的寬度都是10px。我們忽略每個ImageView的高度。Android。放置ImageViews

如何在世界上,我可以使用dp值和而不是pixels?我已經放置在每個LDPI,MDPI內,華電國際文件夾.JPG圖像,每個都具有尺寸對於這傢伙的答案:see here

我試着這樣做:

<ImageView 
    android:id="@+id/caca1" 
    android:src="@drawable/tile_11" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
<ImageView 
    android:id="@+id/caca2" 
    android:src="@drawable/tile_11" 
    android:layout_toRightOf="@+id/caca1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

... and so on, 'til the 10th ImageView. Each one is place on the right side of the previous. 

上面的代碼是否連續顯示它們,從屏幕的左邊緣開始......但我沒有達到右邊距。

有沒有一種方法可以將每個圖塊拉伸到適合屏幕寬度,而不用像素定義每個圖像視圖的寬度?

+1

水平LinearLayout與10個ImageViews,每個具有相同的權重? – CSmith 2012-07-12 15:20:47

+1

Estel和CSmith提供了一個很好的答案,我只想補充說,在佈局文件中以像素或傾角(真正的任何數值)定義小部件的大小通常是不好的做法。在考慮屏幕尺寸和像素密度時,即使屏幕尺寸相同,數字值也可能導致相同的佈局在兩部不同的手機上看起來不同。使用'layout_weight'是最好的方法,它將爲您的用戶提供更一致的屏幕尺寸體驗,並減少失真的可能性。 – MattDavis 2012-07-12 15:29:22

+0

@MattDavis和CSmith請在下面的答案中看到我的評論。你可能有想法做什麼:( – AndreiBogdan 2012-07-12 15:38:40

回答

1

關於動態地調整高度,我認爲你必須在你的Acivitities的OnCreate編程做到這一點():

針對每個圖像:

// image layout adjustment 
LayoutParams lp = mImage.getLayoutParams(); 
float width = (float)mImage.getDrawable().getIntrinsicWidth(); 
int height = (int)(((float)mContext.getWindowManager().getDefaultDisplay().getWidth()/10.0f) * ((float)mImage.getDrawable().getIntrinsicHeight()/width)); 

lp.height = height; 
mImage.setLayoutParams(lp); 

高度=屏幕寬度/ 10(因爲你有10圖像s假設0邊距) 然後乘以圖像的高度/寬度的比率。這應該保持你的形象規模。

+0

首先,這是一個像素還是一個dp值?如果它是一個像素值,然後我需要將它轉換爲dp,然後在dp中定義高度,否則,如果它是像素,ldpi,mdpi,hdpi,那麼操作系統會從這些文件夾中選取最適合的drawable,噸工作,或將它? – AndreiBogdan 2012-07-12 16:22:57

+0

見上面編輯高度=公式,這希望給你正確的價值 – CSmith 2012-07-12 16:33:44

1

你想用一個LinearLayout他們水平顯示:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView 
    android:layout_width="0" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:src="@drawable/image" /> 
    <ImageView 
    android:layout_width="0" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:src="@drawable/image2" /> 
    etc.. 
</LinearLayout> 

倘若layout_weight是每個ImageView相同,他們將同樣的LinearLayout內的大小。

+0

哦,男孩......聽起來像我正在尋找的答案,讓我快速嘗試:D – AndreiBogdan 2012-07-12 15:22:57

+0

因此,它它使得ImaveViews的寬度都是屏幕總寬度的10%,但ImageView內部的drawable的每一側(左側和右側)都有一個透明的空間,我猜測drawable寬度較小,操作系統沒有適合ImageView。如何做到這一點,所以它適合每一個Android設備的屏幕。 – AndreiBogdan 2012-07-12 15:37:50

+1

而不是將您的drawable設置爲'android:src'屬性,請嘗試'android:background'屬性。雖然這可能會拉伸或扭曲你的圖像。 – MattDavis 2012-07-12 15:49:54

1

設置圖像寬度爲0,重量1,並設置其scale typesCENTER_CROPFIT_XY

<ImageView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:src="@drawable/image" 
    android:scaleType="CENTER_CROP" /> 
+0

請參閱以上博文的評論。你可能知道答案:它可以和scaleType一起工作,但ImageView的高度不會改變,所以它會減少初始繪製的比例。 – AndreiBogdan 2012-07-12 16:02:32