文章目录
1、LinearLayout
(1)LinearLayout又称作线性布局,子对象水平排开或垂直排开;
android:orientation属性可以设置是水平方向线性排开还是垂直方向水平排开;
(2)android:layout_gravity属性用于指定控件在布局中的对齐方式;它的可选值和android:gravity(用于指定文字在控件中的对齐方式)差不多;需要注意的是,当LinearLayout排列方向是horizontal时,只有垂直方向的对齐方向才有效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式;反之,同;
(3)android:layout_weight比较有用的一个属性:比重
这个属性允许我们使用比例的方式来指定控件的大小,它在手机的适配性方面可以起到非常重要的作用;
比重:android:layout_weight =“1”,分割父级容器的比例,不写比重这个属性表示不参与父级容器的分割,会以内容为主;
简单小例子:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="前往"
/>
</LinearLayout>
<WebView
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
2、用代码控制子对象
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private LinearLayout root;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
root = new LinearLayout(this);//创建线性布局
root.setorientation(LinearLayout.VERTICAL);//设置布局方式为垂直布局
setContentView(root);
for(int i=0;i<10;i++) {
btn = new Button(this);
btn.setText("remove me");
btn.setonClickListener(this);
//root.addView(btn);
//root.addView(btn,300,200);//把子对象添加进来
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.weight = 1;//让其均匀分割父级容器
root.addView(btn,lp);
}
}
@Override
public void onClick(View v) {
root.removeView(v);
}
}
3、RelativeLayout(相对布局)
后添加的控件会叠在上面,Button的优先级比较高;
它可以通过相对定位让控件出现在布局的任何位置,因此它的属性比较多;
控件可以相对于父布局来进行定位,也可以相对于控件来进行定位;
比如android:layout_alignParentLeft让控件和父布局的左上角对齐;
android:layout_above属性可以让一个控件在另一个控件的上方;
android:layout_alignLeft属性表示让一个控件的左边缘和另一个控件的左边缘对齐;
4、FrameLayout(作帧布局)
能调整的位置非常有限,它的功能用RelativeLayout是完全可以替代的,但相对于RelativeLayout比较轻量级,速度快;
用android:layout_gravity可以来指定控件在属性中的对齐方式;由于定位方式的欠缺,FrameLayout应用场景相对少一些;
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root"
tools:context=".FrameLayoutAty">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/img1"
android:id="@+id/ivA"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/img2"
android:visibility="invisible"
android:id="@+id/ivB"
/>
public class FrameLayoutAty extends AppCompatActivity {
private FrameLayout fl;
private ImageView ivA,ivB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame_layout_aty);
fl = (FrameLayout) findViewById(R.id.root);
ivA = findViewById(R.id.ivA);
ivB = findViewById(R.id.ivB);
showA();
fl.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ivA.getVisibility()==View.VISIBLE){
showB();
}else {
showA();
}
}
});
}
public void showA(){
ivA.setVisibility(View.VISIBLE);
ivB.setVisibility(View.INVISIBLE);
}
public void showB(){
ivB.setVisibility(View.VISIBLE);
ivA.setVisibility(View.INVISIBLE);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。