Android Studio开辟学习(五)———LinearLayout(线性结构)

打印 上一主题 下一主题

主题 658|帖子 658|积分 1984

一、结构

        认识了解一下Android中的结构,分别是inearLayout(线性结构),RelativeLayout(相对结构),TableLayout(表格结构), FrameLayout(帧结构),AbsoluteLayout(绝对结构),GridLayout(网格结构) 等。

二、LinearLayout详解

1.常见属性

(1)id值: android:id="@+id/"

        id相当于一个标识,方便后期写代码时找到
  1. android:id="@+id/linearlayuot"
复制代码
(2)结构宽度:android:layout_width;结构高度:android:layout_height

        这两个属性一般放在一起写,且必须设定,内里的值可以任意举行调解,可以是与父组件相同的match_parent,也可以是顺应自身大小的wrap_content,还可以是各种数值,如50dp,100dp;其中dp是一种屏幕密度的抽象单位。
  1. // match_parent:与父组件相同
  2. // wrap_content:适应自身大小
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
复制代码
(3)外边距:android:layout_margin;内边距:android:padding


外边距
android:layout_margin整体距离
android:layout_marginTop顶部距离
android:layout_marginLeft  / android:layout_marginStart左部距离
android:layout_marginRight  /  android:layout_marginEnd右部距离
android:layout_marginBottom底部距离 
内边距
android:padding
整体距离
android:paddingTop顶部距离
android:paddingLeft  /  android:paddingStart左部距离
android:paddingRight  /  android:paddingEnd右部距离
android:paddingBottom底部距离
标注:左右的距离有两种表现形式,以左为例,一种是Left一种是Start,这里主要是跟版本有关,4.2以上用Start取代Left,同理右部。
(4)定位:andoridrientation

简单明白就是控件怎么结构,它有两个属性,程度的horizontal,垂直的vertical。
  1. <!-- android:orientation="vertical" 垂直-->
  2.     <LinearLayout
  3.         android:layout_width="match_parent"
  4.         android:layout_height="400dp"
  5.         android:orientation="vertical"
  6.         >
  7.         <androidx.appcompat.widget.AppCompatButton
  8.             android:layout_width="wrap_content"
  9.             android:layout_height="wrap_content"
  10.             android:background="@color/blue"
  11.             />
  12.         <androidx.appcompat.widget.AppCompatButton
  13.             android:layout_width="wrap_content"
  14.             android:layout_height="wrap_content"
  15.             android:background="@color/pink"
  16.             />
  17.         <androidx.appcompat.widget.AppCompatButton
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:background="#00FF99"
  21.             />
  22.         <androidx.appcompat.widget.AppCompatButton
  23.             android:layout_width="wrap_content"
  24.             android:layout_height="wrap_content"
  25.             android:background="#AA6699"
  26.             />
  27.     </LinearLayout>
复制代码

  1. <!-- android:orientation="horizontal" 水平-->
  2.     <LinearLayout
  3.         android:layout_width="match_parent"
  4.         android:layout_height="400dp"
  5.         android:orientation="horizontal"
  6.         >
  7.         <androidx.appcompat.widget.AppCompatButton
  8.             android:layout_width="wrap_content"
  9.             android:layout_height="wrap_content"
  10.             android:background="@color/blue"
  11.             />
  12.         <androidx.appcompat.widget.AppCompatButton
  13.             android:layout_width="wrap_content"
  14.             android:layout_height="wrap_content"
  15.             android:background="@color/pink"
  16.             />
  17.         <androidx.appcompat.widget.AppCompatButton
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:background="#00FF99"
  21.             />
  22.         <androidx.appcompat.widget.AppCompatButton
  23.             android:layout_width="wrap_content"
  24.             android:layout_height="wrap_content"
  25.             android:background="#AA6699"
  26.             />
  27.     </LinearLayout>
复制代码


在一个结构中只能有一种分列方式,要么垂直要么程度,如果想多实现,可以多用几个结构,分模块的举行结构管理 。
(5)对齐方式:andorid:gravity  

对齐方式就是结构中的控件所在的位置,我们现在主要的阅读方式为从左向右,从上向下,所以,再添加控件时,会主动的放于左上角,牢记第一条属性是写在大结构中的,而不是单个的控件中,以此段代码为例,第二个可以放置在控件中调解位置,在此处我们以第一种方式为例,由于内容大同小异,只是编写的位置差异罢了 
  1.     <LinearLayout
  2.         android:layout_width="match_parent"
  3.         android:layout_height="400dp"
  4.         android:orientation="vertical"
  5.         android:gravity="center"
  6.         >
  7.         <androidx.appcompat.widget.AppCompatButton
  8.             android:layout_width="wrap_content"
  9.             android:layout_height="wrap_content"
  10.             android:background="@color/blue"
  11.             />
  12.         <androidx.appcompat.widget.AppCompatButton
  13.             android:layout_width="wrap_content"
  14.             android:layout_height="wrap_content"
  15.             android:background="@color/pink"
  16.             />
  17.         <androidx.appcompat.widget.AppCompatButton
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:background="#00FF99"
  21.             />
  22.         <androidx.appcompat.widget.AppCompatButton
  23.             android:layout_width="wrap_content"
  24.             android:layout_height="wrap_content"
  25.             android:background="#AA6699"
  26.             />
  27.     </LinearLayout>
复制代码
对齐方式
andorid:gravity="center"整体居中
andorid:gravity="left"  /  andorid:gravity="start"  /  andorid:gravity="top"左部
andorid:gravity="right"  /  andorid:gravity="end"右部
andorid:gravity="bottom"底部
andorid:gravity="center_horizontal"程度居中
andorid:gravity="center_vertical"垂直居中
2.权重:andorid:layout_weight

权重就是控件所占剩余结构的比例题目,怎样分配题目
  1.     <LinearLayout
  2.         android:layout_width="match_parent"
  3.         android:layout_height="match_parent"
  4.         android:orientation="horizontal"
  5.         android:background="#e50c0c"
  6.         >
  7.         <LinearLayout
  8.             android:layout_width="0dp"
  9.             android:layout_height="fill_parent"
  10.             android:background="#ffc0cb"
  11.             android:layout_weight="1"  />
  12.         <LinearLayout
  13.             android:layout_width="0dp"
  14.             android:layout_height="fill_parent"
  15.             android:background="#0000ff"
  16.             android:layout_weight="1"  />
  17.     </LinearLayout>
复制代码
权重andorid:layout_weight=”“的值是可以任意界说的,内里的数字相当于权重,设置的数字相加为整个结构的大小,比如以上代码为例,第一个控件权重为1,第二个也为1,也就是说整个结构大小为2,两个控件各占1,数字可以任意更改,控件也可以任意添加,重要的是美观如下图

将一个控件的权重设置为2,则它 占整个结构的三分之二

0dp的设置一般情况都是由于权重题目,这样便可以按照自己所设置的比例举行显示,程度结构设置width,垂直结构设置height=0dp。
前面提到了权重是占剩余部分的占据比例,是由于我们在筹划时不愿定都是0dp,有大概提前某个控件设置了长度或是高度,这时,如果我们再用权重属性,分开的就是整个结构剩下没有占用的部分,例如:同样的代码,我将第一个LinearLayout的宽度提前设置了200dp。现在来看看结果
  1.     <LinearLayout
  2.         android:layout_width="match_parent"
  3.         android:layout_height="match_parent"
  4.         android:orientation="horizontal"
  5.         android:background="#e50c0c"
  6.         >
  7.         <LinearLayout
  8.             android:layout_width="200dp"
  9.             android:layout_height="fill_parent"
  10.             android:background="#ffc0cb"
  11.             android:layout_weight="1"  />
  12.         <LinearLayout
  13.             android:layout_width="0dp"
  14.             android:layout_height="fill_parent"
  15.             android:background="#0000ff"
  16.             android:layout_weight="2"  />
  17.     </LinearLayout>
复制代码


 第一个控件先占了整个结构的一部分,剩余的部再举行分割。
附加:Java代码中设置weight属性

1.在activity_main.xml文件中新建一个<LinearLayout>
  1.     <LinearLayout
  2.         android:id="@+id/abc"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="match_parent"
  5.         android:orientation="horizontal"
  6.         android:background="#e50c0c"
  7.         >
  8.     </LinearLayout>
复制代码
2.在 MainActivity.java 文件中设置weight
  1. package com.example.example;
  2. import android.os.Bundle;
  3. import android.widget.Button;
  4. import android.widget.LinearLayout;
  5. import androidx.appcompat.app.AppCompatActivity;
  6. public class MainActivity extends AppCompatActivity {
  7.     @Override
  8.     protected void onCreate(Bundle savedInstanceState) {
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.activity_main);
  11.         
  12.         // 创建一个 LinearLayout 对象
  13.         LinearLayout linearLayout = new LinearLayout(MainActivity.this);
  14.         // 设置 LinearLayout 的布局方向为垂直
  15.         linearLayout.setOrientation(LinearLayout.VERTICAL);
  16.         // 创建一个按钮对象
  17.         Button button = new Button(MainActivity.this);
  18.         button.setText("点击");
  19.         // 创建 LinearLayout.LayoutParams 对象并设置相应参数
  20.         LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
  21.                 LinearLayout.LayoutParams.MATCH_PARENT,
  22.                 LinearLayout.LayoutParams.WRAP_CONTENT
  23.         );
  24.         layoutParams.weight = 1.0f;
  25.         // 将布局参数应用到按钮上
  26.         button.setLayoutParams(layoutParams);
  27.         // 将按钮添加到 LinearLayout 中
  28.         linearLayout.addView(button);
  29.         LinearLayout rootLayout = findViewById(R.id.abc);
  30.         // 将 LinearLayout 添加到活动的根布局中
  31.         rootLayout.addView(linearLayout);
  32.     }
  33. }
复制代码
 3.运行应用 即可

3. 为LinearLayout设置分割线 

(1)直接在结构中添加一个view

  1. <LinearLayout
  2.     android:layout_width="match_parent"
  3.     android:layout_height="wrap_content"
  4.     android:orientation="vertical"
  5.     android:layout_marginTop="16dp"
  6.     android:layout_marginBottom="16dp">
  7.     <!-- 添加一条细线作为背景 -->
  8.     <View
  9.         android:layout_width="match_parent"
  10.         android:layout_height="1dp"
  11.         android:background="#000000" />
  12.     <!-- 在这里添加其他布局元素 -->
  13. </LinearLayout>
复制代码

(2)第二种是使用LinearLayout的一个divider属性

直接为LinearLayout设置分割线 这里就需要自己准备一张线的图片了
a. android:divider 设置作为分割线的图片
 src/main/res/drawable 下面创建 ktv_line_div.xml 内容为:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:shape="rectangle">
  4.     <solid android:color="#808080" /> <!-- 灰色背景 -->
  5.     <size android:height="1dp" /> <!-- 定义细线高度为1dp -->
  6. </shape>
复制代码
b. android:showDividers 设置分割线的位置,none(无),beginning(开始),end(结束),middle(每两个组件间)
c. android:dividerPadding 设置分割线的可以控制分隔线与子视图之间的间距,使结构在显示分隔线时具有更机动的表面结果,主要用于 AdapterView(如ListViewGridView)中的分隔线样式
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:id="@+id/LinearLayout1"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:divider="@drawable/ktv_line_div"
  6.     android:orientation="vertical"
  7.     android:showDividers="middle"
  8.     android:dividerPadding="10dp"  >
  9.     <Button
  10.         android:layout_width="wrap_content"
  11.         android:layout_height="wrap_content"
  12.         android:text="按钮1" />
  13.     <Button
  14.         android:layout_width="wrap_content"
  15.         android:layout_height="wrap_content"
  16.         android:text="按钮2" />
  17. </LinearLayout>
复制代码
应用之后就可以看到细线

4. 留意事项

使用Layout_gravity的一个很重要的题目
题目内容: 在一个LinearLayout的程度方向中布置两个TextView,想让一个左,一个右,怎么搞? 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="horizontal"  >
  6.     <TextView
  7.         android:layout_width="wrap_content"
  8.         android:layout_height="200dp"
  9.         android:layout_gravity="left"
  10.         android:background="#ffc0cb"
  11.         android:gravity="center"
  12.         android:text="~~~~~~~pink......" />
  13.     <TextView
  14.         android:layout_width="wrap_content"
  15.         android:layout_height="200dp"
  16.         android:layout_gravity="right"
  17.         android:background="#0000ff"
  18.         android:gravity="center"
  19.         android:text="~~~~~~~blue......" />
  20. </LinearLayout>
复制代码
运行结果:

 看到这里,大概会想在外层LinearLayout加个 android:gravity="left" 的属性,然后设置第二个 TextView的 android:layout_gravity  为 android:layout_gravity=“right" 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="horizontal"  
  6.     android:gravity="left"   >
  7.     <TextView
  8.         android:layout_width="wrap_content"
  9.         android:layout_height="200dp"
  10.         android:layout_gravity="left"
  11.         android:background="#ffc0cb"
  12.         android:gravity="center"
  13.         android:text="~~~~~~~pink......" />
  14.     <TextView
  15.         android:layout_width="wrap_content"
  16.         android:layout_height="200dp"
  17.         android:layout_gravity="right"
  18.         android:background="#0000ff"
  19.         android:gravity="center"
  20.         android:text="~~~~~~~blue......" />
  21. </LinearLayout>
复制代码
运行结果没变化:

   小编想说当  androidrientation="vertical" 时, 只有程度方向的设置才起作用,垂直方向的设置不起作用。 即: left , right , center_horizontal  是见效的。 当  androidrientation="horizontal" 时, 只有垂直方向的设置才起作用,程度方向的设置不起作用。 即: top , bottom , center_vertical  是见效的。
  当改成  androidrientation="vertical" 时,看一下结果:

   综上可看出,仍然没有实现想要对结果,像这种情况是建议使用 RelativeLayout(相对结构)
  非要用LinearLayout的办理的话也可以:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:id="@+id/LinearLayout1"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:orientation="horizontal" >
  6.     <TextView
  7.         android:layout_width="0dp"
  8.         android:layout_height="200dp"
  9.         android:layout_weight="1"
  10.         android:background="#0000ff"
  11.         android:gravity="center"
  12.         android:text="O(∩_∩)O哈哈~" />
  13.     <View
  14.         android:layout_width="0dp"
  15.         android:layout_height="0dp"
  16.         android:layout_weight="1" />
  17.     <TextView
  18.         android:layout_width="130dp"
  19.         android:layout_height="200dp"
  20.         android:background="#ffc0cb"
  21.         android:gravity="center"
  22.         android:text="(*^__^*) 嘻嘻……" />
  23. </LinearLayout>
复制代码
在两个 TextView 之间添加了一个空的 View,并将它的 layout_weight 设置为 1。这样第二个 TextView 就会被挤到右边,并且两个 TextView 以及中间的 View 将占据同样的空间,实现了程度方向上的靠右对齐。

三、总结




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表