Android quick note 非常容易学的 android 笔记

Wed, Dec 7, 2022 3-minute read

因为中文教程不够好,所以快速出了个精华版, 安官方教程出更容易的中文教程,最好一步步先对着两边对照做完

Android 开发者基础知识 Codelab

英文教程

以后 Android 开发者基础知识 Codelab 第一单元整理版。

第 1 课:构建首个应用 ☕☕☕☕

1.1 TextView

就像段落一样, 一段一个 TextView, 下图白色对应一个段落

TextView

TextView

上图 3 个 textview, id, layout, background 颜色,字体颜色,几乎都需要的

TextView

TextView

重点是几个特别有意思的点, 图上黄色和橙色划线就是下面的提取元素部分

☕☕☕☕☕


+ 提取元素

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, 把段落的文件均放在此处。

TextView

strings.xml

以后有任何具体的数字就用这个方法提取到 Value 文件夹下面的 .XML 中,方便修改


1.3 ScrollView 滑动框

1. 关于网站链接

直接在正文上加入

android:autoLink=“web”

TextView

autoLink

滚动正文框

在正文上下加入, 包住就可以滚动了

TextView

TextView

TextView

TextView

滚动多个元素

直接需要哪里滚动,就给我包进去。

第 2 课:activity 和 intent ☕☕☕☕

2. Activites & intents

Activites 就可以想成是界面,你开一个app, 主页就是一个 main activity, 然后主页里面有个功能键,这个功能键就是 intent, 按进入进入第二个功能界面,就是 second activity,再按返回 intent 键,回到主界面, main activity

好了,就是这样的顺序,我们来看教程 Android fundamentals 02.1: Activities and intents

TextView

TextView

这里没什么好说的,Button 按钮,

android:onClick=“launchSecondActivity”

看名字就是导向第二个界面, alt + enter 生成方法, 在这里加日记

Log.d(LOG_TAG, “Button clicked”);

  • 设置好副界面的静态页面

  • 然后就是主界面的 button 是导向,需要加入 Intent, 所以 Intent 当然配合各类图标

TextView

TextView

这里的 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

Implicit intents

TextView

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!");
   }
}
TextView

Implicit intents

当出现控件死都拖不进 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

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,比如 “你点了冰淇淋”

      1. intent.putExtra("","")这里对应的数值 // EXTRA_MESSAGE, emessage 比如

    EXTRA_MESSAGE 定义

    public static final String EXTRA_MESSAGE = “com.example.android.droidcafe.extra.MESSAGE”;

      1. 这里message 来源于我们点击图片产生的

    mOrderMessage = getString(R.string.donut_order_message); displayToast(mOrderMessage)

      1. 在 Onclick方法中加入message
    public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, OrderActivity.class);
        intent.putExtra(EXTRA_MESSAGE, mOrderMessage);
        startActivity(intent);
    }
    
      1. 后面当然就是在 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.