Search code examples
javaandroid-layouttextviewandroid

How to use two different font sizes for button text in Android?


How could I implement a button background for ImageButton or Button which contains 2 textview each using different font sizes ? I can't use static images as background and I need to achieve this either using XML or programmatically.

This is a numeric keypad and it carries a numeric value and a set of alphabets each of which uses different font sizes and needs to be set as button text.

enter image description here

Here are some of the suggestions that pop-up on my brain but this seems to have limitations since I want to reuse the UI component and avoid code repetition.

  1. Create a layout XML containing 2 textfields and set that as background on the button. But how can I get a reference of these textview fields to set the value on them in the MyActivity.java?

  2. Use a layeredlist? Still same problem reference of textviews

  3. Or create a custom view and inflate layout mentioned in step 1. This solution resolves my problem.

Does any other solution exist for this UI requirement?


Solution

  • Hopefully this will help. This off course is not the only solution but it is a pretty simple one. Add the xml part in your xml instead of the button.

    XML

    <LinearLayout
        android:id="@+id/button_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" 
            android:text="5"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp" 
            android:text="ABC"/>
    
    </LinearLayout>
    

    Code

    LinearLayout button= (LinearLayout)findViewById(R.id.button_layout);
    button.setOnClickListener(new OnClickListener() {
        
        @Override
        public void onClick(View v) {
            // TODO DO whatever you want to do here
            
        }
    });