Quando si utilizza un ToggleButton con un background drawable (o anche solo con la grafica standard del Material Design), il sistema imposta automaticamente un padding attorno al testo dell'elemento, la cui presenza impedisce di definire programmaticamente l'altezza.
Per ovviare a questo problema, è necessario impostare l'altezza minima di questo elemento a zero. In questo modo, il sistema elimina il padding ed utilizza solamente le impostazioni definite per l'oggetto.
Definizione da layout XML
E' possibile impostare questo parametro nel codice XML in questo modo:
1 2 3 4 5 6 7 8 9 10 | <ToggleButton android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/togglebutton_color" android:textColor="@color/togglebutton_text" android:layout_margin="5dp" android:text="10" android:minHeight="0dp" /> |
Oggetto generato da codice
Nel caso, invece, si voglia generare l'oggetto in modo dinamico direttamente da codice ed inserirlo in una View, bisogna aggiungere un'impostazione in più.
I due metodi da richiamare sono:
I due metodi da richiamare sono:
- tb.setMinHeight(0);
- tb.setMinimumHeight(0);
Questo è il codice per la creazione dell'oggetto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // nuova istanza ToggleButton ToggleButton tb = new ToggleButton(this); // generazione di ID e TAG int generatedId = View.generateViewId(); tb.setId(generatedId); tb.setTag("TAG"); // testo / impostazione iniziale tb.setTextOff("Testo OFF"); tb.setTextOn("Testo ON"); tb.setChecked( i == 1 ); // parametri di layout di base LinearLayout.LayoutParams lParam = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); tb.setLayoutParams(lParam); // altezza minima tb.setMinHeight(0); tb.setMinimumHeight(0); // background tb.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.togglebutton_color, this.getTheme())); // colore del testo tb.setTextColor(getResources().getColorStateList(R.color.togglebutton_text, this.getTheme())); // listener (così ne seleziona uno solo tra tutti quelli della riga tb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // fai qualcosa } }); |
Nessun commento:
Posta un commento