Android(Kotlin)
学习环境介绍:
电脑:window10
软件:Android Studio 3.5
虚拟机:版本为:API28/android 9.0 版本
gradle:
minSdkVersion 21
targetSdkVersion 27
第一个关于intent的跳转界面
package com.monster.kotlin
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Login.setOnClickListener {
/*val intent = Intent(this,Test::class.java)//第一个地方是起始位置,第二个是跳转位置
startActivity(intent)*/
//两种写法都可以
Intent(this,Test::class.java).apply {
startActivity(this)
}
}
}
}
在Kotlin中简化了很多java的代码例如:
//比如说之前的全局变量 ,省去了new关键字还有Button
Button btn = new Button();
//还有找到控件id
btn = (Button)findViewById(Login)
//还有点击事件没有那么繁琐了,简化了很多
intent传递的方式多种多样了
总之第一步已经踏出去了,已经没有回头路走了!现总结2点intent的跳转方法!
第二个关于menu菜单的使用
关于android开发过程必不可少就是菜单了,为了防止后期忘记,现做总结如下
首先:
通过新建menu文件来存放菜单文件
在建好的文件夹中新建菜单文件
然后在编辑菜单文件内部
会发现只有两个内容:
一个<item>
一个<group>
感觉这两个没什么好说的
<item
android:id="@+id/item_1"
android:title="第一个标题"/>
<item
android:id="@+id/item_2"
android:title="第二个标题"/>
下面介绍使用方法
第一个方法onCreateOptionsMenu主要感觉就是激活菜单让其显示出来
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main,menu)
return true
}
第二个方法就是对内部标题点击的处理事件的方法onOptionsItemSelected
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
//点击事件的处理
}
return true
}
先总结到这里,后续更新!
第三个关于获取网络图片的过程
首先需要说明我用的第三方库Okthhp3.4.1和Glide3.7.0
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
对于之前JAVA中的复杂的请求过程在这里我拿出来进行对比
因为是针对郭霖老师的书本,所以就直接照搬老师代码了:
java:
private void loadBingPic() {
String requestBingPic = "http://guolin.tech/api/bing_pic";
HttpUtil.sendOkHttpRequest(requestBingPic, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String bingPic = response.body().string();
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(MainActivity.this).edit();
editor.putString("bing_pic",bingPic);
editor.apply();
runOnUiThread(new Runnable() {
@Override
public void run() {
Glide.with(MainActivity.this).load(bingPic).into(bingPicImg);
}
});
}
});
}
之中用到了HttpUtil的工具类:
public class HttpUtil {
public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
}
}
Kotlin
private fun loadBingImg() {
val url = "http://guolin.tech/api/bing_pic"
doAsync{
val Picture = URL(url).readText()
uiThread {
Glide.with(this@Test).load(Picture).into(bing_pic_img)
}
}
}
两个对比完成后:Kotlin很香
经过测试两者的显示结果一致,内存占用大小Kotlin偏大一些。
下一次更新权限方面弹出让同意不同意什么的方面问题感觉很有来头!
权限的使用!
大多数应用上来就要权限,虽然很不喜欢这样!但是没办法咯!
首先先写一个布局文件,里面多的不要先添加一个很普通的Button按钮试水嘛!
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Call_phone"
android:text="打电话"
android:textAllCaps="false"/>
下一步在活动文件中写一个按钮点击事件处理
Call_phone.setOnClickListener {
//首先判断权限是否被同意过
if (ContextCompat.checkSelfPermission(
this@Power_Activity,
Manifest.permission.CALL_PHONE
) != PackageManager.PERMISSION_GRANTED
) //没有授权
run {
ActivityCompat.requestPermissions(
this@Power_Activity, arrayOf(
Manifest.permission.CALL_PHONE
), 1
)
}else//授权了
{
//为了保证程序完整,要加入异常处理
try {
//当然啦,通过Intent来传递信息和吊起电话面板
val intent = Intent(Intent.ACTION_CALL)
intent.setData(Uri.parse("tel:123"))
//最后别忘记star
startActivity(intent)
}catch (e:Exception){
e.printStackTrace()
}
}
}
简单的两步处理了一下亲求的过程把,可是如果用户同意了权限的使用,我们需要返回一个动作那就是打开电话,并拨出电话
下一步:
/**
* 弹出申请权限的对话框
*/
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
when(requestCode){
1->
if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
try {
val intent = Intent(Intent.ACTION_CALL)
intent.data = Uri.parse("tel:123")
startActivity(intent)
} catch (e: SecurityException) {
e.printStackTrace()
}
} else {
Toast.makeText(this, "您拒绝了电话请求!", Toast.LENGTH_SHORT).show()
}
}
}
更多parse的用法阔以去点击访问:parse的用法
今天就更新到这里把!每天一步每天一小步!