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额类名!!!!

尴尬!!!肝疼。。。

Android基本布局的更多相关文章

  1. 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff5d53bbcffd68c64411 作者:黄进——QQ音乐团队 摆脱 ...

  2. Xamarin.Android之布局文件智能提示问题

    一.前言 看到有人问关于xamarin.android的布局没智能提示问题(VS 2015),当然,写布局这东西没提示这是一件相对痛苦的事 ,所以这里就提供一个解决的方案! 二.解决方案 想要智能提示 ...

  3. android—-线性布局

    android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...

  4. android layout布局属性

    参考:http://blog.csdn.net/msmile_my/article/details/9018775 第一类:属性值 true或者 false           android:lay ...

  5. Android 学习第10课,Android的布局

    Android的布局 线性布局

  6. Android 优化布局层次结构

    前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...

  7. Android 五大布局

    Android 五大布局:  FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),Table ...

  8. Android界面布局基本知识简述

    Android手机操作系统在模拟器中进行相关的编写,可以帮助我们实现各种功能需求.尤其是在界面的操作方面显得更为突出.在这里我们就可以对Android界面布局的相关操作来对这方面的知识进行一个深入的了 ...

  9. android的布局管理器

    理论上通过setContentView(view)能够把一个view设置到activity中,但当你有很多个view控件的时候,就需要用android的布局管理器来管理view控件了. android ...

随机推荐

  1. gdb 常用内容

    gdb exegdb exe coregdb -p info m TAB ^関数の先頭 info b ^list the breakpoint set args -a test ^引数設定 show ...

  2. javascript实现简单的轮播图片

    方法一: <script> var curIndex=0;//时间间隔(单位毫秒),每秒钟显示一张,数组共有5张图片放在Photos文件夹下. var timeInterval=1000; ...

  3. 网上找的Gif图片解析类

    这个是搜到的大部分的答案 下面贴出来代码 public class MyGifView extends View { private long movieStart; private Movie mo ...

  4. Laravel RuntimeException inEncrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths

    php artisan key:generate 运行上面代码即可解决

  5. WPF:指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效的解决方法

    文/嶽永鹏 WPF 数据绑定中绑定到ENTITY,如果把数据文件做成一个类库,在UI文件中去应用它,可能遇到下面这种情况. 指定的命名连接在配置中找不到.非计划用于 EntityClient 提供程序 ...

  6. Java—图形处理

    抽象窗口化工具(AWT)为图形用户界面编程提供API编程接口,使得Java可以提供较好的图形用户界面. AWT把图形处理分为两个层次:一是处理原始图形,这一层较原始,图形直接以点.线和面的形式画到界面 ...

  7. 将centos7打造成桌面系统

    前言以下所有操作默认在root权限下执行,桌面环境是kde,使用gnome的也可以参考一下.我收集的以下要用到的一些安装包,360网盘http://yunpan.cn/csMhBAp92vTgN 提取 ...

  8. 关于app隐私设置跳转

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]] ...

  9. guava学习--FutureCallback

    转载:https://my.oschina.net/realfighter/blog/349929 Guava提供了 FutureCallback接口,FutureCallback接口提供了onSuc ...

  10. nginx、Apache、IIS服务器解决 413 Request Entity Too Large问题方法汇总

    一.nginx服务器 nginx出现这个问题的原因是请求实体太长了.一般出现种情况是Post请求时Body内容Post的数据太大了,如上传大文件过大.POST数据比较多. 处理方法 在nginx.co ...