2014-07-15 11 views
5

Ich bin ein Client-Seite Entwickler, der kürzlich in ein Android-Projekt eintrat.Kann ich mathematische Operationen an Dimens und Variablen durchführen?

In der clientseitigen Welt haben wir Frameworks wie SASS, die uns mathematische Operationen mit Variablen ermöglichen.

In Android-Stile Ressourcen haben wir Variablen und Dimensionen. Meine Frage ist, ob das auch in Android möglich ist.

Zum Beispiel:

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

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

definiere ich eine Basisschriftgröße Einheit und spielt zusammen mit ihm die ganze App.

Wenn es nicht möglich ist, ist die beste Praxis, um es mit der Android Way zu erreichen.

+0

Ich denke, nein, aber Sie könnten ein Dimen dynamisch z. Textgröße in einem TextView. –

+0

Was meinst du Marcelo? Können Sie es in einer Antwort näher ausführen? – neoswf

+0

Was genau ist Ihr Endziel beim Testen der Schriftgrößen? Testen Sie für mehrere Bildschirme? –

Antwort

2

Sie könnten einen Hauptcontroller erstellen, der alle Ihre Skalierungsgruppen verwaltet.

Zum Beispiel haben Sie ein Layout:

<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> 

Und Sie wollen Skala die Textgröße android:textSize="16sp" durch eine Skala in dimens.xml.

Erstellen Sie Ihre Waage Rate in einem dimens.xml:

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

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

</resources> 

Und nach dem Erstellen Sie Haupt-Controller wie folgt aus:

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)); 
    } 
} 

So verwenden Sie wie folgt aus:

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); 
    } 
} 

Jetzt Sie können viele Dimensionen der Maßstabsrate für viele Bildschirmgrößen erstellen. Was du zum ersten Mal machst, mach math calc in XML-Datei, wird nicht funktionieren. Aber auf diese Art und Weise denke ich, dass du am besten ankommst.

+1

Vielen Dank für Ihre Antwort @Marcelo, aber ich wollte einen Weg finden, es nur in XML zu tun. Wie ich in einem der Kommentare im OP gesagt habe, möchte ich ein skalierbares und stabiles Stilsystem schaffen. Das kann ich einfach in der Style-Datei ändern, und es wird für zukünftige Änderungen leicht zugänglich sein. In Klassen zu tun bricht die Einfachheit und Skalierbarkeit, die ich erreichen möchte. '' 'Sorry''' Ich habe dich dazu gebracht, mir eine solche investierte Antwort zu schreiben. Ich habe nicht verstanden, was du in deinem Kommentar gemeint hast. – neoswf

+0

Was Sie tun könnten Ich habe einen Haupt-Controller erstellt, den Sie verwenden, um Dimens zu erhalten, können Sie dimens von Stilen und Maßstabsrate halten und Ihren Hauptcontroller verwenden, um es zu verwalten. Ich werde meine Antwort aktualisieren, um herauszufinden, was ich gesagt habe. –

+1

@neoswf überprüfe meine Antwort jetzt, ich schätze, ich helfe dir. –