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

    尴尬!!!肝疼。。。

  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/icyhusky/p/6063113.html
Copyright © 2011-2022 走看看