Android quick note 非常容易学的 android 笔记
因为中文教程不够好,所以快速出了个精华版, 安官方教程出更容易的中文教程,最好一步步先对着两边对照做完
以后 Android 开发者基础知识 Codelab 第一单元整理版。
第 1 课:构建首个应用 ☕☕☕☕
1.1 TextView
就像段落一样, 一段一个 TextView, 下图白色对应一个段落
上图 3 个 textview, id, layout, background 颜色,字体颜色,几乎都需要的
重点是几个特别有意思的点, 图上黄色和橙色划线就是下面的提取元素部分
☕☕☕☕☕
+ 提取元素
android:padding="@dimen/padding_regular"
刚开始写的是具体的数字 10dp,
android:padding=“10dp”
鼠标在这个停留,等出现下选框,或者直接 ALT + ENTER, 选择 Extract string resource, 这个标题是 android:padding, 文件名是 dimens.xml, 最下面的第三段中出现的
android:lineSpacingExtra="@dimen/line_spacing"`
也是用同样的方法。所以后面的结果是main-》res –》values/dimens.xml
这个文件夹的文件里面会出现
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="padding_regular">10dp</dimen>
<dimen name="line_spacing">5sp</dimen>
</resources>
同理还有
android:text="@string/article_subtitle"
里面的文字也是先写好,然后提取成一个新文件 string.xml, 把段落的文件均放在此处。
以后有任何具体的数字就用这个方法提取到 Value 文件夹下面的 .XML 中,方便修改
1.3 ScrollView 滑动框
1. 关于网站链接
直接在正文上加入
android:autoLink=“web”
滚动正文框
在正文上下加入, 包住就可以滚动了
滚动多个元素
直接需要哪里滚动,就给我包进去。
第 2 课:activity 和 intent ☕☕☕☕
2. Activites & intents
Activites 就可以想成是界面,你开一个app, 主页就是一个 main activity, 然后主页里面有个功能键,这个功能键就是 intent, 按进入进入第二个功能界面,就是 second activity,再按返回 intent 键,回到主界面, main activity
好了,就是这样的顺序,我们来看教程 Android fundamentals 02.1: Activities and intents
这里没什么好说的,Button 按钮,
android:onClick=“launchSecondActivity”
看名字就是导向第二个界面, alt + enter 生成方法, 在这里加日记
Log.d(LOG_TAG, “Button clicked”);
-
设置好副界面的静态页面
-
然后就是主界面的 button 是导向,需要加入 Intent, 所以 Intent 当然配合各类图标
这里的 LOG_TAG 是主界面 class 名字,运行输入的时候在下面的 Logcat 可以看到一堆的信息,那就是在这里的搜索框写 main activity, 一下子就只显示按了 button 后我们输入的信息。
黄颜色就是现在这个页面需要的操作,也很好理解
Intent intent = new Intent(this, SecondActivity.class);
开始尝试下
startActivity(intent);
☕
Task 3: Send data from the main Activity to the second Activity
这要解决的就是副界面收获主界面的信息
首先 Intent 是一个 key/value 的格式
- 在主界面方法中” MainActivity“ 中定义 Intent extra
Intent是由action(动作)、data(数据)、类型(type)、component(组件)、Flags(标记)和Extra(扩展信息)等内容组成,Intent的putExtra()方法存入数据
- 定义接受回来 MESSAGE
public static final String EXTRA_MESSAGE = “com.example.android.twoactivities.extra.MESSAGE”;
- 定义 button 旁边提示要发出去的那个的信息,并且和主界面的 xml上 挂钩
private EditText mMessageEditText
mMessageEditText = findViewById(R.id.editText_main);
- 在方法中,mMessageEditText 就是键盘输入的文字
String message = mMessageEditText.getText().toString();
- 得到string后,放入 Intent 的extra中,好理解吧,不就是跟那个map一样吗?
intent.putExtra(EXTRA_MESSAGE, message);
接下来就是放 textview在副界面了, 以及接受方法 SecondActivity
这个是second activity 类中方法 SecondActivity onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = findViewById(R.id.text_message);
textView.setText(message);
}
说人话就是: Mainactivity 中
Intent intent = new Intent(this, SecondActivity.class);
这里就是接收了:
Intent intent = getIntent();
Mainactivity 中, 是我们输入的
String message = eMessageEditText.getText().toString();
然后放入了 Intent 中
intend.putExtra(EXTRA_MESSAGE, message);
这里 second activity界面就是从intend里面得到的了:
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
然后放进 textview里面
TextView textView = findViewById(R.id.text_message); textView.setText(message);
简单? ☕ ☕
Task 4: Return data back to the main Activity
-
在副界面的方法中加入一个reply成功的方法, 这里 intent 新建一个,不要再利用之前的
-
在主界面就是接收的展示的问题
☕
2.3:Implicit intents
先做好这个layout,
在方法中openWebsite()
public void openWebsite(View view) {
// Get the URL text.
String url = mWebsiteEditText.getText().toString();
// Parse the URI and create the intent.
Uri webpage = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
// Find an activity to hand the intent and start that activity.
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Log.d("ImplicitIntents", "Can't handle this intent!");
}
}
当出现控件死都拖不进 main activity 中的时候
把最开始的 android:layout_width=“warp_content” 改成 android:layout_width=“match_parent” , android:layout_height=“match_parent”
在AndroidManifest.xml中加入**
分享功能 ShareCompat.IntentBuilder
public void shareText(View view) {
String txt = mShareTextEditText.getText().toString();
String mimeType = "text/plain";
ShareCompat.IntentBuilder
.from(this)
.setType(mimeType)
.setChooserTitle(R.string.share_text_with)
.setText(txt)
.startChooser();
}
4.1 dessert-ordering app
这个layout非常简单,都不需要看教程做完,然后在整理下,发现 activity_main这里,所有的数值都用了 android:layout_marginTop="@dimen/margin_regular" 和 android:text="@string/intro_text".
有一个坑是这个教程是几年前的,上面的版本和我下的版本不一样,然后我改成和它一样的后 <android.support.constraint.ConstraintLayout, 最后 run 的时候就出错了,各种冲突。 强烈建议不要改。可是不改的话上面的那个购物车图标就有问题。那就自己加一个,然后按照教程加入对应方法。
layout做好后,添加 onClick 方法, 目标就是点击各个图标的时候,出现下面一行提示,表示已加入购物车。
这个叫做 Toast message。
- step 4.11: 点击出现的 toast message 是什么?
You ordered a donut.
- step 4.12: 方法中如何实现
public void displayToast(String message) {
Toast.makeText(getApplicationContext(), message,
Toast.LENGTH_SHORT).show();
}
- step 4.13 具体到每个图片上的message
/**
* Shows a message that the donut image was clicked.
*/
public void showDonutOrder(View view) {
displayToast(getString(R.string.donut_order_message));
}
-
step 4.14 具体到每个图片上的activity_main 也要加入 android:onClick=“showDonutOrder”
-
step 4.15 加入购物车,跳转页面
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, OrderActivity.class);
startActivity(intent);
}
-
step 4.16 页面跳转后显示message,比如 “你点了冰淇淋”
-
- intent.putExtra("","")这里对应的数值 // EXTRA_MESSAGE, emessage 比如
EXTRA_MESSAGE 定义
public static final String EXTRA_MESSAGE = “com.example.android.droidcafe.extra.MESSAGE”;
-
- 这里message 来源于我们点击图片产生的
mOrderMessage = getString(R.string.donut_order_message); displayToast(mOrderMessage)
-
- 在 Onclick方法中加入message
public void onClick(View view) { Intent intent = new Intent(MainActivity.this, OrderActivity.class); intent.putExtra(EXTRA_MESSAGE, mOrderMessage); startActivity(intent); }
-
- 后面当然就是在 order界面接受message啦
Intent intent = getIntent(); String message = "Order: " + intent.getStringExtra(MainActivity.EXTRA_MESSAGE); TextView textView = findViewById(R.id.order_textview); textView.setText(message);
-
list-based user interface widgets such as ListView or Spinner.