Reputation: 1195
i want to create a android default ToggleButton
like this:
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
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
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
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
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
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
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
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
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
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 extend
ing 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