Button


public class Button
extends TextView

java.lang.Object
   ↳ android.view.View
     ↳ android.widget.TextView
       ↳ android.widget.Button


A user interface element the user can tap or click to perform an action.

To display a button in an activity, add a button to the activity's layout XML file:

 <Button
     android:id="@+id/button_id"
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct" />

To specify an action when the button is pressed, set a click listener on the button object in the corresponding activity code:

 public class MyActivity extends Activity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         setContentView(R.layout.content_layout_id);

         final Button button = findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Code here executes on main thread after user presses button
             }
         });
     }
 }

The above snippet creates an instance of View.OnClickListener and wires the listener to the button using setOnClickListener(View.OnClickListener). As a result, the system executes the code you write in onClick(View) after the user presses the button.

The system executes the code in onClick on the main thread. This means your onClick code must execute quickly to avoid delaying your app's response to further user actions. See Keeping Your App Responsive for more details.

Every button is styled using the system's default button background, which is often different from one version of the platform to another. If you are not satisfied with the default button style, you can customize it. For more details and code samples, see the Styling Your Button guide.

For all XML style attributes available on Button see Button Attributes, TextView Attributes, ERROR(View Attributes/android.R.styleable#View View Attributes). See the Styles and Themes guide to learn how to implement and organize overrides to style-related attributes.

Summary

Inherited XML attributes

Inherited constants

Inherited fields

Public constructors

Button(Context context)

Simple constructor to use when creating a button from code.

Button(Context context, AttributeSet attrs)

LayoutInflater calls this constructor when inflating a Button from XML.

Button(Context context, AttributeSet attrs, int defStyleAttr)

This constructor allows a Button subclass to use its own class-specific base style from a theme attribute when inflating.

Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

This constructor allows a Button subclass to use its own class-specific base style from either a theme attribute or style resource when inflating.

Public methods

CharSequence getAccessibilityClassName()

Return the class name of this object to be used for accessibility purposes.

PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex)

Resolve the pointer icon that should be used for specified pointer in the motion event.

Inherited methods

Public constructors

Button

Added in API level 1
public Button (Context context)

Simple constructor to use when creating a button from code.

Parameters
context Context: The Context the Button is running in, through which it can access the current theme, resources, etc.

Button

Added in API level 1
public Button (Context context, 
                AttributeSet attrs)

LayoutInflater calls this constructor when inflating a Button from XML. The attributes defined by the current theme's android:buttonStyle override base view attributes. You typically do not call this constructor to create your own button instance in code. However, you must override this constructor when creating custom views.

Parameters
context Context: The Context the view is running in, through which it can access the current theme, resources, etc.

attrs AttributeSet: The attributes of the XML Button tag being used to inflate the view.

Button

Added in API level 1
public Button (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

This constructor allows a Button subclass to use its own class-specific base style from a theme attribute when inflating. The attributes defined by the current theme's defStyleAttr override base view attributes.

For Button's base view attributes see Button Attributes, TextView Attributes, ERROR(View Attributes/android.R.styleable#View View Attributes).

Parameters
context Context: The Context the Button is running in, through which it can access the current theme, resources, etc.

attrs AttributeSet: The attributes of the XML Button tag that is inflating the view.

defStyleAttr int: The resource identifier of an attribute in the current theme whose value is the the resource id of a style. The specified style\u2019s attribute values serve as default values for the button. Set this parameter to 0 to avoid use of default values.

Button

Added in API level 21
public Button (Context context, 
                AttributeSet attrs, 
                int defStyleAttr, 
                int defStyleRes)

This constructor allows a Button subclass to use its own class-specific base style from either a theme attribute or style resource when inflating. To see how the final value of a particular attribute is resolved based on your inputs to this constructor, see View.View(Context, AttributeSet, int, int).

Parameters
context Context: The Context the Button is running in, through which it can access the current theme, resources, etc.

attrs AttributeSet: The attributes of the XML Button tag that is inflating the view.

defStyleAttr int: The resource identifier of an attribute in the current theme whose value is the the resource id of a style. The specified style\u2019s attribute values serve as default values for the button. Set this parameter to 0 to avoid use of default values.

defStyleRes int: The identifier of a style resource that supplies default values for the button, used only if defStyleAttr is 0 or cannot be found in the theme. Set this parameter to 0 to avoid use of default values.

Public methods

getAccessibilityClassName

Added in API level 23
public CharSequence getAccessibilityClassName ()

Return the class name of this object to be used for accessibility purposes. Subclasses should only override this if they are implementing something that should be seen as a completely new class of view when used by accessibility, unrelated to the class it is deriving from. This is used to fill in AccessibilityNodeInfo.setClassName.

Returns
CharSequence

onResolvePointerIcon

Added in API level 24
public PointerIcon onResolvePointerIcon (MotionEvent event, 
                int pointerIndex)

Resolve the pointer icon that should be used for specified pointer in the motion event. The default implementation will resolve the pointer icon to one set using setPointerIcon(android.view.PointerIcon) for mouse devices. Subclasses may override this to customize the icon for the given pointer. For example, to always show the PointerIcon.TYPE_HANDWRITING icon for a stylus pointer, the event can be resolved in the following way:

 @Override
 public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) {
     final int toolType = event.getToolType(pointerIndex);
     if (!event.isFromSource(InputDevice.SOURCE_MOUSE)
             && event.isFromSource(InputDevice.SOURCE_STYLUS)
             && (toolType == MotionEvent.TOOL_TYPE_STYLUS
                     || toolType == MotionEvent.TOOL_TYPE_ERASER)) {
         // Show this pointer icon only if this pointer is a stylus.
         return PointerIcon.getSystemIcon(mContext, PointerIcon.TYPE_HANDWRITING);
     }
     // Use the default logic for determining the pointer icon for other non-stylus pointers,
     // like for the mouse cursor.
     return super.onResolvePointerIcon(event, pointerIndex);
 }
 

Parameters
event MotionEvent: The MotionEvent that requires a pointer icon to be resolved for one of pointers.

pointerIndex int: The index of the pointer in event for which to retrieve the PointerIcon. This will be between 0 and MotionEvent.getPointerCount().

Returns
PointerIcon the pointer icon to use for specified pointer, or null if a pointer icon is not specified and the default icon should be used.