2
  1. 新建 -> 用于测试问题的 Android 项目
  2. Test.java的代码:

    包test.density.yeah;

    import android.app.Activity;
    import android.os.Bundle;
    
    public class TestActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    }
    
  3. main.xml的代码:

    <ImageButton
    android:background="@null"
    android:src="@drawable/icon"
    android:layout_width="200dp"
    android:layout_height="200dp">
    </ImageButton>
    
  4. 使用设置启动模拟器:

分辨率 - 480x800

Avstracted LCD 密度 - 190

结果

http://cs5961.userapi.com/u68152416/-3/y_ef134df2.jpg

之后,我使用以下设置启动了模拟器:

分辨率 - 480x800

Avstracted LCD 密度 - 240

结果

http://cs5961.userapi.com/u68152416/-3/y_8b99507b.jpg

第一个测试的模拟器设置计算了我的 HTC HD2 特性,第二个测试与 HTC Sensation XL 相同。在它们上运行此测试应用程序时,这是同样的问题。HD2 (480x800, 190dpi) - 小图像感觉 (480x800, 240dpi) - 大图像

那么为什么“密度无关像素”不起作用呢?

4

2 回答 2

4

它工作得很好,但是你需要知道一个转折点。

您正在视图上使用 src 属性。如果这样做,视图将根据位图大小调整大小,并且您通常会为各种密度、mdpi、hdpi、xhdpi 等提供不同的版本。它将忽略 layout_height 和 layout_width。

如果您希望您的视图忽略位图大小并使用 layout_width 和 layout_height 值来强制大小,则需要使用背景属性,而不是 src。

<ImageButton
    android:background="@drawable/icon"
    android:layout_width="200dp"
    android:layout_height="200dp">
</ImageButton>
于 2012-04-09T15:33:01.940 回答
1

可能是图像缩放使您的结果出错,您可以在此处阅读有关图像缩放的更多信息:

http://thebigbyte.blogspot.com/2009/12/android-how-to-scale-image-in-imageview.html

您可以通过将 ImageButton xml 更改为来测试结果

<ImageButton
android:background="#ffffff"
android:layout_width="200dp"
android:layout_height="200dp">
</ImageButton>
于 2012-04-09T15:26:02.867 回答