web-dev-qa-db-ja.com

テキストなしでToggleButtonを作成することは可能ですか?

次のようにAndroidデフォルトのToggleButtonを作成したい: enter image description here

でもTEXTなしで作りたい

私はこのコードで試しました:

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

しかし、それは水平の緑色のバーの上部に空きスペースを残しています。

私はその空のスペースを望んでいません、私は水平の緑色のバーだけが欲しいです。

それを達成する方法は?

ありがとう

14
Pableras84

上部の空のスペースは、デフォルトのトグルボタンスタイルで使用される2つのNinepatch(_btn_toggle_off.9.png_および_btn_toggle_on.9.png_)が原因です。

水平バーを完全に中央に配置するには、オリジナルの2つの新しいninepatch派生フォームを使用するToggleButtonの新しいスタイルを作成する必要があります。

編集:最小限のXMLを必要とするメソッド:

  • トグルボタン用に2つの9つのパッチを作成し、_my_btn_toggle__ onと_my_btn_toggle_off_という名前を付けます。

  • ドローアブルフォルダに_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)
    _
23
SteveR

次のように設定するだけです。

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

お役に立てば幸いです〜

16
RRTW

使用する

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

テキストが消えるだけでなく、他の方法で表示されるはずの空きスペースも削除されます。

9
Tad

私はそうだと思いました

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

レイアウト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" />

メインアクティビティで.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);
0
Ramandeep Singh

最も洗練されたソリューションではありませんが、上部の余分なスペースを非表示にしようとしている場合は、tb.setTextSize(0);を試すことができます。 textOn/textOffを空の文字列に設定する必要がある場合があります:tb.setTextOn("");

編集:私はより良いオプションはextending Buttonによって独自のカスタムボタンを作成し、状態を保持することです(これを参照SO押された/押されていない状態の投稿: Pressed Android button state )そして適切な状態として設定するアセットを見つけます...

0
Salil Pandit

このような塗りつぶしスタイルの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"

/>
0
Marc Sauvageau
 <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" />
0
Faakhir
<ToggleButton
        Android:id="@+id/tooglebutton"
        Android:layout_width="60dp"
        Android:layout_height="25dp"
        Android:textOff="off"
        Android:textOn="on"
        Android:textSize="0dp"
       />
0
Sanjay Goswami

CheckBoxの代わりにToggleButtonを使用する方がはるかに手間がかかりません。それらは同じ状態を持っているため、同じ機能を実現しますが、<Android:button="@drawable/...">属性を定義することで、CheckBoxの外観を簡単に変更できます。

0
PJ_Finnegan