学习进度条
今日所花时间:一小时
今日代码量:100行
博客量:一篇
了解到的知识点:深入学习androidStudio
创建一个项目
其中res下的value文件夹中的strings.xml中代码可以书写一些常用的字符串
例子:
<resources>
<string name="app_name">demo1</string>
<string name="hello">hello world</string>
</resources>
可以在activity_main.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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//调用
android:text="@string/hello"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
以下文件是一个启动文件在哪个activity文件下那哪个文件就是启动的activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
LinearLayout
<!--LinearLayout是线性布局-->
<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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
按照以上代码设置宽度
android:padding="10dp"
设置图片为背景
android:background="@drawable/ic_launcher_background"
RelativeLayout
<!--RelativeLayout是相对布局-->
要设置类似以下内容(指明位置情况,指明布局)
android:layout_below="@id/tv_1"
登录操作
MainActivity
package com.example.demo1;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.demo1.FunctionActivity;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
//声明控件
private Button mBtnLogin;
private EditText mEtUser;
private EditText mEtPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
//找到控件
mBtnLogin = findViewById(R.id.btn_login);
mEtUser = findViewById(R.id.et_1);
mEtPassword = findViewById(R.id.et_2);
//实现直接跳转——————法一
// mBtnLogin.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Intent intent = null;
// intent = new Intent(MainActivity.this,FunctionActivity.class);
// startActivity(intent);
// }
// });
//匹配对应的用户名和秘密才能进行跳转操作
mBtnLogin.setOnClickListener(this::onclick);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
private void onclick(View v){
//需要获取输入的用户名和密码
String username = mEtUser.getText().toString();
String password = mEtPassword.getText().toString();
Intent intent = null;
//假设正确的账号和密码分别是hyn 123456
if (username.equals("hyn")&& password.equals("123456")){
//如果正确的话进行跳转
intent = new Intent(MainActivity.this,FunctionActivity.class);
startActivity(intent);
}else{
//不正确,弹出登录失败toast
}
}
}
FunctionActivity
package com.example.demo1;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class FunctionActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_function);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
}
}
activity_function.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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
tools:context=".FunctionActivity">
<TextView
android:id="@+id/tv_func_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="跳转后界面"
android:textSize="25dp"
android:layout_gravity="center"
android:textColor="@color/black"
/>
</LinearLayout>
activity_main.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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:background="@color/cardview_light_background"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxEms="2"
android:maxLines="1"
android:text="@string/hyn"
android:textColor="#00838F"
android:textSize="18sp"
android:gravity="center"/>
<!-- <TextView-->
<!-- android:id="@+id/tv_2"-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="Hello World!"-->
<!-- android:textColor="#d21015"-->
<!-- android:textSize="20sp"-->
<!-- android:maxEms="10"-->
<!-- android:maxLines="2"-->
<!-- android:ellipsize="end"-->
<!-- />-->
<EditText
android:id="@+id/et_1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="16sp"
android:textColor="@android:color/black"
android:hint="用户名"
android:maxLines="1"
android:padding="5dp"
android:layout_marginTop="10dp"
/>
<EditText
android:id="@+id/et_2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="16sp"
android:textColor="@android:color/black"
android:hint="密码"
android:maxLines="1"
android:padding="5dp"
android:layout_marginTop="5dp"
android:inputType="textPassword"
android:background="@drawable/bg_username"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp"
>
<Button
android:id="@+id/btn_login"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="登录"
android:layout_gravity="center"
android:background="@drawable/btn_left"
/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="注册"
android:layout_marginLeft="2dp"
android:background="@drawable/btn_right"
/>
</LinearLayout>
</LinearLayout>
Toast弹窗
if (username.equals("hyn")&& password.equals("123456")){
//toast普通版
Toast.makeText(getApplicationContext(),ok,Toast.LENGTH_SHORT).show();
//如果正确的话进行跳转
intent = new Intent(MainActivity.this,FunctionActivity.class);
startActivity(intent);
}else{
//不正确,弹出登录失败toast
// 提升版,居中显示
Toast toastCenter = Toast.makeText(getApplicationContext(),fail,Toast.LENGTH_SHORT);
toastCenter.setGravity(Gravity.CENTER,0,0);
toastCenter.show();
}
Toast封装
package com.example.demo1.util;
import android.content.Context;
import android.widget.Toast;
public class ToastUtil {
public static Toast mToast;
public static void showMsg(Context context, String msg){
if(mToast == null){
mToast = Toast.makeText(context,msg,Toast.LENGTH_SHORT);
}else{
mToast.setText(msg);
}
mToast.show();
}
}
实现侧滑
1.讲解对应的java文件如何实现
2.涉及到Menu也就是两个布局文件的转换的java代码
3.讲解一个漂亮的跳转写法**
1.setlistener--setOnClickListerner
2.Onclick-intent(通过的是getD-对应不同的intent)**不要忘了最后的startactivity
3.onCreate里面要网用我们的setListener
package com.example.demo1;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
public class SlideActivity extends AppCompatActivity {
// 声明控件
private ImageView mIvHead;
private SlideMenu slideMenu;
private Button mBtnStudy;
private Button mBtnPlay;
private Button mBtnExercise;
private Button mBtnRead;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_slide);
// 找到控件
mIvHead = findViewById(R.id.iv_head);
slideMenu = findViewById(R.id.slideMenu);
mBtnStudy = findViewById(R.id.btn_main_1);
mBtnPlay = findViewById(R.id.btn_main_2);
mBtnExercise = findViewById(R.id.btn_main_3);
mBtnRead = findViewById(R.id.btn_main_4);
// 实现侧滑的部分,点击加侧滑
mIvHead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
slideMenu.switchMenu();
}
});
setListener();
}
private void setListener() {
OnClick onClick = new OnClick();
// 对每一个按钮进行监听
mBtnStudy.setOnClickListener(onClick);
mBtnPlay.setOnClickListener(onClick);
mBtnExercise.setOnClickListener(onClick);
mBtnRead.setOnClickListener(onClick);
}
private class OnClick implements View.OnClickListener {
@Override
public void onClick(View v) {
Intent intent = null;
int id = v.getId();
if (id == R.id.btn_main_1) {
intent = new Intent(SlideActivity.this, StudyActivity.class);
} else if (id == R.id.btn_main_2) {
intent = new Intent(SlideActivity.this, PlayActivity.class);
} else if (id == R.id.btn_main_3) {
intent = new Intent(SlideActivity.this, ExerciseActivity.class);
} else if (id == R.id.btn_main_4) {
intent = new Intent(SlideActivity.this, ReadActivity.class);
}
if (intent != null) {
startActivity(intent);
}
}
}
}
SlideMenu
package com.example.demo1;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.Scroller;
public class SlideMenu extends FrameLayout {
private View menuView,mainView;
private int menuWidth;
private Scroller scroller;
public SlideMenu(Context context) {
super(context);
init();
}
public SlideMenu(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
scroller = new Scroller(getContext());
}
/**
* 当1级子view全部加载完调用,可以用初始化子view引用
* 注意这里无法获取子view的宽高
*/
@Override
protected void onFinishInflate() {
super.onFinishInflate();
menuView = getChildAt(0);
mainView = getChildAt(1);
menuWidth = menuView.getLayoutParams().width;
}
//使Menu也具有滑动功能
public boolean onInterceptTouchEvent(MotionEvent ev){
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = (int) ev.getX();
break;
case MotionEvent.ACTION_MOVE:
int deltaX = (int) (ev.getX() - downX);
if (Math.abs(deltaX) > 8){
return true;
}
break;
}
return super.onInterceptTouchEvent(ev);
}
/**
* s设置两个子view在页面上的布局
* @param l:当前子view的左边在父view的坐标系的x坐标
* @param t:当前子view的顶边在父view的坐标系的y坐标
* @param r:当前子view的宽
* @param b:当前子view的高
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
menuView.layout(-menuWidth, 0, 0, b);
mainView.layout(0, 0, r, b);
}
/**
* 处理屏幕滑动事件
*/
private int downX;
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = (int) event.getX();
break;
case MotionEvent.ACTION_MOVE:
int moveX = (int) event.getX();
int deltaX = moveX - downX;
int newScrollX = getScrollX() - deltaX;
if (newScrollX < -menuWidth) newScrollX = -menuWidth;
if (newScrollX > 0) newScrollX = 0;
scrollTo(newScrollX, 0);
downX = moveX;
break;
case MotionEvent.ACTION_UP:
//当滑动距离小于Menu宽度的一半时,平滑滑动到主页面
if(getScrollX()>-menuWidth/2){
closeMenu();
}else {
//当滑动距离大于Menu宽度的一半时,平滑滑动到Menu页面
openMenu();
}
break;
}
return true;
}
//关闭menu
private void closeMenu(){
scroller.startScroll(getScrollX(),0,0-getScrollX(),0,400);
invalidate();
}
//打开menu
private void openMenu(){
scroller.startScroll(getScrollX(),0,-menuWidth-getScrollX(),0,400);
invalidate();
}
/**
* Scroller不主动去调用这个方法
* 而invalidate()可以调用这个方法
* invalidate->draw->computeScroll
*/
public void computeScroll(){
super.computeScroll();
if(scroller.computeScrollOffset()){
//返回true,表示动画没结束
scrollTo(scroller.getCurrX(),0);
invalidate();
}
}
/**
* 切换菜单的开和关
*/
public void switchMenu(){
if(getScrollX()==0){
openMenu();
}else {
closeMenu();
}
}
}
activity_slide.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
tools:context=".SlideActivity">
<com.example.demo1.SlideMenu
android:id="@+id/slideMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 菜单界面的布局-->
<include layout="@layout/layout_menu" />
<!--主界面的布局-->
<include layout="@layout/layout_main" />
</com.example.demo1.SlideMenu>
</LinearLayout>
layout_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/design_default_color_background"
android:layout_height="match_parent">
<!-- 第一个水平的 LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_head"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@android:color/black"
android:layout_marginLeft="10dp"
android:scaleType="centerCrop" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="hyn"
android:textColor="@color/blue"
android:textSize="22dp" />
</LinearLayout>
<!-- 第二个垂直的 LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:orientation="vertical"
android:layout_marginTop="360dp">
<Button
android:id="@+id/btn_main_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="学习"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="玩耍"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="锻炼"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="看书"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
layout_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/design_default_color_background"
android:layout_height="match_parent">
<!-- 第一个水平的 LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_head"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@android:color/black"
android:layout_marginLeft="10dp"
android:scaleType="centerCrop" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="hyn"
android:textColor="@color/blue"
android:textSize="22dp" />
</LinearLayout>
<!-- 第二个垂直的 LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:orientation="vertical"
android:layout_marginTop="360dp">
<Button
android:id="@+id/btn_main_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="学习"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="玩耍"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="锻炼"
android:textColor="@color/white" />
<Button
android:id="@+id/btn_main_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="看书"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>