It is possible to create a ToggleButton without text?
Asked Answered
S

10

20

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

Spatterdash answered 22/7, 2012 at 22:23 Comment(0)
V
27

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)
    
Vincentvincenta answered 22/7, 2012 at 23:33 Comment(2)
can you explain how to create that style and how to add it?? all with java code, Pableras is not using XML for designing the tooglebuttonDurkheim
I don't think it is possible to achieve without XML. (Pableras doesn't explicitly say he wants in java code only). I edited my answer with a method requiring minimal xml (perhaps useful).Vincentvincenta
T
20

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~

Tristatristam answered 12/11, 2012 at 6:32 Comment(0)
M
13

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.

Misapprehension answered 30/4, 2015 at 15:52 Comment(2)
Correct answer, and not is needed android:textSize="0dp"Coblenz
Perfect answer. Thank you!Territus
S
1

I thought so

android:textColor="@android:color/transparent"
Sensorium answered 25/2, 2015 at 21:35 Comment(0)
I
1

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"

/>
Interpreter answered 10/12, 2017 at 2:10 Comment(1)
add some description to your answer on, how this would work.Lorie
G
0

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

Georgie answered 22/7, 2012 at 22:47 Comment(0)
Z
0
 <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" />
Zurkow answered 11/11, 2014 at 13:59 Comment(0)
E
0

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.

Equi answered 22/2, 2017 at 12:28 Comment(0)
C
0
<ToggleButton
        android:id="@+id/tooglebutton"
        android:layout_width="60dp"
        android:layout_height="25dp"
        android:textOff="off"
        android:textOn="on"
        android:textSize="0dp"
       />
Cloe answered 4/5, 2017 at 11:35 Comment(2)
Include some explanation, please.Browder
While this code snippet may solve the question, including an explanation really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion.Basle
E
0

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);
Expeditious answered 11/9, 2019 at 9:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.