按钮drawableBottom Nexus 7和Galaxy Tab 2

时间:2013-04-05 18:02:37

标签: android android-drawable

我正在为Galaxy Tab 2(10“.1)屏幕尺寸编写的应用程序改编为Nexus 7(7”)。 根据stackoverflow中的建议,我为所有密度(l|m|h|xh)dpi和特定layout-sw600dp文件夹创建了不同的图像大小,其中包含我为7英寸屏幕修改的布局。

[编辑]

我补充说 <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" /> 到我的Androidmanifest文件。

[/编辑]

尽管进行了所有这些修改,我仍然在努力让drawableBottom(以及顶部,左侧,右侧)Buttons在两个设备之间正确缩放。

渲染图像的物理尺寸相同。因此,Nexus正在制作与Galaxy一样大的图标(或反之亦然)。

根据我的理解,这两个设备虽然具有不同的物理尺寸,但它们共享相同的像素密度(xhdpi),这使得Nexus从xhdpi文件夹中获取。 我错过了一些重要的事情吗?

我应该如何调整drawableBottoms?

2 个答案:

答案 0 :(得分:0)

您确定该应用是专为高密度显示屏设计的吗?尝试在权限后将其添加到您的清单中:

<supports-screens android:largeScreens="true"
                  android:normalScreens="true"
                  android:smallScreens="true"
                  android:anyDensity="true"/>

答案 1 :(得分:0)

行。

可能这不是“解决方案”,因为它应该是。但它直接对我有用,并且最小努力考虑了我必须适应的应用程序的大小。

以下解决方案基本上可以很好地工作,但(可能)仅适用于此特定情况,因为Galaxy Tab 2和Nexus 7共享相同的分辨率。

我如何修复它几乎没有工作:

  1. 除非您要在许多其他设备上安装(或已安装)您的应用,否则不要创建较小分辨率的图像(您根本不需要它)。
  2. 创建两个值 - 文件夹。一个用于Galaxy Tab 2(= xlarge),另一个用于Nexus 7(=大)。修饰符是屏幕的大小。
  3. 在每个文件夹中放置一个dimen.xml文件,您将分别填写该文件。
  4. 对于Galaxy Tab 2:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    [...]
    <dimen name="s25sp">25sp</dimen>
    <dimen name="s30sp">30sp</dimen>
    <dimen name="s35sp">35sp</dimen>
    [...]
    <dimen name="s25dp">25dp</dimen>
    <dimen name="s30dp">30dp</dimen>
    <dimen name="s35dp">35dp</dimen>
    [...]
    </resources>
    

    对于Nexus 7:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    [...]
    <dimen name="s25sp">17sp</dimen>
    <dimen name="s30sp">21sp</dimen>
    <dimen name="s35sp">24sp</dimen>
    [...]
    <dimen name="s25dp">17dp</dimen>
    <dimen name="s30dp">21dp</dimen>
    <dimen name="s35dp">24dp</dimen>
    [...]
    </resources>
    

    获得Nexus 7的每个值,如:Galaxy_value / 10.1 * 7

    1. 之后,只要您想使用该特定尺寸,就必须使用@dimen/s[0-9]*dp
    2. PS: 如果您的大型应用程序已经格式化了许多布局,您可以使用此PERL脚本将每个[0-9] * dp和[0-9] * sp转换为@dimen/s[0-9]*dp @dimen/s[0-9]*sp自动。 这是:

         #!/usr/bin/perl
      
         $filename = $ARGV[0];
         open (FILE, $filename);
      
         while (<FILE>) {
            chomp;
      
            if ( $_ =~ /\"[0-9]*(di?p|sp)\"/) {
      
               my $pre = $`;
               my $mat = $&;
               my $pos = $';
      
               $mat =~ s/["]+//g;
      
               print "$pre\"\@dimen/s$mat\"$pos\n";
            }  elsif ( ($_ !~ /\"[0-9]*dp\"/) && ($_ !~ /\"[0-9]*sp\"/) ) {      
               print "$_\n";
            }
         }
      
         close (FILE);
         exit;