Android开发的之基本控件和详解四种布局方式

2023-05-16

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动。给控件添加事件也有接口回调和委托代理的方式。今天这篇博客就总结一下Android中常用的基本控件以及布局方式。说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局。而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式。先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio。开始今天的正题, 虽然Android的控件和布局方式都可以拖拽实现,今天为了更详细的了解控件和布局,我们就用纯代码的形式来进行实现和介绍。

 

一、常用基本控件

1.TextView

看到Android中的TextView, 我不禁的想到了iOS开发中的UILabel。从字面意思上看,TextView就是文本视图,只是用来显示文字的。在iOS中就叫做标签,即为UILabel。要想在Activity中显示TextView, 我们需要在相应的布局文件,也就是Activity对应的layout.xml文件去添加相应的控件标签。这些xml标签可以确定控件的位置,大小,颜色等属性。下方是在Activity中显示一个TextView。布局代码如下:

复制代码


1         <TextView
2             android:id="@+id/name_text_view"
3             android:layout_width="match_parent"
4             android:layout_height="wrap_content"
5             android:gravity="center"
6             android:textSize="30sp"
7             android:textColor="#be0e0a"
8             android:text="My name is ZeluLi"/>  

复制代码

标签<TextView/>代表着我们要在Activity中添加一个个TextView, 标签中可以设置一些属性。

(1).android:id属性代表着TextView的Id,也就是TextView的唯一标示,在java代码中我们可以通过findViewById()方法来通过Id获取控件。上述控件的唯一id为name_text_view。

(2).android:layout_width属性代表着控件的宽度,该属性的值是match_parent, 表示该控件的宽度与父视图的宽度相同。

(3).android:layout_height属性代表着控件的高度,该属性的值是wrap_content,表示控件的高度根据内容的高度进行改变。

(4).android:gravity属性代表着TextView中文字对齐方式,有多种方式,我们在此选的是center,居中显示。

(5).android:textSize属性代表着TextView中文字的型号,也就是文字的大小。

(6).android:textColor属性设置的是TextView中文字的颜色,属性值是16进制的色值。

(7).android:text属性就是用来设置TextView显示的值的。

我们如何在Java类,也就是Activity中获取上述控件呢,下方的代码就是使用findViewById()方法通过id获取上述控件,并获取TextView中的值以及设置TextView中的值。具体代码如下。


        TextView myTextView = (TextView) findViewById(R.id.name_text_view);
        String myText = myTextView.getText().toString();
        myTextView.setText(myText+"  Add");  

经过上面的属性的设置,运行工程,你会在Activity中看到如下效果:

 

2.Button

在Android中的按钮就叫Button, 而在iOS中则叫UIButton。其两者的用法极为相似。还是和上面类似,我们需要在Activity对应的布局文件layout.xml中添加一个Button, 具体的xml代码如下所示。<Button/>标签就是代表着Button, 其中的属性和属性值就不做过多的赘述了,上面已经提到了。


        <Button
            android:id="@+id/click_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="点我"/>  

在Activity的类中也是使用findViewById来通过Id获取该按钮,获取按钮后我们需要给按钮绑定点击事件。也就是点击按钮要做的事情,下方给出了两中方式,一种是块的形式,一种是委托代理的形式。

(1).接口回调的形式绑定点击事件

复制代码


1         Button button = (Button) findViewById(R.id.click_button);
2         button.setOnClickListener(new View.OnClickListener() {
3             @Override
4             public void onClick(View v) {
5                 //点击按钮要做的事情
6             }
7         });  

复制代码

(2)委托代理

复制代码


 1  button.setOnClickListener(this);
 2 
 3 //重写委托回调的方法
 4     /**
 5      * Called when a view has been clicked.
 6      *
 7      * @param v The view that was clicked.
 8      */
 9     @Override
10     public void onClick(View v) {
11         switch (v.getId()){
12             case R.id.click_button:
13                 //点击按钮后要做的事情
14                 break;
15             default:
16                 break;
17         }
18     }      

复制代码

经过上面的步骤就会在TextView下面添加了一个按钮,运行效果如下所示

 

3.EditText

接下来要为Activity添加一个输入框,在Android中输入框的类型和标签都是EditText。iOS中的输入框就是UITextField了,其实两者用法类似,其功能都是接收用户输入的数据的。下方是其xml布局方式.

复制代码


1         <EditText
2             android:id="@+id/edit_text"
3             android:layout_width="match_parent"
4             android:layout_height="wrap_content"
5             android:hint="placeHoder: type something here"
6             android:maxLines="3"/>  

复制代码

上方EditText标签中比之前多了两个属性:

(1).android:hint属性后边是一个字符串,其实就是用来占位用的字符串,功能是提示用户该输入框是干嘛的,在iOS开发中叫做Placeholder。

(2).android:macLines 用来设置输入框的最大行数。

 

在Activity中获取EditText对象,也是通过Id方式,下方代码是获取通过id实例化EditText对象,并获取其中的文本在Toast上显示。


                EditText myEditText = (EditText) findViewById(R.id.edit_text);
                String inputText = myEditText.getText().toString();
                Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();  

输入框如下所示:

 

4.AlterDialog(警告框)

Toast用来显示提示内容,而AlterDialog是警告框,上面可以有一些控件,比如按钮等。AlterDialog其实就是iOS中的AlterView(在iOS8后有增加了UIAlterController)。下面的代码是初始化AlterDialog并且进行显示的代码,下方的代码是放在点击按钮所触发的方法当中。

(1)AlterDialog通过AlterDialog的Builder进行创建,在创建的时候会指定该AlterDialog在那个Activity上进行显示。

(2)通过setTitle方法给AlterDialog设置标题,通过setMessage给AlterDialog设置内容。

(3)setCancelable()方法,我们在这儿设置的时false,表示弹出的AlterDialog在用户点击返回键是不消失,该值默认是true。

(4)setPositiveButton()方法是设置点击“确定”按钮时的事件, setNegativeButton是设置点击“取消”按钮的事件。通过Toast来展示事件的点击。

复制代码


 1            AlertDialog.Builder alterDialog = new AlertDialog.Builder(MainActivity.this);
 2                 alterDialog.setTitle("提示框");
 3                 alterDialog.setMessage("提示内容");
 4                 alterDialog.setCancelable(false);
 5                 alterDialog.setPositiveButton("好的", new DialogInterface.OnClickListener() {
 6                     @Override
 7                     public void onClick(DialogInterface dialog, int which) {
 8                         Toast.makeText(MainActivity.this, "好的", Toast.LENGTH_SHORT).show();
 9                     }
10                 });
11                 alterDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
12                     @Override
13                     public void onClick(DialogInterface dialog, int which) {
14                         Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
15                     }
16                 });
17                 alterDialog.show();  

复制代码

下面就是上面AlterDialog显示后的效果。

 

5.ProgressBar(进度条)

进度条,就是平时下载东西常见到表示下载进度的控件。ProgressBar和iOS中的UIProgressView类似,用法也是非常类似的。首先需要在Activity对应的Xml文件中对ProgressBar进行布局和样式的设定。下方是ProgressBar的布局和样式。

复制代码


1         <ProgressBar
2             android:id="@+id/my_progress_bar"
3             android:layout_width="match_parent"
4             android:layout_height="wrap_content"
5             style="?android:attr/progressBarStyleHorizontal"
6             android:max="200"/>  

复制代码

我们可以通过android:max来设定ProgressBar的进度最大值,而style可以给ProgressBar设定不同的样式。ProgressBar有多种样式,可以根据不同的场景来选择不同的样式,下方是可选样式。

在xml中配置好ProgressBar之后就可以在代码中通过ID获取,对ProgressBar进行一系列的操作了。下方的代码也是放在按钮的点击事件中,每点击一次进度条的进度就增加10,直到增到最大值时ProgressBar就会变成不可见。变为不可见后,接着就会把进度设置成0。

复制代码


1                 ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.my_progress_bar);
2                 myProgressBar.setProgress(myProgressBar.getProgress()+10);
3 
4                 if (myProgressBar.getProgress() == myProgressBar.getMax()) {
5                     myProgressBar.setVisibility(View.GONE);
6                     myProgressBar.setProgress(0);
7                 } else {
8                     myProgressBar.setVisibility(View.VISIBLE);
9                 }  

复制代码

 

6.ProgressDialog(进度提示框)

ProgressDialog说白了就是在AlterDialog上添加Progress, ProgressDialog不需要在xml中进行配置,直接在代码中进行生成即可。下方是在按钮点击的委托代理方法中添加的ProgressDialog,点击按钮时就显示ProgressDialog。

复制代码


 1     /**
 2      * Called when a view has been clicked.
 3      *
 4      * @param v The view that was clicked.
 5      */
 6     @Override
 7     public void onClick(View v) {
 8         switch (v.getId()){
 9             case R.id.click_button:
10 
11                 ProgressDialog myProgressDialog = new ProgressDialog(MainActivity.this);
12                 myProgressDialog.setTitle("ProgressDialog");
13                 myProgressDialog.setMessage("Loading……");
14                 myProgressDialog.setCancelable(true);
15                 myProgressDialog.show();
16 
17                 break;
18             default:
19                 break;
20         }
21     }  

复制代码

运行效果如下:

 

 

二、四大布局方式

有的地方介绍的是五大布局,因为还有一种是绝对布局(AbsoluteLayout)就是通过坐标和宽高来控制控件的位置,此布局方式在Android开发中已经被弃用了,所以不再今天的讨论范围之内。今天要介绍的布局方式有线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)。前两者是常用的,所以今天就着重的讨论一下LinearLayout。

说到Android中的布局方式我想对比一下iOS开发中的布局方式。可以说iOS布局中基本的有两种方式,一个是绝对布局,另一种就是相对布局。绝对布局就是通过Frame(x, y, width, height), 也就是给控件设置坐标原点以及宽高来确定控件的位置和大小。因为这种布局方式一旦设置Frame后,控件的位置和大小就固定了,所以被成为绝对布局。

另一种iOS中的布局方式就是相对布局了,在iOS开发中可以使用Autolayout + SizeClass来确定控件的位置和大小。我们可以给控件添加不同的约束(宽,高,上下左右边距,上下左右居中,垂直水平居中)等方式来控制控件的大小和位置。这种方式在屏幕适配时更为灵活,在iOS开发中也常常被使用到。关于响度布局iOS开发中你可以通过VFL(Visual format language)给控件添加约束,你也可以通过Storyboard以可视化的方式来进行约束的添加。

iOS的布局方式就先聊到这儿,接下来回到安卓的布局方式当中。在Android开发的几种布局方式当中,你不许指定控件的坐标点,也就是说你不许指定控件的位置,因为特定的布局方式有其特定计算控件坐标点的方法。但是在不同的布局方式中你需要为控件指定宽高。接下来具体的介绍一下Android开发中的布局方式。

 

1. LinearLayout (线性布局)

说到LinearLayout, 我想说一下流式布局。其实LinearLayout就是流式布局,流式布局有个特点,就是下一个控件的坐标原点由上一个控件来决定,你可以沿水平方向或者垂直方向上来排列你的控件。 如果你的控件是垂直排列的,那么你可以给控件指定水平的居中方式(这一点可能说起来抽象,下方会通过实例来进行介绍)。接下来将通过一系列的实例来介绍一下LinearLayout。

(1) 下方有张效果图,我们想实现下方布局方式,如果使用LinearLayout来实现该如何去做呢。

(2) 首先我们先分析布局方式,把每个块进行拆分,分析,然后通过LinearLayout进行组合在一块即可。我们对上述布局方式进行拆分,并且对使用的LinearLayout进行命名,并且指定子视图的布局方式(V-垂直,H-水平),具体的请看下图。最下方我们使用了一个水平布局的LinearLayout1, 在LinearLayout01上又有两个高度等于父视图高度的LinearLayout11和LinearLayout12,两者子控件的布局方式都设置为垂直排列。在LinearLayout12中又有两个子线性布局LinearLayout121和LinearLayout122, 这两个子布局沿垂直方向排列于父布局之上,并且宽度与父布局相等。

(3) 上方说了这么多了,那么接下来看一下上面布局的具体实现方式吧,其布局层次结构图如下所示

具体实现xml如下,在实现中你可以通过android:orientation属性来设置是水平(horizontal)线性排列还是垂直(vertical)线性排列。关于pt等这种单位,下篇博客会给大家详细的介绍一下。

复制代码


 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 3     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
 4     android:paddingRight="@dimen/activity_horizontal_margin"
 5     android:paddingTop="@dimen/activity_vertical_margin"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     tools:context="com.example.lizelu.userinterfacedemo.Main2Activity">
 8     <LinearLayout
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent">
11 
12         <!--垂直线性布局方式-->
13         <LinearLayout
14             android:layout_width="60pt"
15             android:layout_height="match_parent"
16             android:background="#ff0000"
17             android:orientation="vertical">
18         </LinearLayout>
19 
20         <LinearLayout
21             android:layout_width="match_parent"
22             android:layout_height="match_parent"
23             android:orientation="vertical">
24           
25             <LinearLayout
26                 android:layout_width="match_parent"
27                 android:layout_height="50pt"
28                 android:background="#0000ff"
29                 android:orientation="horizontal">
30             </LinearLayout>
31 
32             <LinearLayout
33                 android:layout_width="match_parent"
34                 android:layout_height="match_parent"
35                 android:background="#00ff00"
36                 android:orientation="horizontal">
37             </LinearLayout>
38         </LinearLayout>
39     </LinearLayout>
40 </RelativeLayout>  

复制代码

  

(4) 垂直布局控件的对齐方式(Left, Center, Right)。垂直布局的控件,我们可以对其指定水平方向的对对齐方式。为了说明这个问题我还是想画个图来解释一下这个看似简单的问题。我们可以通过控件的android:layout_gravity属性来指定对其方式。在垂直布局中,垂直方向的对齐方式(top, center, bottom)是不起作用的,因为垂直方向的位置已经有垂直线性布局所决定了,所以layout_gravity就不起作用了。

      

原理就先到这儿,接下来就是实现了,我们将在LinearLayout11布局中添加下方的子控件。每个子控件都指定了水平的对齐方式,具体代码如下所示:

复制代码


 1             <Button
 2                 android:layout_width="wrap_content"
 3                 android:layout_height="wrap_content"
 4                 android:layout_gravity="left"
 5                 android:text="aa"/>
 6             <Button
 7                 android:layout_width="wrap_content"
 8                 android:layout_height="wrap_content"
 9                 android:layout_gravity="center"
10                 android:text="bb"/>
11             <Button
12                 android:layout_width="wrap_content"
13                 android:layout_height="wrap_content"
14                 android:text="cc"
15                 android:layout_gravity="right"/>  

复制代码

添加代码后运行效果如下:

(5) 水平布局控件的对齐方式(Top, Center, Bottom)。如果控件是以水平的方式进行排列的,那么我们就可以对其指定垂直方向的对齐方式,即Top, Center和Bottom。也是通过android:layout_gravity属性来指定的。为了说明一下原理呢,我还是想用一张图来表达一下:

原理看完了,接下来按照上面的套路,我们以上面的布局和对齐方式,在LinearLayout121上添加三个上述布局的Button. 具体代码如下所示:

复制代码


 1                 <Button
 2                     android:layout_width="wrap_content"
 3                     android:layout_height="wrap_content"
 4                     android:layout_gravity="top"
 5                     android:text="aa"/>
 6                 <Button
 7                     android:layout_width="wrap_content"
 8                     android:layout_height="wrap_content"
 9                     android:text="bb"
10                     android:layout_gravity="center" />
11                 <Button
12                     android:layout_width="wrap_content"
13                     android:layout_height="wrap_content"
14                     android:layout_gravity="bottom"
15                     android:text="cc"/>  

复制代码

接下来就该运行了,下方是运行出来的结果:

 

(6)在线性布局中有一个不得不提的属性就是android:layout_weight, 该属性允许你以比例的形式来指定控件的大小。接下来我们要做的就是在LinearLayout122中添加三个水平方向上等分的按钮。使用android:layout_weight属性,很容易就可以实现,因为原理比较简单,就不画原理图了,下方是具体的xml实现:

复制代码


 1                 <Button
 2                     android:layout_width="0pt"
 3                     android:layout_height="wrap_content"
 4                     android:layout_weight="1"
 5                     android:text="你好"/>
 6 
 7                 <Button
 8                     android:layout_width="0pt"
 9                     android:layout_height="wrap_content"
10                     android:layout_weight="1"
11                     android:text="Android"/>
12 
13                 <Button
14                     android:layout_width="0pt"
15                     android:layout_height="wrap_content"
16                     android:layout_weight="1"
17                     android:text="iOS"/>  

复制代码

具体运行效果如下所示:

线性布局就先到这儿,因为线性布局方式在Android开发中经常使用到,所以介绍的会多一些。线性布局还有好多其他的用法,等后边博客中用到的时候会详细的介绍。

 

2.RelativeLayout (相对布局)

上面也说了一下相对布局, 相对布局的本质就是以不变应万变。也就是说相对布局可以根据已经固定的控件来确定其他新加控件的位置。相对布局用的还是蛮多的,接下来我们将通过一个实例来介绍一下RelativeLayout。

首先我们先来看一下我们要实现的效果,实现思路是我们先根据父视图的中心位置来确定center_button的位置,然后再由Center和Parent的位置来确定出其他按钮的位置,这就是相对布局。

在相对布局中,你可以设置的属性如下所示,还是蛮多的。在本篇博客中就不做一一介绍了,其用法都差不多。如下图所示:

实现上述效果的xml代码如下所示,相对布局使用起来和理解起来还是比较简单的。

复制代码


 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.example.lizelu.userinterfacedemo.Main3Activity">
 6 
 7     <Button
 8         android:id="@+id/button_center"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_centerInParent="true"
12         android:text="center"/>
13 
14     <Button
15         android:id="@+id/button_above"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:layout_above="@+id/button_center"
19         android:layout_centerInParent="true"
20         android:text="above"/>
21 
22     <Button
23         android:id="@+id/button_below"
24         android:layout_width="wrap_content"
25         android:layout_height="wrap_content"
26         android:layout_below="@+id/button_center"
27         android:layout_centerInParent="true"
28         android:text="below"/>
29 
30     <Button
31         android:id="@+id/button_left"
32         android:layout_width="wrap_content"
33         android:layout_height="wrap_content"
34         android:layout_toLeftOf="@+id/button_center"
35         android:layout_centerVertical="true"
36         android:text="left"/>
37 
38     <Button
39         android:id="@+id/button_right"
40         android:layout_width="wrap_content"
41         android:layout_height="wrap_content"
42         android:layout_toRightOf="@+id/button_center"
43         android:layout_centerVertical="true"
44         android:text="right"/>
45 
46 </RelativeLayout>  

复制代码

 

3.帧布局 (FrameLayout)

说到帧布局, 就比较简单了,而且比较好理解,并且帧布局的用处不是很多,但他的存在还是有他的必要性的。FrameLayout中的Frame和iOS中的Frame不是一个概念,在iOS中的Frame你可以指定任意的坐标,而这个坐标点时相对于父视图的。FrameLayout中的Frame的坐标原点是屏幕的左上角,位置固定,你只需为控件指定大小即可。接下来将通过一个实例来搞一下这个FrameLayout。

下面是使用FrameLayout做的一个效果,可以看出每块区域中除了大小颜色不一样外,他们的坐标点都是左上角的位置。这也是FrameLayout的特点,下面是运行效果截图:

实现上方布局的xml如下:

复制代码


 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 3     android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
 4     android:paddingRight="@dimen/activity_horizontal_margin"
 5     android:paddingTop="@dimen/activity_vertical_margin"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     tools:context="com.example.lizelu.userinterfacedemo.Main4Activity">
 8 
 9    <FrameLayout
10        android:layout_width="120pt"
11        android:layout_height="120pt"
12        android:background="#00ff00">
13        <FrameLayout
14            android:layout_width="100pt"
15            android:layout_height="100pt"
16            android:background="#00f0f0">
17        </FrameLayout>
18 
19        <FrameLayout
20            android:layout_width="80pt"
21            android:layout_height="80pt"
22            android:background="#0000ff">
23        </FrameLayout>
24 
25        <FrameLayout
26            android:layout_width="60pt"
27            android:layout_height="60pt"
28            android:background="#00ffff">
29        </FrameLayout>
30 
31        <FrameLayout
32            android:layout_width="40pt"
33            android:layout_height="40pt"
34            android:background="#000000">
35        </FrameLayout>
36 
37    </FrameLayout>
38 
39 </RelativeLayout>  

复制代码

 

4、表格布局(TableLayout)

如果你接触过Web前端的东西的话,虽然常用的时div + css , 但是Web前端也是有表格布局的。在安卓开发中的表格布局和Web前端中的表格布局的概念类似,也就是通过画表表格的方式来实现布局。 在表格布局中,整个页面就相当于一张大的表格,控件就放在每个Cell中。接下来我们就使用表格布局来画一个表格,感受一下表格布局。接下来我们将会使用表格布局来实现一个比较经典的“登录”页面,下方是简单画的要实现效果图:

由上图我们容易看出,上面就是一个表格结构。Table中有3行两列,登录按钮占了一个整行,其余控件都占了一列。上面的布局还是蛮简单的,说白了,再复杂的布局也是从简单做起的。下方是实现上面布局的XML代码。

复制代码


 1     <TableLayout
 2         android:layout_width="match_parent"
 3         android:layout_height="match_parent"
 4         android:stretchColumns="1">
 5         <TableRow>
 6             <TextView
 7                 android:layout_width="wrap_content"
 8                 android:layout_height="wrap_content"
 9                 android:text="用户名:"/>
10             <EditText
11                 android:layout_width="match_parent"
12                 android:layout_height="wrap_content"
13                 android:hint="请输入用户名"/>
14         </TableRow>
15 
16         <TableRow>
17             <TextView
18                 android:layout_width="wrap_content"
19                 android:layout_height="wrap_content"
20                 android:text="密   码:"/>
21             <EditText
22                 android:layout_width="match_parent"
23                 android:layout_height="wrap_content"
24                 android:hint="请输入密码"
25                 android:inputType="textPassword"/>
26         </TableRow>
27 
28         <TableRow>
29             <Button
30                 android:layout_height="wrap_content"
31                 android:layout_width="wrap_content"
32                 android:text="登录"
33                 android:layout_span="2"/>
34         </TableRow>
35 
36     </TableLayout>  

复制代码

其中android:stretchColumns="1"属性,表示让第一列(列数从零开始算起)拉伸,以达到视频屏幕的目的。所以你看到的输入框是充满后边整个屏幕的。登录按钮中这个属性android:layout_span="2" ,表明登录按钮跨两列。上述布局xml运行后的效果如下:

 

到此4种布局方式已介绍完毕,其实再复杂的布局也是从简单的开始。复杂的布局页面有可能上述四种布局方式都会用到。由简单到复杂这需要一个过程的,基础的会了之后,接下来就是如何去运用基础来构造更为复杂的布局方式。

上面实例Demo,GitHub分享链接:https://github.com/lizelu/AndroidBaseControlAndLayout

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android开发的之基本控件和详解四种布局方式 的相关文章

  • 汇编语言不带冒号标号的用法

    汇编语言中 xff0c 有一种编程方法 xff1a 直接定址表 这种方法和高级语言 xff0c C语言中的数组有类似的思想 xff0c 就是将参数编排在一起 xff0c 然后通过数组名的调用 xff0c 得到需要的数值 汇编语言中 xff0
  • 实战录 | 基于openflow协议的抓包分析

    实战录 导语 云端卫士 实战录 栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧 xff0c 希望对于关注我们的朋友有所裨益 本期分享人为云端卫士安全SDN工程师宋飞虎 xff0c 将带来基于openflow协议的抓包分析 一 什么是
  • 汇编中的标号

    当程序中要跳转到另一位置时 xff0c 需要有一个标识来指示新的位置 xff0c 这就是标号 xff0c 通过在目标地址的前面放上一个标号 xff0c 可以在指令中使用标号来代替直接使用地址 使用变量是任何编程语言都要遇到的工作 变量是计算
  • win32常用的汇编指令和寄存器

    通用寄存器 EAX 累加 Accumulator 寄存器 AX AH AL 常用于乘 除法和函数返回值 EBX 基址 Base 寄存器 BX BH BL 常做内存数据的指针 或者说常以它为基址来访问内存 ECX 计数器 Counter 寄存
  • win32汇编寄存器汇总

    32位CPU所含有的寄存器有 xff1a 4个数据寄存器 EAX EBX ECX和EDX 2个变址和指针寄存器 ESI和EDI 2个指针寄存器 ESP和EBP 6个段寄存器 ES CS SS DS FS和GS 1个指令指针寄存器 EIP 1
  • 汇编指令ebp与esp的关系与作用

    可以看到 xff0c 初始情况下 xff0c ebp此时值为0012FEDC xff0c 也就是栈帧的地址 xff0c 而栈顶地址esp值为0012FDFC 可以看到两个值有一定的关系 而 帧指针 的地址较高 然后我们让它执行前两句 xff
  • win32 汇编基础概念整理

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 xff0c 似乎IP也是寄存器 xff0c 但只有在CALL RET在中会默认使用它 xff0c 其它情况很少使用到 xff0c 暂时可以不用理会 E
  • 汇编中的寻址方式

    存储器 存储器 xff08 Memory xff09 是现代信息技术中用于保存信息的记忆设备 其概念很广 xff0c 有很多层次 xff0c 在数字系统中 xff0c 只要能保存二进制数据的都可以是存储器 xff1b 在集成电路中 xff0
  • x86的32位汇编快速入门

    本文描述基本的32位X86汇编语言的一个子集 xff0c 其中涉及汇编语言的最核心部分 xff0c 包括寄存器结构 xff0c 数据表示 xff0c 基本的操作指令 xff08 包括数据传送指令 逻辑计算指令 算数运算指令 xff09 xf
  • 80x86汇编指令详解

    80x86指令系统 xff0c 指令按功能可分为以下七个部分 1 数据传送指令 2 算术运算指令 3 逻辑运算指令 4 串操作指令 5 控制转移指令 6 处理器控制指令 7 保护方式指令 3 3 1数据传送指令 数据传送指令包括 xff1a
  • 汇编中addr和offset

    汇编中addr和offset的异同点 xff01 xff01 xff01 一 相同点 1 addr 和 offset 操作符都是获得操作数的偏移地址 xff1b 2 addr 和 offset 的处理都是先检查处理的是全局还是局部变量 xf
  • 汇编语言,数据段中,标号前面加不加offset有什么区别?

    data segment string db 40h dup 0 string 1 db 39 Input characters 39 0dh 39 39 data ends 那么 xff0c mov bx string 和 mov bx
  • SD-WAN如何推动企业上云

    企业上云是指企业将其业务系统 应用程序 数据等资源迁移到云端 xff08 云服务提供商的数据中心 xff09 xff0c 以实现更高效 灵活 安全 可靠的信息化运营和服务 麦肯锡公司发布了名为 企业上云2 0 xff1a 加速数字化转型 x
  • nvm常用命令,配置镜像

    1 配置镜像 阿里云 nvm npm mirror https npmmirror com mirrors npm nvm node mirror https npmmirror com mirrors node 腾讯云 nvm npm m
  • 汇编语言中MOV和OFFSET指令的两个问题?

    xff08 1 xff09 往段寄存器送段地址时要写成 MOV AX DATA MOV DS AX 不能写成 MOV DS DATA 这是为什么 xff1f 有人说由于段寄存只能进行16位的读写 xff0c 因此需要用ax来倒一下 xff0
  • C++动态链接库的制作

    输入函式 declspec dllimport 与输出函式 declspec dllexport 有什么区别呢 xff1f 我知道他们不同 xff0c 但差别在哪呢 我用的全是 declspec dllexport xff0c declsp
  • C#调用C++函数来与串口通信

    前些日子帮朋友写个小软件 xff0c 要求用C 来实现主程序 xff0c 主要的功能是与一些通信设备打交道 xff0c 当然就是通过串口了 xff0c 以十进制发送和读取串口 的数据 xff0c 考虑到C 调用API并没有C 43 43 来
  • c++获取系统错误提示!getLastError()

    void showError LPVOID lpMsgBuf FormatMessage FORMAT MESSAGE ALLOCATE BUFFER FORMAT MESSAGE FROM SYSTEM FORMAT MESSAGE IG
  • c++串口操作

    0 前言 做串口方面的程序 xff0c 使用CreateFile打开串口通信端口 在对串口操作之前 xff0c 需要首先打开串口 使用C 43 43 进行串口编程 xff0c 如果采用VS开发 xff0c 则可以直接借助于串口通信控件来操作
  • vs环境下C++dll生成和使用(基础篇)

    动态库和静态库 xff1a 动态库 xff1a 全名动态链接库 xff0c 用于将你的函数封装 xff0c 让别人只能调用 xff0c 不能看你的实现代码 由引入库和dll组成 xff1a 引入库包含导出的函数和变量名 xff0c dll包

随机推荐

  • #ifndef.#define, #endif 的用法

    文件中的 ifndef define endif 很关键 xff0c 是为了避免多重包含 xff0c 比如如果两个C文件同时包含同一头文件 xff0c 那么就会出现问题 xff0c 所以使用这种方法可以有效避免这种情况 一般用法 xff1a
  • 关于.NET编译的目标平台(AnyCPU,x86,x64)

    在VisualStudio中项目平台属性包含x86 x64 AnyCPU三个选项 xff0c 之前的项目中并没有特别去关注这一点 xff0c 最近的项目中涉及到了在不同平台运行的问题 xff0c 所以专门了解并整理了这方面的知识 x86 x
  • IP地址不是唯一的吗?为什么路由器的IP地址都是这样的呢?

    路由器同时连接外部网络和内部网络 xff0c 外部网络的IP是都不一样 xff0c 但内部网络的IP xff0c 就没有问题 xff0c 但内部网络所有设备的IP也不能相同 域名是对你的网站存放主机的ip的解析 xff0c 可以理解为你的别
  • HTTP简介

    HTTP协议是Hyper Text Transfer Protocol xff08 超文本传输协议 xff09 的缩写 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输超文本到本地浏览器的传送协议 H
  • OMF和flash_recovery_area的关系!

    在OMF出现之前 9i R1 oracle db的文件 xff0c 主要指dbf xff0c redo xff0c ctl是通过os管理的 xff0c 为了简化对数据库文件的管理 xff0c oracle引入了OMF 通过omf创建的dbf
  • asp.net发布网站的详细步骤

    1 用VS2013打开解决方案 2 选中解决方案 xff0c 点击鼠标 右键 gt 从弹出对话框中 xff0c 选择 清理解决方案 3 待第2步 清理解决方案 结束后 xff0c 选中 解决方案 gt 点击鼠标 右键 gt 在弹出对话框中
  • 域名和IP地址是一回事吗?建网站要买域名还要买IP地址吗?

    去年我在网通花了150元买了一个域名 xff0c 他们在登记单上的域名费一栏填了150元 xff0c 登记单上还有IP使用费一栏他们什么也没有填写 xff0c 如果域名与IP地址是同一个项目 xff0c 是一回事 xff0c 他们不是在重复
  • IIS服务器绑定域名问题

    不能将内网的IP地址和互联网的域名绑定 xff0c 如果这样做 xff0c 那么只有内网可以通过域名访问网站 xff0c 外网无法通过域名访问网站 域名ip地址绑定 xff0c 必须是固定ip地址 xff0c 还必须是公网ip地址 需要公网
  • asp网站配置错误解决汇总_1

    由于扩展配置问题而无法提供您请求的页面 如果该页面是脚本 请添加处理程序 错误 xff1a HTTP 错误 404 3 Not Found 由于扩展配置问题而无法提供您请求的页面 如果该页面是脚本 xff0c 请添加处理程序 如果应下载文件
  • 如何在本地服务器绑定域名及host文件的使用说明

    在本地服务器绑定域名 xff1a 打开C WINDOWS system32 drivers etc 目录下面的hosts文件 xff0c 把127 0 0 1 localhost复制 xff0c 粘贴到文件的最后 xff0c 然后把loca
  • 内网访问不到内网网站问题和不用端口号访问网站问题

    windows防火墙 xff0d 高级 xff0d 网络连接设置 xff0d 设置 xff0d 服务 xff0d web服务器 xff0c 在这个位置可以打开80端口 怎样让自建网站在内外网访问时不用加端口名 怎样让自建网站在内外网访问时不
  • vs2010本地调试打不开网页

    在C WINDOWS system32 drivers etc这个文件夹下 找到Hosts文件 用记事本打开 localhost设为127 0 0 1
  • asp文件上传和下载

    ASP NET实现上传文件 前端 界面十分简单 xff0c 只是放一个file类型的 lt input gt 和一个按钮 xff0c 并且为这个按钮添加点击事件 xff08 btnUpLoad Click xff09 xff0c 如下图 x
  • 安装包,创建快捷方式,开机启动项,配置文件参数覆盖窗体类库

    using IWshRuntimeLibrary using System using System Collections Generic using System ComponentModel using System Data usi
  • C#程序以管理员权限运行

    C 程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统 xff0c 增加了 UAC 用户账户控制 的安全机制 xff0c 如果 UAC 被打开 xff0c 用户即使以管理员权限登录 xff0c 其应用程序默认情
  • C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限

    写在前面 在windows系统中 xff0c c盘中的目录权限比较高 xff0c 有时制作安装包的时候 xff0c 默认的安装路径就是在c盘 xff0c 但对运行可执行文件 xff0c 有时候需要为其添加完全控制权限 xff0c 或者读写权
  • ASP.NET简易教程-页面布局

    页面布局 网上有太多介绍 xff0c 个人觉得不错的有 Div 43 CSS布局大全 xff0c 有PDF版本 xff0c 可下载离线观看 xff0c 别人总结的一个文档 xff0c 简洁易懂 xff0c 学起来不费劲 xff0c 花时间不
  • File.Create创建文件后,需要释放…

    if File Exists SavePath File Create SavePath Close
  • 最全CSS各种布局详解

    一 单列布局的实现 1 单列布局中最常用的水平居中的四种方法 同时设置父元素和子元素的样式 xff1a 父元素使用text align实现 xff0c 子元素使用inline block 这里宽高背景只是为了展示 parent text a
  • Android开发的之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同 xff0c 都是事件驱动 给控件添加事件也有接口回调和委托代理的方式 今天这篇博客就总结一下Android中常用的基本控件以及布局方式 说到布局方式Android和iOS还是