Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件
Posted 好喜欢吃红柚子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件相关的知识,希望对你有一定的参考价值。
说在最前面:
这是我根据B站的教学视频整理的笔记,视频里面的代码都是自己手敲、经过调试而且没有错误的
B站教学视频链接:(学完必会)Android studio基础,从入门到精通,学完小白也能会_哔哩哔哩_bilibili
总结2正在奋笔疾书ing~ 未完待续
目录
一、基本应用
build.gradle文件
build.gradle(:app)文件中指定了所有相关的配置,如SDK版本,APP版本号和名称等(后续APP进行升级时会用到)
修改APP的图标和名称
在manifest.xml中修改APP的名字和图标,图标需要改icon和roundicon两个
Log方法和LogCat窗口的使用
在mainactivity.java中可以进行对log函数的调试,在logcat窗口中进行对所需信息的搜索
// 打印最琐碎的信息
Log.v(TAG,"onCreate");
// information,打印重要数据
Log.i(TAG,"onCreate");
// warning,打印警告信息
Log.w(TAG,"onCreate");
// error,打印错误信息
Log.e(TAG,"onCreate");
// debug,打印调试信息
Log.d(TAG,"onCreate");
新建activity
在与MainActivity同级目录下新建一个活动,选择empty activity
创建布局文件
在layout目录下创建新建布局,new layout recourse
在布局中新建按钮
添加高和宽的属性,修改按钮的文字内容
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/Button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"></Button>
</androidx.constraintlayout.widget.ConstraintLayout>
在活动中显示布局
setContentView方法,使用R.layout.xxx进行引用定义的布局
setContentView(R.layout.first_layout);
在manifest.xml对活动进行注册
即对主活动进行添加等,需要添加如下的代码,
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
还可以对主活动的名称进行修改,如定义android:label="主界面"
<activity
android:name=".MainActivity"
android:label="主界面"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
添加按钮
1. 在布局中添加按钮
在first_layout文件中:
<Button
android:id="@+id/Button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button1_name"></Button>
2. 在java中添加按钮,使用Toast方法弹出窗口
在main activity文件中:定义一个按钮
Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
);
添加菜单
1. 在包文件下新建一个名为menu的文件夹,在该文件夹下新建一个menu文件名为main,使用item标签为菜单下的两个子菜单设置id和内容
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item"
android:title="我是一个添加"></item>
<item android:id="@+id/remove_item"
android:title="我是一个删除"></item>
</menu>
2. 在MainActivity.java中重写两个方法,进行对菜单的显示和对应点击按钮后的弹窗
// 重写onCreateOptionsMenu,设置菜单
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.main,menu);
// 显示创建的菜单是否显示
return true;
// 为菜单添加点击弹窗
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item)
switch (item.getItemId())
case R.id.add_item:
Toast.makeText(this, "这是一个添加菜单", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "你确定要删除吗?", Toast.LENGTH_SHORT).show();
break;
default:
return true;
二、Intent实现活动跳转
intent是意图,可以用于转换活动。
1. 显式intent
明确的指定想要跳转到的活动,因此称为显式intent,创建的intent对象传入2个参数:
- 第1个参数 MainActivity.this 表示当前的activity
- 第2个参数 SecondActivity.class 代表要跳转到的目标activity
在按钮点击事件中添加intent完成对主活动MainActivity和SecondActivity之间的跳转,然后使用startActivity方法进行活动的转换
Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
// 使用显示intent跳转活动
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
);
2. 隐式Intent
2.1. 隐式初步应用
不明确指出想要跳转到的活动,在配置文件中通过<intent-filter>进行配置
- 进入第二活动的配置区域,添加<intent-filter>标签,指明想要跳转到该活动跳转的name和category
- 分别为 <action android:name="jump_to_second_activity"></action>和
<category android:name="android.intent.category.DEFAULT"></category>
<activity
android:name=".SecondActivity"
android:label="第二界面"
android:exported="false">
<intent-filter>
<action android:name="jump_to_second_activity"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
- 在按钮点击事件处修改对应的click方法,新建Intent对象的构造方法的所需参数修改了,变成了想要跳转到的活动的name,即再上一步定义的"jump_to_second_activity"。
- 系统会自动为该intent添加“android.intent.category.DEFAULT”的category,因此不需要再指定要跳转的标签。
b1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this, "你按痛我啦", Toast.LENGTH_SHORT).show();
// 使用显示intent跳转活动
// Intent intent = new Intent(MainActivity.this,SecondActivity.class);
// 使用隐式intent
Intent intent = new Intent("jump_to_second_activity");
startActivity(intent);
);
2.2. 隐式intent应用之访问外链
- 在first_layout布局文件中新添加一个按钮,负责跳转到百度链接,然后在main活动中添加对应按钮b1_1的点击事件 ,效果如下所示。
- 注意,使用Intent.ACTION_VIEW进行对intent对象的创建,然后调用setData方法,传入的参数为对应网址。
Button b1_1 = (Button) findViewById(R.id.Button1_1);
b1_1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this,"打开网页",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
);
2.3. 隐式intent应用之调用系统拨号界面
把parse中的参数改成"tel:******"即可
Button b1_2 = (Button) findViewById(R.id.Button1_2);
b1_2.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this,"打开拨号界面",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
);
3. Intent实现数据传递
使用intent的putExtra()方法进行数据传递
- putExtra()进行数据保存
在主活动的点击跳转到第二个活动的按钮中进行字符串data的传输
1. 定义字符串data
2. 使用显式intent进行数据的传递,然后使用putExtra方法将数据存入intent中,该方法需要两个参数,一个是存入的数据名,一个是存入的数据值,存入的数据名为StringInformation,数据值为data的内容
// 把java中的按钮和布局中的联系起来
Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
Toast.makeText(MainActivity.this, "跳转到第二个活动", Toast.LENGTH_SHORT).show();
// 在向第二个活动转换的过程中传递一个字符串
String data = "你好,第二个活动!";
// 使用显示intent跳转活动
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
// 把需要传递的数据存入intent中,第一个参数是传递的数据名称,第二个参数是取得的实际值内容
intent.putExtra("StringInformation",data);
// 使用隐式intent
// Intent intent = new Intent("jump_to_second_activity");
//intent.addCategory("my_category");
startActivity(intent);
);
- getXxxExtra()进行数据取出
在活动二显示布局的语句后开始进行从intent中取出数据
1. 使用getIntent方法定义一个intent对象
2. 因为要取得值是string型,所以使用getStringExtra方法,方法中传递的参数是在上面定义的数据的名称“StringInformation”
3. 使用logcat窗口进行信息打印,查看是否成功
// 新建一个获取数据的intent
Intent intent = getIntent();
// 获取存再intent中的名为StringInformation的字符串
String data =intent.getStringExtra("StringInformation");
// 在logcat窗口中打印对应信息
Log.d("SecondActivity",data);
测试:打印成功
三、控件
1. TextView控件
新建一个empty activity,在main_activity布局文件中进行进行TextView控件属性的设置
- android:gravity 设置文字的位置,center为居中显示
<?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"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="17sp"
android:textColor="@color/purple_200"
android:text="我是一行文字,欢迎来到textview的学习">
</TextView>
</LinearLayout>
效果:
2. button控件
对按钮的使用我们已经非常熟悉了,这里新引入一个textAllCaps属性,由于Android studio会自动把按钮里的小写转换为大写字母,所以若需要保持小写,则把属性设置为false,从而可以保持小写字母。
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello everyone! 我是一个按钮"
android:textAllCaps="false">
</Button>
在活动里可以进行对按钮点击的添加
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
switch (view.getId())
case R.id.button1:
// 逻辑控制
break;
default:
break;
);
3. EditText控件
3.1 输入框的显示
hint属性显示输入框要显示的文字
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="快点给我的输入框里输入文字吧!">
</EditText>
3.2 与button结合使用
在输入框中输入文字,点击按钮,在界面中弹出(toast方法)输入框中的相应内容
- 创建一个EditText对象
- 使findViewById方法进行布局文件和java对象的联系
- 在按钮点击的逻辑控制语句中添加如下代码
- String inputText = editText.getText().toString(); getText()方法用来获取文本框中输入的文字内容,toString()方法用来将其转换为字符串类型。
- Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show(); 弹出对应内容
public class MainActivity extends AppCompatActivity
// 创建一个输入框对象
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
// 和按钮一样,使用findviewbyid 获取到输入框的实例
editText = (EditText)findViewById(R.id.edit_text);
b.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
switch (view.getId())
case R.id.button1:
// 逻辑控制
String inputText = editText.getText().toString();
Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();
break;
default:
break;
);
4. ImageView控件
4.1 布局文件中的图片控件显示
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img2">
</ImageView>
4.2 实现点击按钮更换图片应用
准备工作:在drawable中放置两张资源图片,新建一个按钮b2
- 新建一个imagView对象: private ImageView imageView;
- 获取imageview的id:
imageView =(ImageView) findViewById(R.id.image_view); - 在按钮的点击事件中使用setImageResource()方法设置需要更换的图片,使用R.drawable.xxx引用 :imageView.setImageResource(R.drawable.img1);
package cn.edu.sdut.uipractice01;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
// 创建一个输入框对象
private EditText editText;
// 创建一个imageview对象
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b1 = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
// 和按钮一样,使用findviewbyid 获取到输入框的实例
editText = (EditText)findViewById(R.id.edit_text);
// 获取imageview的id
imageView =(ImageView) findViewById(R.id.image_view);
b1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
switch (view.getId())
case R.id.button1:
// 逻辑控制
String inputText = editText.getText().toString();
Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();
break;
default:
break;
);
b2.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
imageView.setImageResource(R.drawable.img1);
);
效果:
点击后-》
4.3 点击按钮转换图片应用
要求:依次点击春夏秋冬四个按钮,显示对应的四张图片
布局文件:
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/b1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="春"/>
<Button
android:id="@+id/b2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="夏"/>
<Button
android:id="@+id/b3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="秋"/>
<Button
android:id="@+id/b4"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="冬"/>
</LinearLayout>
<!-- 放图片-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/spring"
android:scaleType="fitXY"/>
<ImageView
android:id="@+id/img2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/summer"
android:visibility="invisible"
android:scaleType="fitXY"/>
<ImageView
android:id="@+id/img3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/autumn"
android:visibility="invisible"
android:scaleType="fitXY"/>
<ImageView
android:id="@+id/img4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/winter"
android:visibility="invisible"
android:scaleType="fitXY"/>
</FrameLayout>
</LinearLayout>
活动文件:
button的OnClickListener的三种实现方法:
(159条消息) button的OnClickListener的三种实现方法_huiwolf2008的博客-CSDN博客
此处点击事件的监听器使用并不是匿名类new onClickListener,而是让activity类实现onClickListener接口,然后重写其对应的方法onclick即可。
package cn.edu.sdut.myclass831;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener
Button b1,b2,b3,b4;
ImageView img1,img2,img3,img4;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = findViewById(R.id.b1);
b2 = findViewById(R.id.b2);
b3 = findViewById(R.id.b3);
b4 = findViewById(R.id.b4);
img1 = findViewById(R.id.img1);
img2 = findViewById(R.id.img2);
img3 = findViewById(R.id.img3);
img4 = findViewById(R.id.img4);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
@Override
public void onClick(View view)
// 获取点击的按钮的id值
int id=view.getId();
// 首先隐藏所有图片
hideImg();
switch (id)
case R.id.b1:
img1.setVisibility(View.VISIBLE);
break;
case R.id.b2:
img2.setVisibility(View.VISIBLE);
break;
case R.id.b3:
img3.setVisibility(View.VISIBLE);
break;
case R.id.b4:
img4.setVisibility(View.VISIBLE);
break;
default:
break;
protected void hideImg()
img1.setVisibility(View.INVISIBLE);
img2.setVisibility(View.INVISIBLE);
img3.setVisibility(View.INVISIBLE);
img4.setVisibility(View.INVISIBLE);
5. ProgressBar控件
5.1 布局文件中的进度条显示
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
5.2 点击让进度条出现 / 消失
控件的三个可见值的属性:visible invisible gone
- 在活动中新建进度条对象
- 使用findviewbyid找到对应进度条
- 在按钮点击事件中进行进度条显示或隐藏的判断与设置
b3.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
if(progressBar.getVisibility()==view.GONE)
progressBar.setVisibility(view.VISIBLE);
else
progressBar.setVisibility(view.GONE);
);
5.3 修改进度条样式和进度
1. 修改样式并设置进度条最大范围
- style属性设置水平进度条
- max属性设置最大值
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
/>
2. 点击按钮增加进度条的值
通过getProgress获取进度条的值,然后每次点击一次按钮,进度加10,使用setProgress设置更新后的进度条值。
b3.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
// 点击按钮设置可见性
// if(progressBar.getVisibility()==view.GONE)
// progressBar.setVisibility(view.VISIBLE);
// else
// progressBar.setVisibility(view.GONE);
int prgress = progressBar.getProgress();
prgress+=10;
progressBar.setProgress(prgress);
);
效果:
四、Dialog对话框
作用:用于提示用户重要内容/信息,可以屏蔽其他控件的交互能力。
1. AlertDialog提示信息
对话框无需在布局文件中进行创建,直接在活动中点击按钮的事件中创建即可,可套用以下模板,具体方法不再进行讲解。
b4.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("这里有一条重要信息");
dialog.setMessage("请注意休息,不要久坐哦~");
dialog.setCancelable(false);
// 为对话框按钮创建点击事件
dialog.setPositiveButton("好的", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
);
// 显示对话框
dialog.show();
);
效果:
4.2 ProgressDialog提示信息
在对话框中可以出现一个进度条。
使用方法与AlertDialog类似
b5.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("加载进度");
progressDialog.setMessage("正在加载中,请耐心等待~");
progressDialog.setCancelable(true);
progressDialog.show();
);
效果:
手把手教你在Android Studio 3.0上分析内存泄漏
以上是关于Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件的主要内容,如果未能解决你的问题,请参考以下文章
手把手教你在Android Studio 3.0上分析内存泄漏