我是最近进入Android项目的客户端开发人员。
在客户端世界中,我们获得了像SASS这样的框架,让我们可以对变量进行数学运算。
在Android样式资源中,我们获得了Variables和Dimensions。我的问题是,它是否有可能在Android中实现这一点。
例如:
dimens.xml
<dimen name="baseFontSize">18sp</dimen>
styles.xml
<style name="heading1">
<item name="android:textSize"> @dimen/baseFontSize * 2.5 </item>
...
</style>
我定义了一个基本字体大小单位,并在所有应用程序中播放它。
如果不可能,最好使用 Android Way 来实现它。
答案 0 :(得分:2)
您可以创建一个主控制器来处理所有比例集。
例如,您有一个布局:
<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>
您希望按android:textSize="16sp"
中的比例缩放文字大小dimens.xml
。
在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文件中制作数学计算,不会起作用。但是我觉得你有最好的方法。