2015-10-19 68 views
0

這個問題可能會被要求超過1000次,我仍然在這裏困惑,這將是正確的方法嗎?當我谷歌搜索時,我發現了一些相關的鏈接link1, link2,link3 etc.解決方案我發現是使用xml中的相對佈局design.All佈局將位於layout文件夾中(如果您正在創建電話應用程序),並且尺寸應該在dimens.xml(位於values-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi文件夾中)中給出以支持所有屏幕。如何在android中創建應該支持所有設備的佈局?

我該如何給圖像視圖的marginTop。我做這樣的計算:在比率 (1:1.5:2:3:4) - (mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi) - (10dp -15dp-20dp-30DP-40dp)。 我的方法是正確的還是?

我在drawable(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)文件夾中給出了不同分辨率的不同圖像。

我的問題是在values-mdpi/dimens.xml-margintop-10dp, values-hdpi/dimens.xml-margintop-15dp,values-xhdpi/dimens.xml-margintop-20dp等。不同的屏幕比例(1:1.5:2:3:4)是正確的? main.xml中:

<RelativeLayout 
    android:id="@+id/rl_submain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 


    <ImageView 
     android:id="@+id/iv_papa" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="@dimen/s_mtop" 
     android:background="@drawable/papa1" 
     android:gravity="center"/> 

    <TextView 
      android:id="@+id/tv_power" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:layout_marginBottom="@dimen/s_mbot" 
      android:textSize="12sp" 
      android:textColor="@color/white" 
      android:layout_alignParentBottom="true" 
      android:text="@string/poweredby"/> 

</RelativeLayout> 



<resources> 
<!--Splash-->mdpi 
<dimen name="s_mtop">10dp</dimen> 
<dimen name="s_mbot">2dp</dimen> 

<resources> 
<!--Splash-->hdpi 
<dimen name="s_mtop">15dp</dimen> 
<dimen name="s_mbot">3dp</dimen> 

<resources> 
<!--Splash-->xhdpi 
<dimen name="s_mtop">20dp</dimen> 
<dimen name="s_mbot">4dp</dimen> 

<resources> 
<!--Splash-->xxhdpi 
<dimen name="s_mtop">30dp</dimen> 
<dimen name="s_mbot">6dp</dimen> 

<resources> 
<!--Splash-->xxxhdpi 
<dimen name="s_mtop">40dp</dimen> 
<dimen name="s_mbot">8dp</dimen> 

+2

您是否考慮過爲不同屏幕尺寸創建資源?例如layout-sw300dp,layoutsw400dp,layout-sw600dp?佈局sw800dp?然後很容易看到600和800覆蓋平板電腦 – Eenvincible

+0

[Android可以高效地加載圖像]可能重複(http://stackoverflow.com/questions/32665582/android-load-images-from-drawable-efficiently) – YUVRAJ

+3

@murugalonger我不認爲這個問題涉及從drawables文件夾加載圖像;它是關於支持佈局中的所有屏幕尺寸/設備 – Eenvincible

回答

1

我怎樣才能給marginTop用於圖像view.I正在做的計算像 這樣的:在比 (1:1.5:2:3:4) - (MDPI:HDPI:xhdpi :xxhdpi:xxxhdpi) - (10dp-15dp-20dp-30DP-40dp)。 我的方法是正確的還是?

尺寸比(1:1.5:2:3:4) - (MDPI:HDPI:xhdpi:xxhdpi:xxxhdpi)是正確的,但它不適合尺寸單元DP /浸...它爲像素

DP:密度獨立像素 - 即基於屏幕的 物理密度的抽象單元。這些單位是相對於160 dpi (每英寸點數)屏幕,其中1dp大致等於1px。當在更高密度屏幕上運行 時,用於繪製1dp的像素數量將按適合屏幕dpi的倍數放大。 同樣,在較低密度的屏幕上,1dp使用的像素數量將縮小。

更多細節上different dimension unit refer doc

所以按您的例子中,讓marginTop = 10dp然後按比例(1:1。5:2:3:4) - (mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi) - (10px-15px-20px-30px-40px)
表示您也可以使用marginTop = 10px,但它仍然保持10px all..so更高的dpi爲marginTop看起來小,這種情況下..

對於利用DIP/DP超過PX can refer here

你SP類似與DP;但它是在字體大小的上下文中的原因是指尺寸單元DOC

You can also refer the converter here

的尺寸等應該dimens.xml(這是 值-MDPI給出,HDPI,xhdpi,xxhdpi ,xxxhdpi文件夾)支持所有屏幕。

即將到來的這個維度,你不應該做values-mdpi,hdpi ...等等。因爲如果你使用單位dp,那麼它與前面提到的屏幕密度無關。
如果使用單位像素,那麼你可以去價值觀MDPI,價值觀,HPDI ...等等,但是這同樣會成爲手工計算並收到騷擾值引起錯誤的可能性的開銷。

所以倒不如說dimesnion值只會在屏幕尺寸方面推遲不在屏幕密度而言。所以你的佈局或值的文件夾可以按照Android操作系統(API)版本,屏幕尺寸正常人一樣,大的或作爲鏈接1所提到的,鏈接2和意見通過Eenvicible

更新基於評論
如果您經過Supporting Different Screens那麼你會意識到
佈局,我們有文件夾結構佈局正常,佈局大,佈局大的土地......但這又可能會有所不同
在同一個鏈接,您可以看到繪製,mdpi..and等等。這裏我們使用的圖像通常不是密度獨立的,所以我們需要不同密度的相同圖像,並且我們將其相應地添加到文件夾
中,以得到我們具有像文件夾結構的值,如果您使用的值爲fr-Supporting Different Language
有意思的是values-mdpi,值-hpdi我已經在上面解釋過了。

請通過每一個環節properly..bcoz我指(中文)Visa DOC ONLY

+0

我已經通過了所有的鏈接,轉換器在這裏非常有用。但仍然困惑在這裏。只有這樣,我可以通過net.helpless清除我的疑惑。 –

+0

但是什麼讓你感到困惑......從你的問題我可以看出,你不知道dp和px之間的區別,所以我回答了 –

+0

我在dimens.xml中給出的值是錯誤的,那麼我我在這裏做錯了什麼?那麼最好的方法是什麼? –

0

你爲什麼不使用重佈局來代替。在圖像上方有一個空白視圖並按照您的要求進行加重,它會自動拉伸。你可以找到例子here

或者嘗試這樣的。根據您對空白布局的需求給空間賦予重量

 <?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
    > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:weightSum="1"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_green_dark" 
     android:layout_weight="0.2" 
     android:id="@+id/view1" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:src="@drawable/ic_register" 
     android:layout_weight="0.8" 
     /> 
    </LinearLayout> 
</RelativeLayout> 
+0

我已經使用相對佈局instead.pls chk我編輯的問題 –

+0

我已編輯檢查它 –

1

是的,您的dimens.xml文件中的值完全錯誤。請刪除所有不同的dimens.xml。不同的密度是當你與你的圖像編輯器編輯的實際圖像。

如果您希望在圖像周圍留有邊距,請使用帶有weightsrelative佈局的線性佈局,但不要使用dps。加權線性佈局或相對佈局更加靈活。

但是,如果您確實選擇了dps,我不建議您再次瞭解,您的dimens.xml中的一組度量就足夠了。

理想情況下,不要創建比您需要更多的xml佈局/維度變化。如果需要,可以調整這些參數,但在開始添加更多限定符之前,請確保解決實際問題。

+0

我想你有什麼我想嘗試在這裏說..謝謝。 –

+0

@stephen ...ü給了我完美的解決方案,但ShadowDroid給了我很好的解釋.. –

相關問題