ScrolIView和HorizontalScrolIView【滚动视图】
- ScrollView(垂直方向)
- HorizontalScrolIView(水平方向)
搭建个人用户中心
Intent
- Intent用于处理各组件之间的通信
主要组成部分:
- 标明通信请求从哪里来、到哪里去、怎么走
- 发起方携带数据内容,接收方解析数据包
- 发起方接收接收方的返回结果
常见属性
属性 | 方法 | 说明 |
---|---|---|
Component | setCompoent | 组件,用于指定Intent的来源与目的 |
Action | setAction | 动作,用于指定Intent的操作行为 |
Data | setData | Uri,用于指定动作要操纵的数据路径 |
Extras | putExtra | 扩展信息,用于装载参数信息 |
显式的使用Intent
- 在构造函数中指定跳转
- 使用setClass指定跳转
- 使用setComponent指定跳转
隐式的使用Intent
- 不指定明确的指定要跳转的类名
- 举例:打电话
向下一个Activity传递参数
- 添加参数
- 解析参数
- Bundle
向上一个Activity返回参数
- 发起方调用startActivityForResult (intent, requestCode)
- 发起方重写onActivityResult (requestCode, resultCode, data)
- 接收返回数据
Spinner(下拉框)
- 数组适配器ArrayAdapter的实现
- 简单适配器SimpleAdapter的实现
- 监听事件
- 下拉框和弹框实现
代码部分:
part1:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/scrollViewDemo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示ScrollView"
android:textAllCaps="false"/>
<Button
android:id="@+id/userCenterDemo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示用户中心界面跳转"/>
<Button
android:id="@+id/callButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示打电话"/>
<Button
android:id="@+id/paramButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示传递和接收参数"/>
<Button
android:id="@+id/paramBackButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示参数回传"></Button>
<Button
android:id="@+id/spinnerButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="演示下拉框"/>
</LinearLayout>
效果图:
activity_scroll_view.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">
<!--
ScrollView:垂直方向滚动
注意点:
1.高度一定是自适应内容,宽度不做要求
2.只有一个根视图
-->
<ScrollView
android:id="@+id/scrollView"
android:layout_width="200dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="500dp"
android:background="#000000"/>
<View
android:layout_width="match_parent"
android:layout_height="500dp"
android:background="#D51919"/>
</LinearLayout>
</ScrollView>
<!--
HorizontalScrollView:水平方向上的滚动视图
注意点:
1.宽度要自适应内容,高度没有要求
2.只有一个根视图
-->
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_toRightOf="@+id/scrollView">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<View
android:layout_width="800dp"
android:layout_height="match_parent"
android:background="#23DA2A"/>
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
效果图:
ScrollViewActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class ScrollViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scroll_view);
}
}
part2:
activity_user_center.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">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="头像"
android:layout_gravity="center_vertical"
android:paddingLeft="15dp"
android:textSize="18sp"
android:textColor="#000000"/>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center_vertical"
android:src="@drawable/icon"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="个人主页背景"
android:textSize="18sp"
android:textColor="#000000"
android:gravity="center_vertical"
android:paddingLeft="15dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="昵称"
android:textSize="18sp"
android:textColor="#000000"
android:gravity="center_vertical"
android:paddingLeft="15dp"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="今晚打老虎"
android:textSize="18sp"
android:gravity="center_vertical|right"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="性别"
android:textSize="18sp"
android:textColor="#000000"
android:paddingLeft="15dp"
android:gravity="center_vertical"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="男"
android:textSize="18sp"
android:gravity="center_vertical|right"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="个人介绍"
android:textSize="18sp"
android:textColor="#000000"
android:paddingLeft="15dp"
android:gravity="center_vertical"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="身高八斗、长相帅气、聪明机智..."
android:textSize="18sp"
android:gravity="center_vertical|right"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="#E8E5E5"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="生日"
android:textSize="18sp"
android:textColor="#000000"
android:paddingLeft="15dp"
android:gravity="center_vertical"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2002-05-26"
android:textSize="18sp"
android:gravity="center_vertical|right"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="常居地"
android:textSize="18sp"
android:textColor="#000000"
android:paddingLeft="15dp"
android:gravity="center_vertical"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="滨州"
android:textSize="18sp"
android:gravity="center_vertical|right"
android:layout_marginRight="10dp"/>
<ImageView
android:layout_width="20dp"
android:layout_height="match_parent"
android:src="@drawable/point"
android:layout_marginRight="15dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E8E5E5"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
效果图:
UserCenterActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class UserCenterActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_center);
}
}
icon.png
point.png
part3:
效果图:
part4:
activity_param_send.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ParamSendActivity">
<TextView
android:id="@+id/userInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
效果图:
ParamSendActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class ParamSendActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_param_send);
//解析参数
Intent intent = getIntent();
// Bundle bundle = intent.getBundleExtra("userInfo");
Bundle bundle = intent.getExtras();
String username = bundle.getString("username", "没有人");
int age = bundle.getInt("age", 19);
// String username = intent.getStringExtra("username");
// int age = intent.getIntExtra("age",18);
//塞值给TextView
TextView textView = findViewById(R.id.userInfo);
textView.setText("用户是:" + age + "岁的" + username);
}
}
效果图:
part5:
activity_param_back.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/paramTextView"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="演示返回参数"
android:textSize="30sp"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="按钮1"
android:textSize="25sp"
android:layout_below="@id/paramTextView"
android:layout_marginTop="30dp"
android:layout_marginLeft="30dp"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="按钮2"
android:textSize="25sp"
android:layout_below="@id/paramTextView"
android:layout_marginTop="30dp"
android:layout_alignParentRight="true"
android:layout_marginRight="30dp"/>
</RelativeLayout>
效果图:
ParamBackActivity.java
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ParamBackActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_param_back);
//按钮1点击事件
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ParamBackActivity.this, NicknameActivity.class);
startActivityForResult(intent, 1); //requestCode:取值范围0-60000多
}
});
//按钮2点击事件
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ParamBackActivity.this, NicknameActivity.class);
startActivityForResult(intent, 2);
}
});
}
/**
* 处理返回的参数
* @param requestCode 请求的code
* @param resultCode 结果的code
* @param data 返回的参数
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String nickname = data.getStringExtra("nickname");
if (requestCode == 1) {
nickname = "按钮一" + nickname;
} else {
nickname = "按钮二" + nickname;
}
//获取返回结果,并填充TextView
TextView textView = findViewById(R.id.paramTextView);
textView.setText(nickname);
}
}
activity_nickname.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">
<EditText
android:id="@+id/nicknameEditText"
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请输入昵称"
android:inputType="text"
android:layout_centerHorizontal="true"
android:layout_marginTop="200dp"/>
<Button
android:id="@+id/confirmButton"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_alignLeft="@id/nicknameEditText"
android:layout_alignRight="@id/nicknameEditText"
android:layout_below="@id/nicknameEditText"
android:layout_marginTop="30dp"
android:text="确定"
android:textSize="25sp"/>
</RelativeLayout>
效果图:
NicknameActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class NicknameActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nickname);
findViewById(R.id.confirmButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取EditText的内容并返回数据
EditText editText = findViewById(R.id.nicknameEditText);
String nickname = editText.getText().toString();
//返回数据
Intent intent = new Intent();
intent.putExtra("nickname", nickname);
setResult(0, intent);
//关闭界面
finish();
}
});
}
}
效果图:
按钮1:
按钮2:
part6:
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
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);
//跳转ScrollView演示界面
findViewById(R.id.scrollViewDemo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ScrollViewActivity.class);
startActivity(intent);
}
});
//跳转用户中心界面
findViewById(R.id.userCenterDemo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1.构造函数的时候指定跳转
// Intent intent = new Intent(MainActivity.this, UserCenterActivity.class);
//2.setClass的形式进行跳转
// Intent intent = new Intent();
// intent.setClass(MainActivity.this, UserCenterActivity.class);
//3.setComponent的形式进行跳转
Intent intent = new Intent();
ComponentName componentName = new ComponentName(MainActivity.this, UserCenterActivity.class);
intent.setComponent(componentName);
startActivity(intent);
}
});
//演示Intent的隐式使用
findViewById(R.id.callButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//实现打电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL); //设置打电话:CALL:直接打电话;DIAL:准备打电话
Uri uri = Uri.parse("tel:15555555555555"); //格式:tel:+phone number(注:中间使用英文下的冒号!!!)
intent.setData(uri);
startActivity(intent);
}
});
//演示传递参数和接收参数
findViewById(R.id.paramButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ParamSendActivity.class);
//使用Extras
// intent.putExtra("username", "张三");
// intent.putExtra("age", 18);
//使用Bundle
Bundle bundle = new Bundle();
bundle.putString("username", "李四");
bundle.putInt("age", 18);
// intent.putExtra("userInfo", bundle);
intent.putExtras(bundle);
startActivity(intent);
}
});
//演示参数回传
findViewById(R.id.paramBackButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ParamBackActivity.class);
startActivity(intent);
}
});
//演示下拉选
findViewById(R.id.spinnerButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SpinnerActivity.class);
startActivity(intent);
}
});
}
}
activity_spinner.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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="40dp">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="性别"
android:textSize="25sp"
android:gravity="center_vertical"/>
<Spinner
android:id="@+id/sexSpinner"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:spinnerMode="dialog"/>
</LinearLayout>
</RelativeLayout>
效果图:
select_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="男"
android:textSize="25sp"
android:textColor="#000000"/>
效果图:
drop_view.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="男"
android:textSize="25sp"
android:textColor="#000000"
android:gravity="center_horizontal"/>
效果图:
SpinnerActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
public class SpinnerActivity extends AppCompatActivity {
private List<String> sexList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
//初始化数据
sexList.add("男");
sexList.add("女");
sexList.add("保密");
//创建ArrayAdapter
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.select_view, sexList);
arrayAdapter.setDropDownViewResource(R.layout.drop_view);
//初始化Spinner
Spinner spinner = findViewById(R.id.sexSpinner);
spinner.setAdapter(arrayAdapter); //设置适配器
spinner.setPrompt("请选择性别"); //设置标题
spinner.setSelection(0); //设置默认值
}
}
效果图: