android say hello


最终成果如下:

android-say-hello-real-phone

不要在意为什么是地,我原来写的是地球,删了一个字。功能很简单,就是输入什么,下面展现Hello加你上面输入的文字。

从昨天晚上准备环境到今天写了一个简单的say hello,稍有点经验的我也遇到了不少问题。

首先在准备环境时,下载sdk花了好长时间,开了VPN也只有100K,不得已借某人的迅雷会员2M/s速度下。Eclipse的ADT还好,100K可以接受。

接下来是文档,dash的也想下,android sdk manager中的也尝试下,结果因为坑爹的网速只能放到第二天早上下载。

下载好之后,尝试启动模拟器,等了几分钟。个人感觉以前没那么慢啊,难道是因为android 4东西多了?查了点资料,尝试了包括禁止自动屏幕旋转,用Intel的镜像代替ARM的镜像,结果差不了多少。最后把模拟器开在那边不动,不要每次都启动,否则会慢的抓狂。另外,我开了USB调试,接了我的旧安卓手机,版本2.3.6,比模拟器稍微快点。

然后是捣鼓HelloWorld,本来以为android有HelloWorld的sample,结果找了API 10(2.3.3)和19(4.4)都没有。尝试创建新工程,新工程貌似是一个简单的HelloWorld。创建之后得到两个工程,一个叫做appcompat_v7,个人以前没见过,删了,之后怎么测试都会报错,重新创建工程也是。后来了解到android高版本会有这个库工程,是一个依赖。重新创建工程也没解决的原因是没把工程目录也删了,IDE没法创建新的appcompat_v7库工程。我把原先的HelloWorld和appcompat_v7工程删除了,再创建新的,最后clean一下终于把HelloWorld显示出来了。因为太基础了,我就没截图。

接下来,我做点HelloWorld之外的事情,就考虑做一个简单的sayhello。看了一下默认的MainActivity,发现和自己以前学的不同,有一个Fragment,暂不清楚怎么弄,想再activity_main.xml中加组件,结果发现好像不行。又尝试在fragment所在的xml中加,貌似可行,而且有GUI的话,添加起来还是挺容易的,不过有种dreamwaver 中写HTML的感觉。

接下来是绑定事件和添加逻辑。尝试在MainActivity中找输入框,结果findViewById返回null,查了下,还是到fragment中,添加如下代码:

// bind event
EditText editTextName =
    (EditText) rootView.findViewById(R.id.editTextName);
editTextName.addTextChangedListener(new TextWatcher() {

  @Override
  public void onTextChanged(CharSequence s, int start, int before,
      int count) {
  }

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
      int after) {
  }

  @Override
  public void afterTextChanged(Editable s) {
    TextView textViewGreeting =
        (TextView) rootView.findViewById(R.id.textViewGreeting);
    Log.i(TAG, "user input: " + s);
    textViewGreeting.setText("Hello, " + s + "!");
  }
});

上面的rootView是fragment构造上的rootView。
最后run,在模拟器中和旧手机上都测试OK~撒花~

,