Android按钮
在本教程中,我们将研究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
我们在布局中添加了一些按钮,并在"活动"中附加了其侦听器。

