【问题标题】:Can I perform math operations on dimens & variables?我可以对维度和变量执行数学运算吗?
【发布时间】:2014-07-15 13:39:22
【问题描述】:

我是一名客户端开发人员,最近进入了一个 android 项目。

在客户端世界中,我们有像 SASS 这样的框架,可以让我们对变量进行数学运算。

在 Android 样式资源中,我们得到了变量和维度。我的问题是它是否也可以在 Android 中实现。

例如:

dimens.xml
<dimen name="baseFontSize">18sp</dimen>

styles.xml
<style name="heading1">
    <item name="android:textSize"> @dimen/baseFontSize * 2.5 </item>
    ...
</style>

我定义了一个基本字体大小单位,并在整个应用程序中使用它。

如果不可能,使用 Android 方式 实现它的最佳做法是什么。

【问题讨论】:

  • 我猜不是,但你可以动态设置一个维度,例如TextView 中的文本大小。
  • 你是什么意思马塞洛?您能在答案中详细说明吗?
  • 您在测试这样的字体大小时的最终目标是什么?您是否在测试多个屏幕?
  • @AndrewSchuster 没有。就像在CSS 中一样,我想创建一个可扩展的样式定义,一旦我在集中式文档中更改一个 fontSize 值(fontSize 只是一个例子。它可以是任何东西),它会影响我所有的应用程序,而且我不必在未来的修改中对很多地方进行更正,这些修改可能来自设计师或主题改编。
  • 此外,在 fontSize 的情况下,当您获得基本字体大小时,您可以创建一个非常稳定的排版系统。例如。 - 所有标题、所有段落、所有标签 - 一切都将基于一个变量。

标签: android android-styles dimension


【解决方案1】:

您可以创建一个主控制器来处理所有规模集。

例如,您有一个布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textSize="16sp" />

</RelativeLayout>

并且您想通过dimens.xml 中的比例缩放文本大小android:textSize="16sp"

dimens.xml 中创建您的缩放比例:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <item name="scaleRate" format="float" type="dimen">2.5</item>

</resources>

在你创建你的主控制器之后:

package com.example.stackoverflowsandbox;

import android.content.Context;
import android.widget.TextView;

public class MyScaleController {

    public static void applyTextSizeScale( final Context context, final TextView myTextView ) {
        final float currentTextSize = myTextView.getTextSize();

        myTextView.setTextSize( currentTextSize * context.getResources().getDimension( R.dimen.scaleRate ) );
    }
}

所以你这样使用:

package com.example.stackoverflowsandbox;

import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity {
    @Override
    protected void onCreate( final android.os.Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );

        this.setContentView( R.layout.activity_main );

        final TextView myTextView = ( TextView ) this.findViewById( R.id.my_text_view );

        MyScaleController.applyTextSizeScale( this, myTextView );
    }
}

现在您可以针对多种屏幕尺寸创建多种缩放比例维度。你第一次想要的,在 XML 文件中进行数学计算,不会起作用。但是这样我猜你有最好的方法。

【讨论】:

  • 感谢您的回答@Marcelo,但我希望找到一种仅在 XML 中执行此操作的方法。正如我在 OP 中的一个 cmets 中所说,我希望创建一个可扩展且稳定的样式系统。我可以简单地在样式文件中进行更改,并且可以轻松访问它以供将来修改。在 Classes 中这样做会破坏我希望实现的简单性和可扩展性。 Sorry我让你给我写了一个如此投入的答案。我不明白你在评论中的意思。
  • 你能做的我做的是创建一个主控制器,你可以用它来获取尺寸,你可以保留样式和缩放率的尺寸,并使用你的主控制器来管理它。我会更新我的答案以弄清楚我说了什么。
  • @neoswf 现在检查我的答案,我想对你有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 2015-08-15
  • 2013-10-25
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多