Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件

Posted 好喜欢吃红柚子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio应用基础,手把手教你从入门到精通(小白学习)总结1 之 基础介绍 + intent + 常用控件相关的知识,希望对你有一定的参考价值。

说在最前面:

这是我根据B站的教学视频整理的笔记,视频里面的代码都是自己手敲、经过调试而且没有错误的

 B站教学视频链接:(学完必会)Android studio基础,从入门到精通,学完小白也能会_哔哩哔哩_bilibili

总结2正在奋笔疾书ing~  未完待续


目录

一、基本应用

 build.gradle文件

修改APP的图标和名称

Log方法和LogCat窗口的使用

新建activity

创建布局文件

在布局中新建按钮

在活动中显示布局

在manifest.xml对活动进行注册

添加按钮

添加菜单

二、Intent实现活动跳转

1. 显式intent

2. 隐式Intent

2.1. 隐式初步应用

2.2. 隐式intent应用之访问外链

2.3. 隐式intent应用之调用系统拨号界面

3. Intent实现数据传递

使用intent的putExtra()方法进行数据传递

三、控件

1. TextView控件

2. button控件

3. EditText控件

3.1 输入框的显示

3.2 与button结合使用

4. ImageView控件

 4.1 布局文件中的图片控件显示

4.2 实现点击按钮更换图片应用

4.3 点击按钮转换图片应用

布局文件

活动文件

5. ProgressBar控件

 5.1 布局文件中的进度条显示

5.2 点击让进度条出现 / 消失

5.3 修改进度条样式和进度

四、Dialog对话框

1. AlertDialog提示信息

4.2 ProgressDialog提示信息


一、基本应用

 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上分析内存泄漏

手把手教你从零写一个简单的 VUE

手把手教你从零写一个简单的 VUE

干货|下一代微服务:手把手教你从零搭建Istio及Bookinfo示例程序

手把手教你从零开始做一个好看的 APP

手把手教你从零搭建深度学习项目