android基本布局有三种:LinearLayout,RelativeLayout,FrameLayout。

一、LinearLayout

1,这是一种垂直布局(或者水平布局),可以通过下面这一句来修改

android:orientation="horizontal"或者
android:orientation="vertical"

值得一提的是,layout_weight,它表示这个组件在整个LinearLayout中的比例。

例如,下面我插入了两个TextView,

<TextView
android:layout_weight="1"
android:background="#f00"
android:text="Hello World"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_weight="2"
android:background="#0f0"
android:text="Hello SW"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

一个layout_weight设置为1,另一个为2,那么它最终显示的比例会是1:2

另外,如果有一个没有设置android:layout_weight,那么就会像下面这样,hello sw大小与内容相适应

而剩下的内容全部被hello world占据

2,我们可以在xml中进行控件的拖拽,同时也可以在java代码中进行操作!

    我们可以定义一个LinearLayout,然后,通过setContentView塞进去。

 public class MainActivity extends AppCompatActivity implements View.OnClickListener {

     private LinearLayout root;
private Button btnClickme; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
      
root = new LinearLayout(this);
root.setOrientation(LinearLayout.VERTICAL);//决定垂直还是水平
setContentView(root); for(int i = 0;i<;i++){
btnClickme = new Button(this);
btnClickme.setText("Remove me" +i ) ;
         //依次添加时间监听器,点击取消
btnClickme.setOnClickListener(this);
        //可以通过下面这行代码确定控件的大小
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.weight = 1;
root.addView(btnClickme,lp);    //添加一个控件或者视图。第一个参数为需要添加的控件,第二个参数为大小
}
//root.addView(btnClickme); // root.addView(btnClickme,LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); // LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
// root.addView(btnClickme,lp); }
  
@Override
public void onClick(View v) {
root.removeView(v);
}
}

二,RelativeLayout

这个就是比较自由的布局模式,各个控件可以根据自己的喜好来摆放,这里就不放实例了。

同上面一样,我们可以通过代码对布局内的控件进行操作:

 public class RelativeLayoutAty extends AppCompatActivity {

     private RelativeLayout root;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); root = new RelativeLayout(this);
setContentView(root); tv = new TextView(this);
tv.setText("abc");
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.leftMargin = 200;
lp.topMargin = 500;
root.addView(tv,lp); }
}

3,FrameLayout

这个控件能够实现的功能,用RelativeLayout全都能实现,但是它比较轻量级,如果布局比较简单,使用它还是十分方便的!

以下面为例,我们在界面中放一张图片,当我们点击它时,我们就切换到下一张

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:id="@+id/root"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="examples.ouc.com.learnlayout.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"/> </FrameLayout>

layout文件

然后是实现代码

 public class FrameLayoutAty extends AppCompatActivity {

     private FrameLayout root;
private ImageView ivA,ivB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame_layout); ivA = (ImageView) findViewById(R.id.ivA);
ivB = (ImageView) findViewById(R.id.ivB);
root = (FrameLayout) findViewById(R.id.root); showA(); root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ivA.getVisibility() == View.VISIBLE){
showB();
}else{
showA();
}
}
});
}
private void showA(){
ivA.setVisibility(View.VISIBLE);
ivB.setVisibility(View.INVISIBLE);
}
private void showB(){
ivB.setVisibility(View.VISIBLE);
ivA.setVisibility(View.INVISIBLE);
}
}

FrameLayoutAty

在这里我犯了一个SB的错误,我把实现类的类名定义为了:FrameLayout,导致我在添加布局时候总是错误,因为定义root时候,AS会认为你是定义了一个i额类名!!!!

尴尬!!!肝疼。。。

最新文章

  1. kali 初始化
  2. Nginx启动报错: could not open error log file: open() &amp;q
  3. ASP.NET中Url编码解码
  4. 疯狂抨击ie6下各种扭曲行为
  5. Android 在程序中动态添加 View 布局或控件
  6. 制作第三方SDK静态库、.framework
  7. ubuntu系统软件
  8. HTTP缓存是如何实现
  9. Python之父Guido在最近一次采访的最后说了啥
  10. Installutil.exe的位置和路径
  11. SmartCoder每日站立会议10
  12. 【python学习笔记】9.魔法方法、属性和迭代器
  13. mybatis insertUseGeneratedKeys 返回主键为null
  14. MySQL字符串进行加减乘除的运算
  15. .net Core 下数据库访问
  16. HTML5 动画用 animation transform transition 做的两个例子
  17. 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
  18. 【工具大道】UML的点点滴滴
  19. 20165330 2017-2018-2 《Java程序设计》第7周学习总结
  20. mvc 之 配置EF+oralce

热门文章

  1. `UnityEditor.EditorUtility&#39; does not contain a definition for `GetMiniThumbnail&#39;
  2. [CentOS 7] 安装nginx
  3. eclipse svn提交报错
  4. 奇淫绝技:Mysql报错注入利用总结分享
  5. 开博客这么久以来,第一篇技术文章,python与c的接口对接
  6. ACCESS导入CSV文件出现乱码解决办法
  7. 为什么.Net要求序列化的类必须有一个无参数的构造函数
  8. Maven学习链接
  9. 安装LoadRunner提示缺少vc2005_sp1_with_atl..
  10. .NET中的yield关键字