ToggleButton的文本标签位置如何在开启和关闭状态下切换

6
有没有办法控制ToggleButton的开和关状态下文本的位置?例如,当打开时,我希望文本标签左对齐;当关闭时,我希望文本标签右对齐。
编辑: 而且,我想在文本左侧和右侧包含一些填充,大约5dp,并尽可能精细地控制标签位置。
答案: 这就是我需要的!
button.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
button.setPadding(0, 0, 5, 0);

你好。请问您能提供一下布局XML文件的部分内容,其中声明了切换按钮吗?谢谢。 - Paul
我已经尝试过这个,实际上我认为文本将被放置在绿线的右侧,但实际上它被放置在绿线上方的右侧。看起来将文本放置在绿线的右侧是不可能的 - 参考:http://stackoverflow.com/questions/11084956/tooglebutton-align-text-label-on-the-right - Paul
5个回答

7
  
public class StackActivity extends Activity implements OnCheckedChangeListener {

    private ToggleButton tb;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tb = (ToggleButton)findViewById(R.id.toggleButton1);
        tb.setOnCheckedChangeListener(this);

    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    {
        if(isChecked)
        {
            tb.setGravity(Gravity.LEFT);
            tb.setPadding(5,0,0,0);    // Set left padding 
        } else
        {
            tb.setGravity(Gravity.RIGHT);
            tb.setPadding(0,0,5,0);    // Set right padding
        }
    }
}

谢谢!有没有办法对文本的位置进行更细粒度的控制?比如LEFT但是有5dp的填充? - user123321
我已经添加了设置ToggleButton填充选项的功能。它真的很简单,只需要使用toggleButton.setPaddin(int left, int top, int right, int bottom)即可。如果您需要更多控制,可以考虑为ToggleButton设置LayoutParams。 - Entreco
好的,谢谢!我也刚刚想到了这个!你太棒了。谢谢,伙计! - user123321

2
ToggleButton b1 = (ToggleButton) findViewById(R.id.button1);
        if(b1.isChecked()){
            b1.setGravity(Gravity.RIGHT);
        }
        else{
            b1.setGravity(Gravity.LEFT);
        }

请注意,如果按钮不符合最小尺寸(必须比标签文本更大),您将看不到任何更改。

谢谢!有没有办法对文本的位置进行更精细的控制?比如说左侧留出5dp的填充? - user123321

1

1

这就是我需要的!

button.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
button.setPadding(0, 0, 5, 0);

1

通过在OnClickListener中添加以下代码,每当单击按钮时更改重力以更改对齐方式:

toggleButton.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) {
               if (((ToggleButton)v).isChecked())
                    toggleButton.setGravity(Gravity.LEFT);
               else
                   toggleButton.setGravity(Gravity.RIGHT);
            }
        });

谢谢!有没有办法对文本的位置进行更细粒度的控制呢?比如LEFT但是有5dp的填充? - user123321
我不知道有什么简单好用的方法来更精细地控制位置。但是我知道一个丑陋的解决方案,就是在左对齐文本开头添加一个空格,然后在右对齐文本结尾再添加一个空格。像这样 " On" 和 "Off "。 - HenrikS
是的,我也在考虑那个,但是我还需要在顶部添加填充!看起来切换按钮不允许进行太多自定义。 - user123321

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接