JTate
JTate

Reputation: 327

Is it possible to dynamically set Android button text size in XML?

I'm working on an app and I have a series of buttons on the main menu that I want to all have the same text size. Is it possible for me to specify that in a properties file?

Here is my current XML file.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:orientation="horizontal"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">
    <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <Button
                android:id="@+id/sensors_available"
                android:text="@string/sensors_available"
                android:textSize="12sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    </TableRow>
    <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <Button
                android:id="@+id/b_start_hm"
                android:text="@string/hm_start_service"
                android:textSize="12sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        <Button
                android:id="@+id/b_stop_hm_service"
                android:text="@string/hm_stop_service"
                android:textSize="12sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    </TableRow>
    <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        <Button
                android:id="@+id/b_start_hot_video"
                android:text="@string/video_service_start"
                android:onClick="startHotVideoService"
                android:textSize="12sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        <Button
                android:id="@+id/b_hv_stop_service"
                android:text="@string/hv_stop_service"
                android:textSize="12sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    </TableRow>
</TableLayout>

Is it possible for me to replace all the 12sp with something like @string\custom_text_size and then define that in the string.xml file? When I tried this, I got a fatal exception when I started my app.

Upvotes: 0

Views: 1247

Answers (2)

ssantos
ssantos

Reputation: 16526

You were so close, but you need to define a dimen instead of a string

<dimen name="textSize12">12sp</dimen>

And your Button would look like this.-

<Button
    android:id="@+id/b_stop_hm_service"
    android:text="@string/hm_stop_service"
    android:textSize="@dimen/textSize12"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Ideally, dimen resources are defined in a separate resources file, such as dimens.xml

Upvotes: 2

Evan Bashir
Evan Bashir

Reputation: 5551

Create a style in res/values/styles.xml:

<style name="TextSize">
    <item name="android:textSize">12sp</item>
</style>

Declare it in your XML:

<Button
    android:id="@+id/b_start_hot_video"
    android:text="@string/video_service_start"
    android:onClick="startHotVideoService"
    style="@style/TextSize"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

By using styles, you can store multiple settings, like background drawables, textColor etc...

Upvotes: 0

Related Questions