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