zoukankan      html  css  js  c++  java
  • 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塞进去。

     1 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     2 
     3     private LinearLayout root;
     4     private Button btnClickme;
     5 
     6     @Override
     7     protected void onCreate(Bundle savedInstanceState) {
     8         super.onCreate(savedInstanceState);
     9       
    10         root = new LinearLayout(this);
    11         root.setOrientation(LinearLayout.VERTICAL);//决定垂直还是水平
    12         setContentView(root);
    13 
    14       for(int i = 0;i<5;i++){
    15           btnClickme = new Button(this);
    16           btnClickme.setText("Remove me" +i ) ;
    17          //依次添加时间监听器,点击取消
    18           btnClickme.setOnClickListener(this);
    19         //可以通过下面这行代码确定控件的大小
    20           LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    21           lp.weight = 1;
    22           root.addView(btnClickme,lp);    //添加一个控件或者视图。第一个参数为需要添加的控件,第二个参数为大小
    23       }
    24         //root.addView(btnClickme);
    25 
    26        // root.addView(btnClickme,LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    27 
    28 //        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
    29 //        root.addView(btnClickme,lp);
    30 
    31 
    32     }
    33   
    34     @Override
    35     public void onClick(View v) {
    36         root.removeView(v);
    37     }
    38 }

    二,RelativeLayout

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

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

     1 public class RelativeLayoutAty extends AppCompatActivity {
     2 
     3     private RelativeLayout root;
     4     private TextView tv;
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8 
     9         root = new RelativeLayout(this);
    10         setContentView(root);
    11 
    12         tv = new TextView(this);
    13         tv.setText("abc");
    14         RelativeLayout.LayoutParams lp =  new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    15         lp.leftMargin = 200;
    16         lp.topMargin = 500;
    17         root.addView(tv,lp);
    18 
    19     }
    20 }

    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文件

    然后是实现代码

     1 public class FrameLayoutAty extends AppCompatActivity {
     2 
     3     private FrameLayout root;
     4     private ImageView ivA,ivB;
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_frame_layout);
     9 
    10         ivA = (ImageView) findViewById(R.id.ivA);
    11         ivB = (ImageView) findViewById(R.id.ivB);
    12         root = (FrameLayout) findViewById(R.id.root);
    13 
    14         showA();
    15 
    16         root.setOnClickListener(new View.OnClickListener() {
    17             @Override
    18             public void onClick(View v) {
    19                 if(ivA.getVisibility() == View.VISIBLE){
    20                     showB();
    21                 }else{
    22                     showA();
    23                 }
    24             }
    25         });
    26     }
    27     private void showA(){
    28         ivA.setVisibility(View.VISIBLE);
    29         ivB.setVisibility(View.INVISIBLE);
    30     }
    31     private void showB(){
    32         ivB.setVisibility(View.VISIBLE);
    33         ivA.setVisibility(View.INVISIBLE);
    34     }
    35 }
    FrameLayoutAty

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

    尴尬!!!肝疼。。。

  • 相关阅读:
    subprocess 子进程模块
    3.5 魔法方法
    ThinkPHP中,display和assign用法详解
    linux常用指令
    退出当前Mysql使用的db_name 的方式
    PHP中GD库是做什么用的? PHP GD库介绍11111111
    include跟include_once 以及跟require的区别
    全局变量跟局部变量
    关于define
    创建、删除索引---高级部分
  • 原文地址:https://www.cnblogs.com/icyhusky/p/6063113.html
Copyright © 2011-2022 走看看