Android按钮

时间:2020-02-23 14:28:48  来源:igfitidea点击:

在本教程中,我们将研究Android Button。
我们将创建android studio应用程序,并研究与按钮设计,样式,点击事件等有关的各种事情。

Android按钮

Android按钮是GUI组件,用户可以单击它们进入下一个屏幕,确认选项/触发由您(Android开发人员)创建的任何事件。
android.widget.Button是Android TextView的子类。
Android中的按钮可以采用以下形式:

  • 单选按钮
  • 切换按钮
  • 图像按钮
  • FloatingActionButton

在以下各节中,我们将讨论默认按钮类,以编程方式创建它,并设置其样式。

在布局中创建按钮

我们可以通过以下方式在Android Studio的布局文件中定义Button小部件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
  xmlns:tools="https://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:gravity="center"
  tools:context="com.theitroad.androidbutton.MainActivity">

  <Button
      android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="DEFAULT BUTTON"
      android:onClick="clickMe"

</LinearLayout>

在上面的代码中,我们将Button小部件包装在LinearLayout中。
" id"代表唯一的标识符。
" onClick"属性需要使用方法名称作为值。
该方法名称应在布局的相应活动中定义。
单击该按钮时,它将触发。
将" android:background"设置为颜色会从按钮中删除选择动画。
我们可以使用属性android:drawableLeft来将按钮内的图像设置为文本的左侧。
我们的MainActivity.java类如下所示:

package com.theitroad.androidbutton;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  }

  public void clickMe(View view)
  {
      Toast.makeText(getApplicationContext(),"Button is clicked",Toast.LENGTH_LONG).show();
  }
}

单击按钮后,Toast通知将显示在屏幕上。

以编程方式创建按钮

让我们以编程方式在按钮上设置属性,然后以编程方式创建一个按钮。

@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      Button button  = findViewById(R.id.button);
      button.setTextColor(Color.RED);
      button.setClickable(false);
  }

我们使用findViewById方法将xml按钮ID挂钩到类中的相应实例。
setTextColor()用于设置文本颜色,setClickable接受布尔值。
将其设置为false会使按钮不可点击,并且不会触发clickMe方法。

以编程方式创建按钮

以下代码以编程方式创建一个按钮,并将其添加到根层次结构中。

Button programmaticButton = new Button(this);
      programmaticButton.setId(R.id.button2);
      programmaticButton.setText("CREATED PROG内存MATICALLY");
      programmaticButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(),"Programmatic Button is clicked",Toast.LENGTH_LONG).show();
          }
      });

      LinearLayout linearLayout = findViewById(R.id.linearLayout);
      linearLayout.addView(programmaticButton);

我们可以使用setId以编程方式设置ID。
我们可以在res |文件夹中创建ID。
价值观| ids.xml如下所示:

setOnClickListener具有接口回调,该回调侦听单击并在单击按钮时触发onClick方法。

现在,让我们在MainActivity.java类中以编程方式在布局中添加另一个按钮。

@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button button = findViewById(R.id.button);
      button.setTextColor(Color.RED);
      button.setClickable(false);

      //Creating a Button programmatically
      Button programmaticButton = new Button(this);
      programmaticButton.setId(R.id.button2);
      programmaticButton.setText("CREATED PROG内存MATICALLY");
      programmaticButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Programmatic Button is clicked", Toast.LENGTH_LONG).show();
          }
      });

      LinearLayout linearLayout = findViewById(R.id.linearLayout);
      linearLayout.addView(programmaticButton);

      programmaticButton = new Button(this);
      programmaticButton.setId(R.id.button3);
      programmaticButton.setText(getResources().getString(R.string.another_button));
      programmaticButton.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
      programmaticButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(getApplicationContext(), "Another Programmatic Button is clicked", Toast.LENGTH_LONG).show();
          }
      });

  }

setBackgroundColor()方法用于以编程方式在按钮上设置颜色。
理想情况下,我们应该使用字符串资源在按钮上设置文本,而不是在Java类本身中对其进行硬编码。
在上面的代码中,我们创建了两个按钮,每个按钮都有一个用于侦听器的单独的接口回调。
这意味着我们将在内存中为每个按钮创建一个不同的对象。
这将增加堆内存,最终应用程序将使用比设备所需更多的内存。
我们可以通过使类实现View.OnClickListener本身来解决此性能问题。

而不是对每个Button使用单独的setOnClickListener回调,而是在类本身上实现接口。

因此,在类本身中实现了View.OnClickListener之后,我们的MainActivity.java类将如下所示:

package com.theitroad.androidbutton;

import android.graphics.Color;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button button = findViewById(R.id.button);
      button.setTextColor(Color.RED);
      button.setClickable(false);

      //Creating a Button programmatically
      Button programmaticButton = new Button(this);
      programmaticButton.setId(R.id.button2);
      programmaticButton.setText("CREATED PROG内存MATICALLY");
      programmaticButton.setOnClickListener(this);

      LinearLayout linearLayout = findViewById(R.id.linearLayout);
      linearLayout.addView(programmaticButton);

      programmaticButton = new Button(this);
      programmaticButton.setId(R.id.button3);
      programmaticButton.setText(getResources().getString(R.string.another_button));
      programmaticButton.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
      programmaticButton.setOnClickListener(this);

      linearLayout.addView(programmaticButton);

  }

  public void clickMe(View view) {
      Toast.makeText(getApplicationContext(), "Button is clicked", Toast.LENGTH_LONG).show();
  }

  @Override
  public void onClick(View v) {
      switch (v.getId()) {
          case R.id.button2:
              Toast.makeText(getApplicationContext(), "Programmatic Button is clicked", Toast.LENGTH_LONG).show();
              break;
          case R.id.button3:
              Toast.makeText(getApplicationContext(), "Another Programmatic Button is clicked", Toast.LENGTH_LONG).show();
              break;

      }
  }
}

我们已使用this将每个setOnClickListener设置为通用的View.OnClickListener界面。
在开关块中,我们检测到使用其ID单击的Button视图。
这样可以节省大量内存!

设定文字大小

按钮的文本大小通常以" sp"为单位设置。

<Button
      android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="DEFAULT BUTTON"
      android:textSize="20sp"
      android:background="#147D03"
      android:onClick="clickMe"

或者在您的活动中执行以下操作。

Button button = findViewById(R.id.button);
button.setTextColor(Color.RED);
button.setClickable(false);
button.setTextSize(22); //size in float

我们在布局中添加了一些按钮,并在"活动"中附加了其侦听器。