2016-06-28 11 views
0

Ich versuche, einen programmierbaren Hintergrund für eine Schaltfläche festzulegen, die programmgesteuert erstellt wird.Festlegen eines programmierbaren Drawable-Hintergrunds für eine programmgesteuert erstellte Schaltfläche

Unten ist der Code, wo ich auf die Schaltfläche erstellen und stellen Sie den Hintergrund

Button increaseQuantity = new Button(this); 
increaseQuantity.setText("+"); 
//increaseQuantity.setBackgroundResource(R.drawable.quantity_button); 
increaseQuantity.setBackgroundDrawable(getResources().getDrawable(R.drawable.quantity_button)); 

Im Folgenden wird die XML, die den Code für die ziehbar

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > 
<stroke android:width="1dp" android:color="#ee404040" /> 
<size android:width="2dp" android:height="2dp"/> 
<gradient android:startColor="#11809100" android:centerColor="#11910000" android:endColor="#55FFB900" android:angle="45" /> 
</shape> 

Gemäß der xml meine Schaltfläche sollte hat sein in runder Form (weil Breite und Höhe gleich sind), aber ich bekomme keinen runden Knopf, stattdessen bekomme ich einen ovalen Knopf. Kann jemand diesen Code korrigieren, um einen kreisförmigen Knopf zu erhalten?

Antwort

0

nur zwei Dinge hier:

  1. ersetzen die veralteten Methoden: setBackgroundDrawable und getDrawable sind veraltet.
  2. Stellen Sie die Dimensionen programmatisch

Diese Arbeit machen sollte:

increaseQuantity.setBackground(ContextCompat.getDrawable(this, R.drawable.round)); 
increaseQuantity.setLayoutParams(new LinearLayout.LayoutParams(100, 100)); 
//replace 100 with your desired diameter of the button. 

Außerdem werden Sie LinearLayout auf das übergeordnete Layout ersetzen müssen Sie Ihre Schaltfläche mit bist verknüpfen.

+0

Ich benutze Tabellarisches Layout, um diese Schaltfläche zu platzieren, wird es für Tabellen-Layout funktionieren? – Suresh

+0

Ja, es sollte funktionieren. Verwenden Sie einfach 'new TableLayout.LayoutParams (100, 100)' 'anstelle von' LinearLayout.LayoutParams (100, 100) ' –

Verwandte Themen