在activity中拖入一个textView控件
layout_width属性
match_parent
match_parent就是该控件的宽度和父控件一样
wrap_content
wrap_content控件的宽度适配控件的内容
修改text的字体
修改text的字体使用android:textSize属性
拖入一个Plain Text和按钮
建立位置策略
UI效果
编辑逻辑代码
- 逻辑代码中通过setContentView(R.layout.activity_helloworld);添加View的布局,R.layout.activity_helloworld就是资源目录下面的布局文件。
- 为什么逻辑代码就是这个目录呢,主要是因为在manifests文件的package=”com.example.administrator.helloworld”指定的。如果是mainActivity,APP一启动就会执行这个代码逻辑(也就是程序的入口)。
根据控件ID找到控件,并且查看控件源代码
- 查看某个类的源代码只需要在鼠标移到该类上面,然后按住ctrl键,单击鼠标左键即可。
- 根据ID查找控件,主要是通过函数findViewById实现的,因为每一个控件都有一个独立的ID。
andriod studio快捷键
给按钮添加事件监听
按钮的事件监听需要实现一个OnClickListener接口类,当然也可以使用匿名内部类来做,这里使用的是普通方法。
package com.example.administrator.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class helloworld extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
((Button)findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
}
private class buttonClickListener implements View.OnClickListener
{
@Override
public void onClick(View v) {
EditText textView=findViewById(R.id.editText2);
Log.v("sss",textView.getText().toString().trim());
}
}
}
andriod studio 查看控制台打印信息
控制台打印使用Log.v类,第一个参数是打印的标签,第二个参数是打印的消息。
Toast的使用
Toast可以短时间显示一段提醒文字。
第一个参数:传入一个context类,activity继承自context.
第二个参数:需要显示的文字。
第三个参数:显示的时间长短,可选Toast.LENGTH_LONG(长时间)或Toast.LENGTH_SHORT(短时间)
package com.example.administrator.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class helloworld extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
((Button)findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
}
private class buttonClickListener implements View.OnClickListener
{
@Override
public void onClick(View v) {
EditText textView=findViewById(R.id.editText2);
String strNumber=textView.getText().toString().trim();
if(strNumber.isEmpty())
{
Toast.makeText(helloworld.this,"电话号码不能为空",Toast.LENGTH_LONG).show();
return;
}
Log.v("sss",textView.getText().toString().trim());
}
}
}
显示效果
权限请求
要求API版本最少是23,权限请求是安卓很重要的一个操作,如果没有权限是不能调用拨打电话功能的。
需要在AndroidManifest.xml中声明权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.logincase">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 检查用户是否具有权限
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class helloworld extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
/*
* 检查用户是否有某个权限
* 如果有权限返回PERMISSION_GRANTED 如果没有权限返回PERMISSION_DENIED
* */
if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PERMISSION_GRANTED) {
((Button) findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
return;
}
- 请求权限,并且得到权限授权结果
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class helloworld extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
/*
* 检查用户是否有某个权限
* 如果有权限返回PERMISSION_GRANTED 如果没有权限返回PERMISSION_DENIED
* */
if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PERMISSION_GRANTED) {
((Button) findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
return;
}
/*
* 请求权限
* 第一个参数是要请求的权限组
* 第二个参数是一个请求码,自己定义的
* */
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 0x11);
((Button) findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
}
/*
* 请求权限的回调函数
* 第一个参数返回的是自定义的请求码
* 第二个参数返回的是请求的权限
* 第三个参数返回的是请求的结果 PERMISSION_GRANTED PERMISSION_DENIED
* */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0x11:
if(grantResults[0] == )
break;
default:
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Intent动作请求
Intent主要是为了完成某一个动作而声明的,用法是先设置一个动作,然后设置动作所带的数据,之后启动动作。
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + strNumber));
startActivity(intent);
完成拨打电话功能
完整代码
package com.example.administrator.helloworld;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class helloworld extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_helloworld);
if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PERMISSION_DENIED) {
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 0x11);
}
((Button) findViewById(R.id.button2)).setOnClickListener(new buttonClickListener());
}
/*
* 请求权限的回调函数
* 第一个参数返回的是自定义的请求码
* 第二个参数返回的是请求的权限
* 第三个参数返回的是请求的结果 PERMISSION_GRANTED PERMISSION_DENIED
* */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0x11:
break;
default:
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private class buttonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
EditText textView = findViewById(R.id.editText2);
String strNumber = textView.getText().toString().trim();
if (strNumber.isEmpty()) {
Toast.makeText(helloworld.this, "电话号码不能为空", Toast.LENGTH_LONG).show();
return;
}
if (checkSelfPermission(Manifest.permission.CALL_PHONE) == PERMISSION_DENIED) {
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 0x11);
return;
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + strNumber));
startActivity(intent);
}
}
}
效果