代码之家  ›  专栏  ›  技术社区  ›  2dvisio

按钮可抽拉底部Nexus 7和Galaxy Tab 2

  •  0
  • 2dvisio  · 技术社区  · 13 年前

    我正在将为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 文件

    [/EDIT](编辑)

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

    渲染图像的物理大小是相同的。因此,天枢正在制造与银河一样大的图标(反之亦然)。

    据我所知,这两个设备虽然物理尺寸不同,但它们共享相同的像素密度(xhdpi),这使得Nexus可以从xhdpi文件夹中拾取。 我是不是错过了什么重要的东西?

    我应该如何调整我的可抽底部?

    2 回复  |  直到 13 年前
        1
  •  0
  •   Sky Kelsey    13 年前

    你确定这个应用程序是为高密度显示器设计的吗?尝试在获得权限后将其添加到您的清单中:

    <supports-screens android:largeScreens="true"
                      android:normalScreens="true"
                      android:smallScreens="true"
                      android:anyDensity="true"/>
    
        2
  •  0
  •   2dvisio    13 年前

    好啊

    也许这不是应该的“解决方案”。但它很快就对我起到了作用 最低限度 努力考虑了我必须适应的应用程序的大小。

    以下解决方案基本上运行得很好,但(可能)仅适用于这种特定情况,因为Galaxy Tab 2和Nexus 7具有相同的分辨率。

    我是如何在几乎没有工作的情况下修复它的:

    1. 除非你打算在许多其他设备上安装(或已经安装)你的应用程序,否则不要创建分辨率较小的图像(你并不真的需要它)。
    2. 创建两个值-文件夹。一个用于Galaxy Tab 2(=超大),另一个用于Nexus 7(=大)。修改器是屏幕的大小。
    3. 在每个文件夹中放置一个 dimen.xml 您将分别填写的文件。

    对于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 只要你想使用那个特定的维度。

    附言: 如果你有一个已经格式化了许多布局的大型应用程序,你可以使用这个 PERL 用于将每个[0-9]*dp和[0-9]*sp转换为 @二聚体/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;