Android基本布局
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基本布局的更多相关文章
- 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff5d53bbcffd68c64411 作者:黄进——QQ音乐团队 摆脱 ...
 - Xamarin.Android之布局文件智能提示问题
		
一.前言 看到有人问关于xamarin.android的布局没智能提示问题(VS 2015),当然,写布局这东西没提示这是一件相对痛苦的事 ,所以这里就提供一个解决的方案! 二.解决方案 想要智能提示 ...
 - android—-线性布局
		
android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...
 - android layout布局属性
		
参考:http://blog.csdn.net/msmile_my/article/details/9018775 第一类:属性值 true或者 false android:lay ...
 - Android 学习第10课,Android的布局
		
Android的布局 线性布局
 - Android 优化布局层次结构
		
前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...
 - Android 五大布局
		
Android 五大布局: FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),Table ...
 - Android界面布局基本知识简述
		
Android手机操作系统在模拟器中进行相关的编写,可以帮助我们实现各种功能需求.尤其是在界面的操作方面显得更为突出.在这里我们就可以对Android界面布局的相关操作来对这方面的知识进行一个深入的了 ...
 - android的布局管理器
		
理论上通过setContentView(view)能够把一个view设置到activity中,但当你有很多个view控件的时候,就需要用android的布局管理器来管理view控件了. android ...
 
随机推荐
- message from server: "Host 'XXX' is not allowed to connect to this MySQL server
			
Access denied for user 'root'@'XXXXX' (using password: YES) mysql命令不正确造成: grant all privileges on *. ...
 - 《基于Apache Kylin构建大数据分析平台》
			
Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...
 - 简化通过classname查找 方法
			
function getClass(oParent,sclass){ var aEle=oParent.getElementsByTagName('*'); var result=[]; for(va ...
 - java map的默认排序问题
			
import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...
 - 数位DP入门
			
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
 - 从HTML到HTML
			
从HTML到HTML 当你在使用一些模板软件,如Thymeleaf的时候,了解web的标准,HTML家族的内部是十分重要的,至少如果你想知道自己在做什么的时候. 问题是,每个人都知道他们正在使用一些技 ...
 - 大米网赚项目介绍,官方唯一客服QQ:712994168
			
大米平台项目来源 QQ:712994168 大米软件本质上是一个高质量网赚项目收集和发布平台,该平台的所有项目都是经过专业的测试团队实测有效的项目和教程,只要去做绝对可以赚钱.平台里面的项目类型包 ...
 - 用volley在Genymotion上获取网页源码
			
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdUAAALUCAIAAADSbz+YAAAgAElEQVR4nOydeVwT197/R+9zu9zluU
 - jquery 巧用json传参
			
JavaScript代码,巧用JSON传参数function AddComment(content) { var comment = {}; comment.threadId = $("#s ...
 - 【Python⑤】python序列---list和tuple
			
sequence 序列 sequence(序列)是一组有顺序的对象的集合.序列可以包含一个或多个元素,也可以没有任何元素. 我们之前所说的基本数据类型,都可以作为序列的对象.对象还可以是另一个序列.序 ...