Pableras84
Pableras84

Reputation: 1195

It is possible to create a ToggleButton without text?

i want to create a android default ToggleButton like this: enter image description here

but i want to create it without TEXT

I tryed with this code:

ToggleButton tb = new ToggleButton(map);
tb.setText(null);
tb.setTextOn(null);
tb.setTextOff(null);

But it is leaving a empty space in the top of the horizontal green bar.

I dont want that empty space, i only want the horizontal green bar.

How to achieve it?

thanks

Upvotes: 20

Views: 25524

Answers (10)

Ramandeep Singh
Ramandeep Singh

Reputation: 558

Layout File.xml

       <ToggleButton
    android:id="@+id/toggle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:background="@drawable/check"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

In main activity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ToggleButton mic = (ToggleButton)findViewById(R.id.toggle);
    mic.setTextOff(null);
    mic.setTextOn(null);
    mic.setText(null);

check.xml which is used by layout.xml

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

    <item android:drawable="@drawable/mic_on"
        android:state_checked="true">

    </item>
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/mic_off"
        android:state_checked="false">

    </item>

These lines are those what you are looking for

    mic.setTextOff(null);
    mic.setTextOn(null);
    mic.setText(null);

Upvotes: 0

Marc Sauvageau
Marc Sauvageau

Reputation: 11

Fill style XML like this.. the magic is text color as transparent...

android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textOff="blabla"
android:textOn="blablabla"
android:textColor="@android:color/transparent"
android:background="@drawable/boutmediumrouge"

/>

Upvotes: 1

Sanjay Goswami
Sanjay Goswami

Reputation: 191

<ToggleButton
        android:id="@+id/tooglebutton"
        android:layout_width="60dp"
        android:layout_height="25dp"
        android:textOff="off"
        android:textOn="on"
        android:textSize="0dp"
       />

Upvotes: 0

PJ_Finnegan
PJ_Finnegan

Reputation: 2181

It's much more hassle-free to use a CheckBox instead of the ToggleButton. They have the same states and thus achieve the same functionality, but you can easily change the CheckBox appearence by defining its <android:button="@drawable/..."> attribute.

Upvotes: 0

Tad
Tad

Reputation: 4784

Using

<ToggleButton
    ...
    android:textOff="@null"
    android:textOn="@null"
    android:textSize="0dp" />

will not only make the text go away, but also get rid of the empty space where it would otherwise be shown.

Upvotes: 13

I thought so

android:textColor="@android:color/transparent"

Upvotes: 1

Fakhar Iqbal
Fakhar Iqbal

Reputation: 4069

 <ToggleButton
                android:id="@+id/setting_tb"
                style="@style/style_setting_tb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:checked="true"
                android:gravity="center"
                android:minHeight="0dp"
                android:minWidth="0dp"
                android:textColor="@color/White"
                android:textOff=""
                android:textOn=""
                android:textSize="14sp" />

Upvotes: 0

SteveR
SteveR

Reputation: 2506

The empty space in the top is caused by the 2 Ninepatch (btn_toggle_off.9.png and btn_toggle_on.9.png ) used in default toggleButton style.

To perfectly center the horizontal bar, you must create a new style for ToggleButton that will use two new ninepatch derived form original.

Edit: Method requiring minimal XML:

  • create your two ninepatches for your togglebutton, name it: my_btn_toggle_on and my_btn_toggle_off

  • in drawable folder, create my_btn_toggle.xml:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="false" android:drawable="@drawable/my_btn_toggle_off" />
        <item android:state_checked="true" android:drawable="@drawable/my_btn_toggle_on" />
    </selector>
    
  • in your code, add tb.setBackgroundResource(R.drawable.my_btn_toggle) :

    ToggleButton tb = new ToggleButton(map);
    tb.setText(null);
    tb.setTextOn(null);
    tb.setTextOff(null);
    tb.setBackgroundResource(R.drawable.my_btn_toggle)
    

Upvotes: 27

RRTW
RRTW

Reputation: 3190

Just set following things:

<ToggleButton android:id="@+id/tbtn1" 
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@drawable/bg_check"
 android:textOn="" 
 android:textOff="" 
 android:text="" />

And, the style xml, if you need...

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_checked="true" 
android:drawable="@drawable/bg_check_on" /> <!-- pressed -->

  <item android:drawable="@drawable/bg_check_off" /> <!-- default/unchecked -->
</selector>

Hope it helps~

Upvotes: 20

Salil Pandit
Salil Pandit

Reputation: 1498

Not the most elegant solution but you could try tb.setTextSize(0); if you're just trying to hide the extra space on top. May need to set the textOn/textOff to an empty string: tb.setTextOn("");

EDIT: I better option would be to create your own custom button by extending Button, hold the state (see this SO post for pressed/unpressed states: Pressed android button state) and find the assets to set as the appropriate state...

Upvotes: 0

Related Questions