软件工程课程实践要使用Android Studio开发,现在记录学习过程,顺便方便学弟学妹。
设备是Mac,用了几年开发环境已经不知道是个什么情况了,慢慢搭吧。
本来是想学习2015年最新Android基础入门教程目录(完结版)
但是这个教程很多图片(感觉上是所有)都没办法加载,据说不知道在哪里的pdf版本有图片,但是不会冲浪找不到,算了累了毁灭吧。
吸取这个博客的教训,绝对不在自己的博客里插入图片,谁知道什么时候就给你吞了。
后面的记录不一定按照难易度排序,想到哪里是哪里,但是跟着玩应该能复现。
新建项目的尝试
大学嘛,大不了自己学,遇到啥解决啥,无脑Helloworld一下,玩着玩着就会了。
Android studio开发-第一个入门例子(十分详细)
出门第一课试试这个。
写的过程中,在改变控件名称的时候,弹出的对话框有这个选项:
-Search in comments and strings
查阅资料后这个表示的是,是否改变全局(Scope表示范围)中所有有关控件的属性,勾选改变,不选则仅改变当前控件。
然后是右边的属性栏,我的Constraints这一栏一直飘红,查到这个资料解决了问题:
Android Studio中ConstraintLayout的使用
添加TextView控件的时候,对字体大小的样式很不满意,找了资料试图修改,但是修改字体样式的过程遇到了麻烦。
先修改了字体大小,直接添加:
android:textSize="30dp"
或者在Design里面的textSize修改都可以。但是报了warning,让我用sp而不是dp设置字体大小。搜索资料后确定为了适应不同的屏幕分辨率,字体大小的单位应该使用 sp 进行计量。
接下来看他的java代码。
这一堆import还不知道做了什么东西,import了什么,之后研究一下。
可能是版本问题吧,第一个import在他的版本里是:
import android.support.v7.app.AppCompatActivity;
在我的AS里是:
import androidx.appcompat.app.AppCompatActivity;
而且不能兼容他的那个版本。
此外,
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
这三个是灰色的,查资料后发现,是因为我先复制了import部分,代码还没用,导致程序判断这三个包是可以删掉的,没用,所以给我标灰色了。
Android Studio的import比较智能,之后就不写具体import了什么,让他自动import就行了。
这个extends表示的是activity之间的继承关系。
“@Override”不知道有什么作用,是什么东西,之后研究一下。
protected啊,public啊我估计和c++差不多,出现了bug我再找资料。
下载virtual device,在run的那个绿色小三角形的左边。
低配的device模拟起来确实快。
魔改:变化的输出内容
好了,好玩的事情要开始了,我首先想的是输出变量式的字符串,也就是说,输入名字,输出"Hello, 名字!"这种格式的字符串。
找到了这种资料:
String str4 = "天气不错";
tv4.setText(Html.fromHtml("今天" + "<font color='#FF0000'>" + str4 + "</font>"));
这中间的Html.fromHtml(Str)需要import android.text.Html;
最终,删掉了一个按钮,另一个按钮的onClick被我魔改成了这样:
public void say_hello(View v){ // 按钮对应的 onclick 响应
TextView text_view = (TextView) findViewById(R.id.text_view); //根据ID找对象
EditText name= (EditText) findViewById(R.id.name); //还是根据ID找到对象,并进行接下来的操作
String getname = name.getText().toString();
text_view.setText(Html.fromHtml("Hello, "+ getname +".")); // 设置字符
}
发现控件的Component tree报Warning
Hardcoded string,should use @string resource
解决方法是在res/values/strings.xml中设置:
<resources>
<string name="-strname-">-strdata-</string>
</resources>
-strname-
是你给string取的名字,-strdata-
是string的具体内容。
比如我这里的命名:
<resources>
<string name="app_name">HelloWorld_for_Android_Studio</string>
<string name="say_hello">Say hello!</string>
<string name="welcome">Welcome!</string>
<string name="input_your_name">Input your name</string>
</resources>
引用时使用
android:text="@string/-strname-"
这样可以做到一改全改,是较好的编程习惯。
魔改:新页面的添加与跳转
这是为后来做一个简单的登录页面做准备。想做一个新的页面,按了start按钮以后进入上一个魔改的Hello界面。
我现在是想在mainactivity上面加一个新的启动activity,综合下面几个教程:
Android Studio 添加另一个页面(Activity)并跳转
在Android Studio中改变默认的启动Activity
P.S.修改Activity的名字只需要右键->refactor->rename即可
参照say_hello函数和添加新页面并跳转的方法编写log_in函数,作为新页面按钮的逻辑,然后修改log_in函数作为默认启动的activity。
结果失败了,按照第一个教程的跳转方法模拟的时候APP会闪退。问题是onClick没有正常运行,点击按钮后没有正确调用log_in函数。
原因是因为我把log_in设为了private,上面这个教程中不知道为啥可以private,实操应该写成public会合适一点。
最后我的log_in函数长这样:
public void log_in(View v){
Intent intent = new Intent();
intent.setClass(LogInActivity.this, HelloActivity.class);
startActivity(intent);
}
可能会用的一些教程
过滤了些不说人话的资料,下面这些还比较好懂。
Android控件显示和隐藏
Android布局中margin,padding,align的用法和区别
Android动态设置控件大小以及设定margin以及padding值
Android Studio 获取屏幕宽度跟高度
Android studio 如何在Activity之间传递简单的数据