Switch problem - only one parameter is displayed

I want to use the switch in an android application. I tried, but the main problem is

  • If I select ON, it will not display the text.
  • If I selected OFF, it will not appear in the text.

The text is not displayed, but we can select OFF by clicking the black area of ​​the switch.

code

<Switch android:id="@+id/mySwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="48dp" android:layout_marginTop="26dp" android:height="50dp" android:text="ON OFF" android:textSize="20sp" android:switchMinWidth="50sp" android:switchPadding="50sp"/> 

On state

enter image description here

Shutdown status

enter image description here

How can I display both texts at the same time? Can I change the switch text for the ON / OFF state?

Any help would be greatly appreciated.

Thanks in advance.

+6
source share
3 answers

Follow this link. This is a good library, you can go through the code and learn how to do it yourself or use the library as it is.

+4
source

Here is my solution that creates a custom widget that mimics a Switch control. I use Xamarin, but this code can be easily translated into Java.

SwitchImageView.cs:

 public class SwitchImageView : RelativeLayout { private View view; private bool isChecked; private int imageResourceIdOn = Resource.Drawable.switch_on; private int imageResourceIdOff = Resource.Drawable.switch_off; public SwitchImageView(Context context): base(context) { Init (); } public SwitchImageView(Context context, IAttributeSet attrs) : base(context, attrs) { Init (); } public SwitchImageView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle) { Init (); } private void Init () { var layoutInflater = (LayoutInflater)ApplicationContext.Activity.GetSystemService (Context.LayoutInflaterService); layoutInflater.Inflate (RPR.Mobile.Resource.Layout.SwitchImageView, this, true); this.Click += (object sender, EventArgs e) => { Checked = !Checked; }; } public int ImageResourceIdOn { get { return imageResourceIdOn; } set { imageResourceIdOn = value; if (isChecked) { this.SetBackgroundResource (value); } } } public int ImageResourceIdOff { get { return imageResourceIdOff; } set { imageResourceIdOff = value; if (!isChecked) { this.SetBackgroundResource (value); } } } public string TextOn { get { return this.FindViewById <TextView> (Resource.Id.switch_on_text).Text; } set { this.FindViewById <TextView> (Resource.Id.switch_on_text).Text = value; } } public string TextOff { get { return this.FindViewById <TextView> (Resource.Id.switch_off_text).Text; } set { this.FindViewById <TextView> (Resource.Id.switch_off_text).Text = value; } } public bool Checked { get { return isChecked; } set { isChecked = value; this.SetBackgroundResource (value ? ImageResourceIdOn : ImageResourceIdOff); this.FindViewById <TextView> (Resource.Id.switch_on_text).SetTextColor (value ? Color.White : Color.Black); this.FindViewById <TextView> (Resource.Id.switch_off_text).SetTextColor (value ? Color.Black : Color.White); if (CheckedChange != null) { CheckedChange (this, value); } } } public event EventHandler<bool> CheckedChange; } 

SwitchImageView.axml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/switch_container" android:layout_width="match_parent" android:layout_height="wrap_content"> <View android:id="@+id/strut" android:layout_width="0dp" android:layout_height="0dp" android:visibility="invisible" android:layout_centerInParent="true" /> <TextView android:id="@+id/switch_off_text" android:layout_width="wrap_content" android:layout_height="match_parent" android:textColor="@color/black" android:text="On" android:textAppearance="?android:attr/textAppearanceSmall" android:paddingLeft="10dp" android:paddingTop="3dp" /> <TextView android:id="@+id/switch_on_text" android:layout_toRightOf="@+id/strut" android:layout_width="wrap_content" android:layout_height="match_parent" android:textColor="@color/white" android:text="Off" android:textAppearance="?android:attr/textAppearanceSmall" android:paddingRight="5dp" android:paddingLeft="10dp" android:paddingTop="3dp" /> </RelativeLayout> 
0
source

There is one made by two standard buttons and LinearLayout. There are many xml files to import, but it works great on all versions and is very easy to use. Check out the next github page

Preview

2-button custom switch

Using

  • Copy the XML files under res / drawable to the res / drawable folder of the project.
  • Copy LinearLayout from layout.xml to the layout file.
  • Copy values ​​from /colors.xml values ​​and values ​​/ sizes to your own files.
  • Initialize the switch using the following code

SekizbitSwitch mySwitch = new SekizbitSwitch(findViewById(R.id.sekizbit_switch)); mySwitch.setOnChangeListener(new SekizbitSwitch.OnSelectedChangeListener() { @Override public void OnSelectedChange(SekizbitSwitch sender) { if(sender.getCheckedIndex() ==0 ) { System.out.println("Left Button Selected"); } else if(sender.getCheckedIndex() ==1 ) { System.out.println("Right Button Selected"); } } });

0
source

Source: https://habr.com/ru/post/955897/


All Articles