【问题标题】:It is possible to create a ToggleButton without text?可以创建没有文本的 ToggleButton 吗?
【发布时间】:2012-07-21 05:07:15
【问题描述】:

我想像这样创建一个android默认ToggleButton

但我想在没有 TEXT 的情况下创建它

我尝试了这段代码:

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

但它在绿色水平条的顶部留下了一个空白区域。

我不想要那个空白空间,我只想要水平绿色条。

如何实现?

谢谢

【问题讨论】:

    标签: android android-layout button togglebutton


    【解决方案1】:

    顶部的空白是由默认的 toggleButton 样式中使用的 2 Ninepatch(btn_toggle_off.9.pngbtn_toggle_on.9.png)引起的。

    要使水平条完美居中,您必须为 ToggleButton 创建一个新样式,该样式将使用两个新的 Ninepatch 派生形式 original。

    编辑: 需要最少 XML 的方法:

    • 为切换按钮创建两个九个补丁,命名为:my_btn_toggle_on 和 my_btn_toggle_off

    • 在drawable文件夹中,创建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>
      
    • 在您的代码中,添加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)
      

    【讨论】:

    • 您能解释一下如何创建该样式以及如何添加它吗?全部使用 java 代码,Pableras 没有使用 XML 来设计工具按钮
    • 我认为没有 XML 是不可能实现的。 (Pableras 没有明确说他只想要 java 代码)。我用需要最少 xml 的方法编辑了我的答案(也许有用)。
    【解决方案2】:

    只需设置以下内容:

    <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="" />
    

    还有,样式 xml,如果需要的话……

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

    希望对你有帮助~

    【讨论】:

      【解决方案3】:

      使用

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

      不仅会使文本消失,而且还会消除原本会显示的空白区域。

      【讨论】:

      • 正确答案,不需要 android:textSize="0dp"
      • 完美答案。谢谢!
      【解决方案4】:

      我是这么想的

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

      【讨论】:

        【解决方案5】:

        像这样填充样式 XML.. 神奇的是文本颜色透明...

        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"
        
        />
        

        【讨论】:

        • 在你的答案中添加一些描述,这将如何工作。
        【解决方案6】:

        不是最优雅的解决方案,但如果您只是想隐藏顶部的额外空间,您可以尝试tb.setTextSize(0);。可能需要将 textOn/textOff 设置为空字符串:tb.setTextOn("");

        编辑:我更好的选择是通过extending Button 创建您自己的自定义按钮,保持状态(有关按下/未按下状态,请参阅此 SO 帖子:Pressed android button state)并找到要设置为的资产合适的状态...

        【讨论】:

          【解决方案7】:
           <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" />
          

          【讨论】:

            【解决方案8】:

            使用CheckBox 代替ToggleButton 更加轻松。它们具有相同的状态并因此实现相同的功能,但您可以通过定义 &lt;android:button="@drawable/..."&gt; 属性轻松更改 CheckBox 的外观。

            【讨论】:

              【解决方案9】:
              <ToggleButton
                      android:id="@+id/tooglebutton"
                      android:layout_width="60dp"
                      android:layout_height="25dp"
                      android:textOff="off"
                      android:textOn="on"
                      android:textSize="0dp"
                     />
              

              【讨论】:

              • 请提供一些解释。
              • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
              【解决方案10】:

              布局文件.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" />
              

              在主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);
              

              layout.xml使用的check.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>
              

              这些行就是你要找的那些

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-08-29
                • 1970-01-01
                • 1970-01-01
                • 2016-05-12
                • 1970-01-01
                • 2014-08-15
                • 1970-01-01
                • 2017-03-13
                相关资源
                最近更新 更多