第一行笔记-常用控件
2017-10-18 20:46
260 查看
1.常用控件
1.1TextView
主要用于在界面上显示文字信息。<TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/factor" android:gravity="center" android:textSize="24sp" android:textColor="#00ff00" />
android:id 定义控件的标识符id。
android:layout_width和android:layout_height 指定控件的宽度和高度。可选值3种有match_parent、fill_parent和wrap_content。其中match_parent
和fill_parent的意义相同,官方推荐match_parent。match_parent表示当前控件的大小和父控件大小一样。wrap_content表示当前控件大小刚好可以包含住
里面的内容。除了上面的值也可以对控件的宽和高指定一个固定的大小。
android:text 指定TextView中显示的文本内容。
android:gravity指定文字的对齐方式,可选值有top、bottom、left、right、center等,可以用"|"来同时指定多个值。这里指定center等同于center_vertical|center_horizontal
表示文字在垂直水平方向都居中对齐。
android:textColor 指定文字的颜色。“”#00ff00“”表示颜色为rgb中的绿色。
android:textSize 指定文字的大小。文字的大小使用sp作为单位。
*sp是英文scale-independent pixel的缩写,意为缩放无关像素。是一种与密度无关的像素,这种像素会受用户字体偏好设置的影响。通常使用sp来设置屏幕上字体的大小。
*dp是英文density-independent pixel的缩写,意为密度无关像素。在设置边距、内边距或任何不打算按像素值指定尺寸的情况下,通常都是用dp这个单位。1dp单位
在设备屏幕上总是等于1/160英寸。使用dp好处是,无论屏幕密度如何,总能获得同样的尺寸。
边距 (margin),指定视图组件间的距离。是布局参数。
内边距(padding),指定视图外边框与其内容间的距离,非布局参数。
不以layout_开头的属性作用于组件。组件实例化时,会调用某个方法按照属性及属性值进行自我配置。
以layout_开头的属性作用于组件的父组件。这些属性统称为布局参数。会告诉父布局如何在内部安排自己的子元素。
1.2Button
Button是程序用于和用户交互的一种控件。<Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/calc" />为Button的点击事件注册监听器使用匿名类的方式
Button b1 = (Button)findViewById(R.id.button); b1.setOnClickListener(new View.OnClickListener() { 4000 @Override public void onClick(View view) {
此处添加代码逻辑// Intent intent = new Intent(MainActivity.this ,ResultActivity.class); // . intent.putExtra("one",facotr1str); // intent.putExtra("two",facotr2str); // startActivity(intent);
} });每当点击按钮时,就会执行监听器中的onClick()方法。只需要在这个方法中加入待处理的逻辑就可以了。
也可以使用实现接口的方式来注册监听器。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
Button b1 = (Button)findViewById(R.id.button);b1.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.button: break; default: break; } }}
1.3EditText
EditText允许用户在控件里面输入和编辑内容,并可以在程序中对这些内容进行处理。
<EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="wrap_content"
android:hint="Type something here"
android:maxLines="2" />
android:hint属性指定了提示性的文本。
android:maxLines属性指定了EditText的最大行数为两行,当输入的内容超过两行时,文本就会向上滚动。而EditText不会再继续拉伸。
通过在代码中获取EditText中的内容
EditText factor1 = (EditText)findViewById(R.id.edit1); Sting facotr1str =factor1.getText().toString();
首先通过findViewById()方法得到EditText的实例,然后通过getText()方法获取到输入的内容,再调用toString()方法转换成字符串。
1.4 ImageView
ImageView是用于在界面上展示图片的控件。需要将准备好的图片放入"drawable"开头的目录下。<ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/img_1"/>
android:src属性指定ImageView的显示源文件。
可以在程序中通过代码动态地更改ImageView中的图片。例如在xml中指定的资源为drawable/img_1,在代码中修改为drawable/img_2.
ImageView imageView = (ImageView)findViewById(R.id.image_view); imageView.setImageResource(R.drawable.img_2);
1.5 ProgressBar
ProgressBar用于在界面上显示一个进度条,表示程序正在加载一些数据。<ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent" android:layout_height="wrap_content" />
运行程序会发现一个旋转的进度条。可以通过设置android:visibility属性让进度条消失。
android:visibility属性可选值有visible、invisible和gone.visible表示控件可见,invisible表示控件不可见,但它仍占据着原来的位置和大小,可以理解为变透明了。
gone表示不可见,而且不占用任何屏幕空间。不指定android:visibility属性,控件都是可见的。
通过程序来控制进度条的显示和消失。
ProgressBar mProgressBar = (ProgressBar)findViewById(R.id.progress_bar); if(mProgressBar.getVisibility() == View.GONE) { mProgressBar.setVisibility(View.VISIBLE); }else { mProgressBar.setVisibility(View.GONE); }将ProgressBar通过style属性将它指定成水平进度条。max指定进度条的最大值
<ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100"/>
通过程序来设置加载进度条的位置。
mProgressBar.setProgress(i++); mProgressBar.setSecondaryProgress(i+10);setProgress()设置第一进度条位置,setSecondProcess()第二进度条位置.
1.6 AlertDialog
AlertDialog可以在当前界面弹出一个对话框,对话框置顶于所有界面的其他元素之上,能够屏蔽掉与其他控件的交互能力。因此一般用于提示一些非常重要的内容或者警告信息。在代码中的使用方法是
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("This is Dialog");
dialog.setMessage("Something important .");
dialog.setCancelable(false);
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
} });
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
} });
dialog.show();
AlertDialog.Builder创建一个AlerDialog的实例,然后可以为这个对话框设置标题、内容、可否取消等属性。接下来调用setPositiveButton方法为对话框设置确定按钮的
点击事件,调用setNegativeButton()方法设置取消按钮的点击事件。最后调用show()方法将对话框显示出来。
2.四种布局
布局是一种可用于放置很多控件的容器,他可以按照一定的规律调整内部控件的位置从而编写出精美的界面。布局中也可以嵌套布局。线性布局LinearLayout,是一种常用布局。会将它所包含的空间在线性空间上依次排列。可以通过android:orientation属性指定排列方向水平(horizontal)和竖直(vertical)。
默认的排列方式是horizontal。
android:gravity属性用于指定文字在控件中的对其方式。
android:layout_gravity属性用于指定控件在布局中的对齐方式。
android:layout_weight属性运行我们使用比例的方式来指定控件的大小。可以通过将android:layout_width指定为0,然后通过设置android:layout_weighti属性来觉得控件的大小。
相对布局RelativeLayout,通过相对定位的方式让空间的位置出现在布局的任何位置。
android:layout_alignParentTop 子部件的上边和父布局的上边对齐
android:layout_alignParentLeft 子部件的左边和父布局的左边对齐
android:layout_alignParentRight 子部件的右边和父布局的右边对齐
android:layout_alignParentBottom 子部件的底部和父布局的底部对齐
android:layout_centerInparent 子部件在父布局的中心
上面的属性可以设置为true或者false
android:layout_above 让一个控件位于另一个控件的上方,需要为这个属性指定相对id的引用。
android:layout_below 让一个控件位于另一个控件的下方,需要为这个属性指定相对id的引用。
android:layout_toLeftOf 让一个控件位于另一个控件的左侧,需要为这个属性指定相对id的引用。
android:layout_toRightOf 让一个控件位于另一个控件的右侧需要为这个属性指定相对id的引用。
上面的属性需要指定相对id。
android:layout_alignLeft 让一个控件的左边缘和另一个控件的左边缘对齐,需要为这个属性指定相对id的引用。
android:layout_alignRight 让一个控件的右边缘和另一个控件的右边缘对齐,需要为这个属性指定相对id的引用。
android:layout_alignTop 让一个控件的上边缘和另一个控件的上边缘边缘对齐,需要为这个属性指定相对id的引用。
android:layout_alignBottom 让一个控件的下边缘和另一个控件的下边缘边缘对齐,需要为这个属性指定相对id的引用。
帧布局FrameLayout,应用场景较少,没有方便的定位方式,所有空间都默认位于布局的左上角。
3.自定义控件
所有的空间都是直接或者间接继承自View的,所有的布局都是直接或者间接继承自ViewGroup的。3.1 引入布局
使用引入布局的方式创建一个自定义的标题栏。1.创建一个标题栏布局title.xml,在布局中放入两个Button和一个TextView,左边的Button用于返回,右边的用于编辑。中间的TextView用于显示一段标题文本。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="Back" android:textColor="#fff" /> <!-- android:background="@drawable/back_bg"--> <TextView android:id="@+id/title_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" android:text="Title Text" android:textColor="#fff" android:textSize="24sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="Edit" android:textColor="#fff" /> <!-- android:background="@drawable/edit_bg"--> </LinearLayout>
android:background用于为布局或控件指定一个背景,使用颜色或者图片填充。
android:layout_margin指定空间在上下左右方向上偏移的距离。也可以使用android:layout_marginLeft和android:layout_marginTop等属性指定控件在某个方向上的偏移距离。
通过修改activity_main.xml中的代码来应用定义的标题栏布局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/title" /> </LinearLayout>
添加如下代码:
<include layout="@layout/title" />
通过include语句将标题栏布局引入。
将MainActivity中系统自带的标题栏隐藏掉:
ActionBar actionBar = getSupportActionBar(); if(actionBar != null) { actionBar.hide(); }
调用getSupportActionBar()方法获得ActionBar的实例,然后调用ActionBar的hide()方法将标题栏隐藏起来。
3.2使用自定义控件方式创建
引入布局的技巧解决了重复编写布局代码的问题。但是如果布局中有一些响应事件,需要在每个活动中为这些控件单独编写事件注册的代码。如果每个活动中响应事件的处理逻辑相同,会增加很多重复的代码。可硬通过自定义控件的方式来解决这个问题。新建TitleLayout继承自LinearLayout,让它成为自定义的标题栏控件。public class TitleLayout extends LinearLayout { public TitleLayout(Context, AttributeSet attrs) { super(context, attrs); LayoutLinflater.from(context).inflate(R.layout.title, this); } }
重写了LinearLayout中带有两个参数的构造函数,在布局中引入TitleLayout控件就会调用这个构造函数。然后在构造函数中需要对标题栏布局进行动态加载,需要借助LayoutInflater.通过LayoutInflater的from()方法可以构建出一个LayoutInflater对象,然后调用inflate()方法就可以动态加载一个布局文件。inflate()方法接收两个参数,第一参数是要加载布局的文件的id,这里要加载的是title,传入的是R.layout.title.第二个参数是给加载好的布局再添加一个父布局,这里我们指定为TitleLayout,于是直接传入this。
自定义控件创建好之后,需要在布局文件中添加自定义控件。添加自定义控件和添加普通控件的方式基本一样。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example.missj.activitytest.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
为标题栏中的按钮注册点击事件。修改TitleLayout中的代码。
public class TitleLayout extends LinearLayout
{
public TitleLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
Button titleBack = (Button)findViewById(R.id.title_back);
Button titleEdit = (Button)findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
((Activity)getContext()).finish();} });
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
Toast.makeText(getContext(),"You clicked Edit button", Toast.LENGTH_SHORT).show();} });
}
}
首先通过findViewById()方法获得按钮的实例,然后分别调用setOnClickListener()方法给两个按钮注册了点击事件。
当点击返回按钮时销毁掉当前的活动,当点击编辑按钮时弹出一段文本。
相关文章推荐
- 第一行代码笔记10(WebView控件)
- [学习笔记]Android常用控件
- Winform控件学习笔记【第二天】——常用控件
- android笔记6-常用控件的介绍二
- Android Material Design常用控件学习笔记
- 14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?
- android菜鸟学习笔记12----Android控件(一) 几个常用的简单控件
- JAVASE学习笔记:第十章 SWing常用控件类(一)
- [Android新手学习笔记24]-常用的UI控件的单位、属性
- 黑马程序员之 ASP.NET学习笔记:GridView控件的常用属性及方法
- Android 学习笔记之常用控件
- IOS学习笔记--IOS常用控件汇总
- Fiori学习笔记 - 事件之常用控件
- Python学习笔记:常用控件
- UI控件笔记(十七):UI之UI阶段控件常用方法大全总结
- 【iOS学习笔记】代码实现常用控件UIButton、UISlider、UISwitch、UISegmentedControl
- QT学习笔记11常用控件
- Android笔记---常用控件以及用法
- Android 学习笔记之常用控件
- 张高兴的 Xamarin.Android 学习笔记:(四)常用控件