RelativeLayout佈局
RelativeLayout:相對佈局,相對於上級或者平行級控件的位置。
常見屬性
相對其他視圖
- layout_toLeftOf:指定視圖的左側
- layout_toRightOf:指定視圖的右側
- layout_above:指定視圖的上方
- layout_below:指定視圖的下方
- layout_alignLeft:指定視圖左側對齊
- layout_alignRight:指定視圖右側對齊
- layout_alignTop:指定視圖右頂部對齊
- layout_alignBottom:指定視圖底部對齊
注:藍色長方形爲基準,黃色長方形爲屬性設置
相對於上級視圖
- layout_centerInParent:在上級視圖中間
- layout_centerHorizontal:在上級視圖水平方向居中
- layout_centerVetical:在上級視圖垂直方向居中
- layout_alignParentTop:與上級視圖頂部對齊
- layout_alignParentBottom:與上級視圖底部對齊
- layout_alignParentLeft:與上級視圖左邊對齊
- layout_alignParentRight:與上級視圖右邊對齊
CheckBox
主要作用:複選框
常見屬性
- checked
- button
響應事件:設置勾選狀態監聽器
- 獲取CheckBox
- 添加事件
- 執行業務邏輯
Toast
主要作用:提示信息
用法:
Toast.makeText (彈出界面,消息,顯示時間). show() ;
Log
主要作用:打印日誌
用法:
- Log.v的調試,任何消息都會輸出
- Log.d的調試,僅輸出debug調試的意思
- Log.i的調試,一般提示性的消息information
- Log.w的調試,可以看作爲warning警告
- Log.e爲紅色,可以想到error錯誤
代碼部分:
part1:
activity_main.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">
<Button
android:id="@+id/relativeParent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相對於父類視圖">
</Button>
<Button
android:id="@+id/relativeOthers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相對於其他視圖">
</Button>
<Button
android:id="@+id/checkboxButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="複選框">
</Button>
</LinearLayout>
效果圖:
activity_relative_parent.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">
<!-- 注:align強於center -->
<!-- layout_centerInParent:在上級視圖中間 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="centerInParent"
android:textSize="20sp"
android:background="#8A00D4"
android:layout_centerInParent="true">
</TextView>
<!-- layout_centerHorizontal:在上級視圖水平方向居中 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="centerHorizontal"
android:textSize="20sp"
android:background="#00BCD4"
android:layout_centerHorizontal="true">
</TextView>
<!-- layout_centerVertical:在上級視圖垂直方向居中 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="centerVertical"
android:textSize="20sp"
android:background="#6025CA"
android:layout_centerVertical="true">
</TextView>
<!-- layout_alignParentTop:與上級視圖頂部對齊 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Top"
android:textSize="20sp"
android:background="#D4D400"
android:layout_alignParentTop="true">
</TextView>
<!-- layout_alignParentBottom:與上級視圖底部對齊 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom"
android:textSize="20sp"
android:background="#FF5722"
android:layout_alignParentBottom="true">
</TextView>
<!-- layout_alignParentLeft:與上級視圖左邊對齊 (默認)-->
<!--<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Left"
android:textSize="20sp"
android:background="#0091D4"
android:layout_alignParentLeft="true">
</TextView>-->
<!-- layout_alignParentRight:與上級視圖右邊對齊 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Right"
android:textSize="20sp"
android:background="#43EDC6"
android:layout_alignParentRight="true">
</TextView>
<!-- layout_alignParentRight與layout_centerVertical合併 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="and"
android:textSize="20sp"
android:background="#AA4AF8"
android:layout_alignParentRight="true"
android:layout_centerVertical="true">
</TextView>
<!-- alignParentRight與layout_alignParentBottom合併 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="and"
android:textSize="20sp"
android:background="#FFC107"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true">
</TextView>
<!-- layout_centerHorizontal與layout_alignParentBottom合併 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="and"
android:textSize="20sp"
android:background="#FF9800"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true">
</TextView>
</RelativeLayout>
效果圖:
activity_relative_others.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">
<!--
位置:
layout_above:指定視圖的上方
layout_below:指定視圖的下方
layout_toLeftOf:指定視圖的左側
layout_toRightOf:指定視圖的右側
對齊方式:
layout_alignTop:指定視圖右頂部對齊
layout_alignBottom:指定視圖右底部對齊
layout_alignLeft:指定視圖右側對齊
layout_alignRight:指定視圖左側對齊
-->
<!-- 上方 -->
<View
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#ED4242"
android:layout_above="@+id/baseView">
</View>
<!-- 下方 -->
<View
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#FF6C22"
android:layout_below="@+id/baseView">
</View>
<!-- 左方 -->
<View
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#FFFF22"
android:layout_toLeftOf="@+id/baseView">
</View>
<!-- 右方 -->
<View
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#61FF22"
android:layout_toRightOf="@+id/baseView">
</View>
<!-- 合併 -->
<View
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#124EBD"
android:layout_marginTop="20dp"
android:layout_below="@+id/baseView"
android:layout_centerHorizontal="true">
</View>
<!-- 基準View -->
<View
android:id="@+id/baseView"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#9B3E0C59"
android:layout_centerInParent="true">
</View>
</RelativeLayout>
效果圖:
activity_check_box.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">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="#000000"
android:text="請選擇興趣愛好:">
</TextView>
<CheckBox
android:id="@+id/basketball"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打籃球"
android:layout_marginTop="10dp"
android:layout_below="@+id/title">
</CheckBox>
<CheckBox
android:id="@+id/football"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="踢足球"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/basketball"
android:layout_below="@+id/title">
</CheckBox>
<CheckBox
android:id="@+id/playGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打王者"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/football"
android:layout_below="@+id/title">
</CheckBox>
<Button
android:id="@+id/submitButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
android:layout_centerInParent="true">
</Button>
</RelativeLayout>
效果圖:
part2:
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//跳轉相對父級佈局的界面
findViewById(R.id.relativeParent).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, RelativeParentActivity.class);
startActivity(intent);
}
});
//跳轉相對其他控件佈局的界面
findViewById(R.id.relativeOthers).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, RelativeOthersActivity.class);
startActivity(intent);
}
});
//跳轉複選框的界面
findViewById(R.id.checkboxButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CheckBoxActivity.class);
startActivity(intent);
}
});
}
}
RelativeParentActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class RelativeParentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_relative_parent);
}
}
RelativeOthersActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class RelativeOthersActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_relative_others);
}
}
CheckBoxActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class CheckBoxActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
private List<String> hobbies = new ArrayList<>();
private static final String TAG = "CheckBoxActivity"; //log如果多次使用,每次使用都創建一次tag,故定義常量且名字一般爲類名
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_box);
//1.監聽checkbox,並將興趣愛好收集起來
final CheckBox checkBox = findViewById(R.id.basketball);
checkBox.setOnCheckedChangeListener(this);
CheckBox checkBox1 = findViewById(R.id.football);
checkBox1.setOnCheckedChangeListener(this);
CheckBox checkBox2 = findViewById(R.id.playGame);
checkBox2.setOnCheckedChangeListener(this);
//2.點擊按鈕提示所選的內容
findViewById(R.id.submitButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, hobbies.toString()); //tag爲前綴;Logcat中查看(Debug級別)
Toast.makeText(CheckBoxActivity.this, hobbies.toString(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//判斷是否選中,選中添加到集合中去,沒選中移除集合
if (isChecked) {
hobbies.add(buttonView.getText().toString());
} else {
hobbies.remove(buttonView.getText().toString());
}
}
}
效果圖: