Android 学习记录
布局管理器
wrap_content:包含的内容,内容有多少,宽度就有多少
match_parent:匹配负空间
宽度和高度使用的像素单位用的dp
,不用px是因为安卓的屏幕碎片化比较严重,不同的机型有不同的分辨率,最终展示的效果也不同,而dp会自动适应。字体大小单位为sp
。
<View/>
是所有空间的父类。
布局方式分为线性布局和相对布局;
线性布局LinerLayout
常用属性
属性 | 含义 |
---|---|
android:id |
设置id,以便于通过id找到对应空间(但是不能以数字开头) |
android:layout_width |
设置宽度 |
android:layout_height |
设置高度 |
android:background |
设置背景 |
android:layout_margin |
设置页面外边距 |
android:layout_padding |
设置页面内边距 |
android:orientation |
设置排列方式(水平排列/垂直排列)vertical / horizontal |
以下代码仅供参考:
<!--xml语法-->
<LinearLayout
android:id="@+id/ll_1"
android:layout_width="200dp" //设置宽度为200dp
android:layout_height="200dp" //设置高度为200dp
android:orientation="vertical" //设置水平排列
android:background="#000000" //设置背景颜色为黑色
android:paddingRight="20dp" //设置页内上边距为20dp
android:paddingLeft="20dp" //设置页内左边距为20dp
android:paddingTop="50dp" //设置页内上边距为50dp
android:paddingBottom="10dp" //设置页内下边距为20dp
android:layout_marginBottom="20dp" //设置页外下边距为20dp
android:gravity="center"> //设置为居中
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0033" />
</LinearLayout>
效果演示:
通过上面的简单小例子,我们基本上已经了解到了一些基本信息;接下来我们对整体布局的基本认识:
首先要知道,系统默认的布局为水平布局vertical
,horizontal
表示垂直布局
<!--xml语法-->
<LinearLayout
android:id="@+id/ll_1"
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:background="#000000"
android:paddingRight="20dp"
android:paddingLeft="20dp"
android:paddingTop="50dp"
android:paddingBottom="10dp">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0033"/>
</LinearLayout>
<!--xml语法 设置排列方式为垂直方向horizontal -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal"
android:background="#0066FF">
</LinearLayout>
系统默认是水平布局,这里我们修改为垂直布局:
<!--xml语法-->
android:orientation="vertical"
右边的绿色部分就显示了水平布局修改为垂直布局的全部过程;
那么如何修改各个模块之间的间距呢?Android为我们提供了方法。
常见的方法有:
<!--xml语法 上面模块设置为下面间距为20dp-->
android:layout_marginBottom="20dp"
<!--xml语法 下面模块设置为上面间距为20dp-->
android:layout_marginTop="20dp"
为了使每个板块的大小相同,如果我们手动设置宽度,比较麻烦,需要不停的调试修改,甚至最后边缘部分存在微小的缝隙;那应该怎么处理呢?我们可以通过 修改模块权重使得每个板块宽度相同,分布均匀;
<!--xml语法 以下代码都属于同一个LinerLayout下 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal"
android:background="#0066FF"
android:layout_marginTop="20dp">
//以下为主要部分
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#FFAA00"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#AA0011"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#FF00AA"
android:layout_weight="1"/>
</LinearLayout>
这里只需要修改android:layout_weight="1"
其中的数据即可,数字是可以任意的,上面有三个1,则每个是三分之一(1/3)。
<!--xml语法-->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/ll_1"
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:background="#000000"
android:paddingRight="20dp"
android:paddingLeft="20dp"
android:paddingTop="50dp"
android:paddingBottom="10dp"
android:layout_marginBottom="20dp"
>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0033" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal"
android:background="#0066FF"
android:layout_marginTop="20dp">
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#FF0033"
android:layout_weight="1"/>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#55AA99"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
相对布局RelativeLayout
初始代码:
<!--xml语法-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
常用属性介绍:
属性 | 含义 |
---|---|
android:layout_toEndOf |
设置在xx的右边 |
android:layout_toStartOf |
设置在xx的左边 |
android:layout_alignBottom |
设置底部对齐 |
android:layout_alignParentBottom |
设置负空间对齐 |
android:layout_below |
设置在xx的下面 |
常用属性的基本使用:
<!--xml语法-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view_1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#000000"/>
<View
android:id="@+id/view_2"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#FF0033"
android:layout_toEndOf="@id/view_1"/>
<View
android:id="@+id/view_3"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#33FF99"
android:layout_below="@id/view_1"/>
<LinearLayout
android:id="@+id/ll_1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@id/view_3"
android:background="#0066FF"
android:orientation="horizontal">
<View
android:id="@+id/view_4"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#FF69B4"/>
<RelativeLayout
android:id="@+id/rl_11"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:padding="15dp">
<View
android:id="@+id/view_5"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#FF9900"/>
<View
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#FF9900"
android:layout_toEndOf="@id/view_5"
android:layout_marginStart="10dp"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
常用控件(持续更新)
TextView
初始代码
<!--xml语法-->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
设置按钮组件
<!--xml语法-->
<Button
android:id="@+id/btn_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"/>
创建新的空白页面,并命名为TextViewActivity,创建相应的Activity后,进入对应生成的activity_text_view.xml文件中“配置”:
-
文字大小、颜色
<!--xml语法--> <TextView android:id="@+id/tv_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="IT-驿站 is running" android:textColor="#000000" android:textSize="24sp"/>
效果演示:
这里显示波浪线提示有更好的解决方法,建议使用引用的方法显示;
点击values.xml
文件,根据要求填写需要使用的文本即可:
-
显示不下使用….
<!--xml语法--> <TextView android:id="@+id/tv_2" android:layout_width="100dp" android:layout_height="wrap_content" android:maxLines="1" android:ellipsize="end" android:text="@string/tv_test1" android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
这里我们操作显示出来两行展示,但是我们的效果是一行展示不下,则在文字后面展示….的形式:
实际操作:
最后看见显示栏中出现了目测效果; -
文字 + icon
<!--xml语法--> <TextView android:id="@+id/tv_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tv_test2" android:drawableRight="@drawable/icon_arrow_off" android:drawablePadding="5dp" android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
效果演示:
-
中划线、下划线
package com.example.myapplication; import android.graphics.Paint; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class TextViewActivity extends AppCompatActivity { private TextView mTv4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_view); mTv4 = findViewById(R.id.tv_4); mTv4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //中划线 mTv4.getPaint().setAntiAlias(true); //去除锯齿 } }
<!--xml语法--> <TextView android:id="@+id/tv_4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tv_test1" android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
效果演示:
下划线
方法一:
package com.example.myapplication; import android.graphics.Paint; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class TextViewActivity extends AppCompatActivity { private TextView mTv4; private TextView mTv5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_view); mTv4 = findViewById(R.id.tv_4); mTv4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //中划线 mTv4.getPaint().setAntiAlias(true); //去除锯齿 mTv5 = findViewById(R.id.tv_5); mTv5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); } }
<!--xml语法--> <TextView android:id="@+id/tv_5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tv_test1" android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
方法二:采用HTML编写
package com.example.myapplication; import android.graphics.Paint; import android.os.Bundle; import android.text.Html; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class TextViewActivity extends AppCompatActivity { private TextView mTv4; private TextView mTv5; private TextView mTv6; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_view); mTv4 = findViewById(R.id.tv_4); mTv4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //中划线 mTv4.getPaint().setAntiAlias(true); //去除锯齿 mTv5 = findViewById(R.id.tv_5); mTv5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); mTv6 = findViewById(R.id.tv_6); mTv6.setText(Html.fromHtml("<u>IT-驿站 is running</u>")); } }
<!--xml语法--> <TextView android:id="@+id/tv_6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" //这里不填写内容 android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
效果演示:
-
跑马灯
<!--xml语法--> <TextView android:id="@+id/tv_7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="IT-驿站 is running IT-驿站 is running IT-驿站 is running" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:textColor="#000000" android:textSize="24sp" android:layout_marginTop="10dp"/>
代码操作+效果演示: