Android
线性布局
- 简介:LinearLayout 布局,中文线性布局,其主要特征是主要以水平火垂直方式来显示页面中的控件,水平:从左到右,垂直:从上到下,线性布局中,每行或者每列仅允许有一个子视图或者控件。
- 主要属性:
android:gravity:设置内部控件的显示位置。(比如center是居中)
android:orientation:设置内部空间的排列方向,常量horizontal(默认值)表示水平排列,vertical表示垂直排列。
android:layout_weight:设置内部控件在LinearLayout中所占的权重。当控件使用这个属性的时候建议将对应的宽或者高改成0dp(水平布局改宽,垂直布局改高),当每一个控件设置了权重后,在页面中就是按照权重比例占据位置了 - 举例:
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Button" />
<Button
android:id="@+id/button4"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="Button" />
<Button
android:id="@+id/button5"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="Button" />
</LinearLayout>
效果如下:
约束布局
- 简介:ConstraintLayout中文约束布局,其相对其他布局来说,有着更加自由的布局方式,不需要多层嵌套便可以实现比较复杂的布局,而且性能方面更占优势(我怎么感觉这玩意无敌了)
- 标签:
<androidx.constraintlayout.widget.ConstraintLayout
</androidx.constraintlayout.widget.ConstraintLayout>
- 拖拽添加约束:
直接托进去俩个button会报错,因为其横纵都没约束。
在工具栏这里我们可以看到一个魔法棒是自动添加约束,魔法棒左边是删除所有约束
不过自动添加这种事情,当然弊端很多还不够“智能”,所以我们选择手动
如下图图中上下左右四个点,直接托起来拖到其他控件的对应点上,就是相对控件的相对位置,拖到边界,就是相对边界的位置。(这不香的厉害)
我这边简单拖了俩个后,可以看到右边的属性检视部分出现了对应的约束属性
- 辅助工具的使用:
工具栏里的这个小玩意就是添加约束辅助的()
具体怎么用,真的就一句话:有手就行,所以我也不多说什么了,自己摸一下就行,太人性化了实在。(小提示,点击界面旁边的小三角可以改变辅助线的类型,但有些情况可能会改变不了,比如我
所以我就去摸了下它生成的xml文件,一个百分比约束的辅助线大概如下
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
Group和Barrier暂时不是很需要,我就没多摸,也不细说了(回头用到再更)
帧布局
-
简介:帧布局是一种层叠式布局,把俩个控件叠在一起,然后控制其的显示状态来达成显示效果。
-
属性:
android:layout_gravity:控制控件的位置
值得注意的是这个属性是相对父控件来说的,也就是说一个按钮相对其父物体来说的位置
相应的还有一个属性android:gravity:属性是相对控件本身来说的,比如一个按钮中的文字相对按钮本身的位置top:位于布局顶端 bottom:位于布局底部 left:位于布局左侧 right:位于布局右侧 center:位于布局最中间 center_vertical:位于垂直方向上的中间位置,单独使用时等价于"bottom|center_vertical" center_horizontal:位于水品方向上的中间位置,单独使用时等价于"top|center_horizontal"
android:visibility:
View.VISIALBE 可见,显示到页面
View.INVISIABLE 不可见,但是还是占用本有的位置
View.GONE 隐藏,不可见且不占位置
- 举例
这边举个例子,说下怎么用这个帧布局
写一个帧布局,为其添加俩个图片叠在一起(这里我放了一个金星星,一个银星星),然后放了一个按钮,改变了一下位置,打开Mian的java脚本,删除里面院有的东西,添加进按钮和图片的变量,使用id寻找到布局中的那些控件,然后给button添加一个监听,让其检测到点击后根据点积次数来决定显示谁。
XML代码如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView3"
android:layout_width="150dp"
android:layout_height="132dp"
app:srcCompat="@android:drawable/btn_star_big_on" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="150dp"
android:layout_height="132dp"
app:srcCompat="@android:drawable/btn_star_big_off" />
<Button
android:id="@+id/button6"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</FrameLayout>
java代码如下
package com.example.helloandroid;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private Button button;
private ImageView imageView1,imageView2;
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ll3);
//找组件
button = (Button)findViewById(R.id.button6);
imageView1 = (ImageView)findViewById(R.id.imageView4);
imageView2 = (ImageView)findViewById(R.id.imageView3);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (count % 2 == 0) {
imageView1.setVisibility(View.VISIBLE);
imageView2.setVisibility(View.INVISIBLE);
} else {
imageView2.setVisibility(View.VISIBLE);
imageView1.setVisibility(View.INVISIBLE);
}
count++;
}
}
);
}
}
表格布局
- 简介:TableLayout中文表格布局,像他的名字一样,这种布局整体就像是一个表格,每一行都是由一个TableRow对象来组成,而列数取决于所有TableRow对象中所拥有控件最多的那个控件数。
- 一些属性:
对某一列来说
android:stretchColumns:设置该列被拉伸
android:shrinkColumns:设置该列被收缩
android:collapseColumns:设置该列被隐藏
对某个单元来说
android:layout_column:设置该单元显示位置(显示在哪列)
android:layout_span:设置该单元格占据几列,默认为1列
对于TableRow来说
andorid:gravity:设置该行控件内容的显示方式(比如居中,相关关键词参照帧布局那边)