【问题标题】:Android - Alias for dimens.xml file?Android - dimens.xml 文件的别名?
【发布时间】:2014-03-12 15:54:58
【问题描述】:

我正在尝试让我的 android 应用程序支持多种屏幕尺寸。我试图通过使用不同的 dimens.xml 文件更改布局的 dp 值来将我的替代布局保持在最低限度。

糟糕的部分是我有 9 个不同的文件夹,其中包含尺寸文件(values、values-sw320dp、values-sw480dp、values-sw600dp 和 values-sw720dp 用于更高的 api、values-small、values-normal、values-大,旧 api 的 values-xlarge),我讨厌一遍又一遍地从我的 sw 值文件夹复制粘贴到旧值文件夹。

我知道如何创建layout.xml 文件别名like this shows,但是有谁知道您是否可以为dimens 文件这样做?我尝试在我的 values.xml 中创建多个尺寸文件,但当然它不起作用,因为我的两个尺寸文件具有相同名称的属性,这会导致冲突。

我可以在values-sw600dp dimens-large.xml 中命名我的dimens 文件并在values-large 文件夹中引用它吗?

【问题讨论】:

  • 这是我没有尝试过的,但大多数编译器和 IDE 都有配置一些自定义构建步骤的地方。也许您可以创建一个复制文件的小脚本,然后将此脚本添加为构建步骤。每次构建项目时都会执行您的脚本。

标签: android xml android-layout


【解决方案1】:

您可以动态更改布局组件的大小。 在这里,我根据 480*854 大小的屏幕创建第一个 xml 布局。下面的代码会根据屏幕大小自动适配 UI。

int width = 0;
int height = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);

    getTheDisplay();
    getUiComponents();
    adjustUIComponents();

}private void getTheDisplay() {

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    width = dm.widthPixels;
    height = dm.heightPixels;

}private void adjustUIComponents() {
    // myButton is button from layout xml file
    adjustUI(myButton);

}private void adjustUI(View v) {
    //myButton is in LinearLayout
       LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams)v.getLayoutParams();
    lp.width = calculateWidth(211);//211 is width of button in px given in xml
    lp.height = calculateHeight(80);//80 is height of button in px given in xml

    v.setLayoutParams(lp);
}private int calculateWidth(int w) {
    int wi = (w * width) / 480;
    return wi;
}

private int calculateHeight(int h) {
    int hi = (h * height) / 854;
return hi;
}

【讨论】:

  • +1 表示努力,但我不认为这被认为是最佳实践,而且它仍然相当复杂,同时减少了我对细粒度控制的选择。
【解决方案2】:

我最终使用了 Merlevede 的建议,并在 eclipse 的构建路径中添加了一个脚本。

具体选择android项目,进入Project --> Properties --> Builders --> New

创建一个“程序”构建器,然后选择一个可以在您的文件系统上本地执行的文件。就个人而言,我编写了一个 3 行的 java 应用程序,将其 jarred,然后编写了一个只调用 java jar 的批处理文件。批处理文件是我为构建器指定的可执行文件。

然后我将该构建器放在构建列表的顶部,瞧,我的文件正在被自动复制!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多