一.相关知识点
1.布局特点
在相对布局中,一个控件的位置取决于它和其他控件的相对关系
- 优点:使用比较灵活
- 缺点:复杂,比较难
2.主要代码
Relative
3、常用属性
(1)相对于父容器居中
layout_centerInParent 在父容器居中
layout_centerHorizontal 在父容器水平居中
layout_centerVertical 在父容器垂直居中
(2)相对于其它控件的位置
layout_toLeftOf 在……左边
layout_toRightOf 在……右边
layout_above 在……上面
layout_below 在……下面
(3)相对于其它控件对齐
layout_alignLeft 与……左对齐
layout_alignRight 与……右对齐
layout_alignTop 与……顶对齐
layout_alignBottom 与……底对齐
layout_alignBaseLine 与……基线对齐
(4)相对于父容器对齐
layout_alignParentLeft 与父容器左对齐
layout_alignParentRight 与父容器右对齐
layout_alignParentTop 与父容器顶对齐
layout_alignParentBottom 与父容器底对齐
(5)标识符问题
@+id/button —— 创建新的id(建议使用)
@id/button —— 引用已有的id
4.实训案例
(1)创建安卓项目
(2)在字符资源里面定义变量string
<resources>
<string name="app_name">相对布局:输入姓名</string>
<string name="username">姓名:</string>
<string name="name">请输入姓名</string>
<string name="sure">确定</string>
<string name="cancel">取消</string>
</resources>
(3)主布局资源文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
tools:ignore="NotSibling,UnknownId">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/username"
android:textSize="22dp"
android:layout_toLeftOf="@id/input"
android:layout_alignBaseline="@id/input"
android:layout_alignBottom="@id/input"/>
<EditText
android:id="@+id/input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/name"
android:textSize="22dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/blow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/top">
<Button
android:id="@+id/TopLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/TopRight"
android:text="@string/sure" />
<Button
android:id="@+id/TopRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:text="@string/cancel" />
</RelativeLayout>
</RelativeLayout>
- 总共分为两个部分,所以需要两个
- 首先观察第一个需要layout_alignParentRight 和layout_alignParentTop
- 在父容器的右上角
- 和需要layout_alignBaseLine 与……基线对齐
- 这样才能在同一水平线上
-
需要在的左边那么就需要用到ayout_toLeftOf 在……左边
(4)编写登录界面代码
package net.yuanjing.relatively;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText Username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Username = findViewById(R.id.input);
}
public void doLogin (View view) {
String username = Username.getText().toString().trim();
if (!"".equals(username)) {
Intent intent = new Intent(MainActivity.this, Input.class);
intent.putExtra("Username", username);
startActivity(intent);
} else {
Toast.makeText(this,"提交失败,请将信息补充完整哦~",Toast.LENGTH_SHORT).show();
}
}
public void doCancel(View view) {
finish();
}
}
(5)编写跳转后的界面
package net.yuanjing.relatively;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class Input extends AppCompatActivity {
private TextView tvMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input);
tvMessage = findViewById(R.id.tv_Message);
Intent intent = getIntent();
if (intent != null) {
String Username = intent.getStringExtra("username");
String message = "姓名:" + Username;
tvMessage.setText(message);
}
}
}
- 在这里定义一个变量Message,后面直接将内容用tvMessage.setText(message);命令,直接转到页面。