2013-08-02 13 views
0

我剛剛拿到了新的Nexus 7,它從drawable-xhdpi文件夾中提取圖像,因爲它是1920x1200。 Nexus 10也從drawable-xhdpi文件夾中提取。 Nexus 7上的圖像看起來太大了(結果確實太大了150%)。有什麼方法可以指定資源文件夾(可繪製)用於特定設備?您能指定Android設備使用哪個資源文件夾嗎?

這聽起來像我不應該試圖超越默認的可繪製桶,因爲有這麼多的屏幕尺寸,它可以阻止我,當我試圖支持更多的設備。那麼處理這個問題的最好方法是什麼?下面的圖片完全說明了我的問題。播放按鈕從Nexus 10縮小到新的Nexus 7,而有鬍子的人則被放大,以便它們在兩個設備上保持相同的物理尺寸。我的圖片目前正在做大鬍子形象正在做的事情,但我希望它能夠做到新Nexus 7上縮放的播放/連接按鈕所做的事。 (上圖=新Nexus 7 bottom image = Nexus 10 )

New Nexus 7

Nexus 10

+1

你不能。但檢查你的佈局,圖像出現的大小並不僅僅是因爲它們來自xhdpi或mdpi。 – zapl

+1

同樣,即使你可以,這將是錯誤的選擇,想想有多少設備...... –

+0

是的,我知道Android做了一些縮放,這是什麼讓我覺得我搞砸了。相同的圖像在新的Nexus 7上放大,因此它的物理尺寸與Nexus 10的尺寸相匹配,而不是我想要的尺寸。 – TejAces

回答

0

你不能設置一個文件夾繪製爲特定的設備,而且它也是不切實際的,因爲有太多的設備在那裏(見here爲例)。

但是,如果您對android選擇每個設備配置使用哪個文件的桶的方式感到不滿,您可以使用自己的算法。在這種情況下,有2個選項可放置文件的位置:

  1. 將圖像文件放在res/drawable-nodpi(或res/raw)中。爲每個圖像添加一個後綴/前綴以顯示其用於的配置。

  2. 將圖像文件放在資產中。這是一個更靈活的方法,因爲你甚至可以創建子文件夾和你想要的任何文件名。

在這兩種方法中,您還應該使用自己的圖像採樣方法,具體取決於您自己的規則。

+0

謝謝,但這種方法不允許我在圖形界面或xml中佈局圖像,因爲我必須在代碼中分配源代碼。 – TejAces

+0

我不明白。你對Android如何讓你的形象感到不滿,所以你總是可以制定自己的規則,而且我已經爲你提供了兩種實現它的方法。當然,既然你制定了自己的規則,你必須決定如何縮放圖像。 –

+0

此外 - 並非所有的圖像都可以很好地縮放,儘管我想我可以使用9切片的方法來幫助正確縮放它們。 – TejAces

0

您可以使用下面的代碼來獲取大小,然後將圖像擴展到基於顯示器的尺寸所需要的尺寸。

Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 
    int height = display.getHeight(); 

    DisplayMetrics metrics = new DisplayMetrics();  
    getWindowManager().getDefaultDisplay().getMetrics(metrics);  
    int screenDensity = metrics.densityDpi; 
+0

我想避免在代碼中執行此操作,因爲使用圖形xml界面是更好的佈局方法。 – TejAces

+0

很好,但這意味着要創建和維護各種圖像的多個副本,這不一定是一個好的解決方案。 – IanB

+0

我認爲同一圖像的多個副本(縮放比例不同)是大多數應用程序的作用。爲什麼他們會爲每個屏幕密度類別提供多個可繪製目錄? – TejAces

2

爲了繼續使用可繪製資源文件夾,我不得不做以下區分的Nexus 7 2013和Nexus 10,因爲它們都將使用xhdpi文件夾默認爲:

在Nexus 7我最終使用:可繪製-sw600dp-xhdpi

爲Nexus 10我最終使用:可繪製-sw720dp-xhdpi

我有2臺資產的每個文件夾中不同的縮放。

相關問題