嗯,作为个屌丝宅,周五下载了Marschen的Android的第一季视频教程。花了一天半看完,和自己的web开发做一个对比的思考,做点笔记。也都是些自己的观点,不一定正确。
Marschen第一季的视频里呢,以Android的UI功能方面的讲解为主。这就有点类似与我们在做PHP开发的时候先要学习html+css。而且大体思路也是一样。
Web的界面以html来展现,Android的UI以XML来展示,所有的属性都现在XML里。
Android里面的线性布局(LinearLayout)类似于HTML里面的table,Android里面的相对布局(RelativeLayout)则有点类似于html里面的div。
Web开发虽然用table来布局可以实现,但是所有的开发人员都知道这个不可取,我知道的原因是对搜索引擎不友好,Android里面不推荐线性布局的原因是其加载的过程会消耗很大的资源。
Android里面的各个控件也可以设置padding,margin。因为要实现一些排版,想必大家都能想到,这些定位的属性值不可少。视频里讲了不少属性,我想暂时不用全都把它们记得滚瓜乱熟吧,需要用的时候查下手册即可。
Marschen在视频不仅讲到了UI的布局,也把各个控件的使用都加以详细的说明,比如点击按钮触发什么,滚动滚动条触发什么,修改时间触发什么。这就有点类似于我们Web开发里面的前端里面的javascript的事件触发功能。在Marschen的教程里面都成为事件监听,这样也更符合Listener
的含义。
而在第一季的视频里呢,所有的事件监听都是一个套路:
根据ID获取控件元素,增加一个监听事件的内部类,然后对这个控件元素绑定监听事件。
以activity_main.xml
里面添加一个Button
控件为例
<Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_centerVertical="true" android:background="#bbbbbb" android:text="测试" />
然后编辑src/package/path/MainActivity.java
首先声明一个指定类型的私有的成员变量(以一个按钮为例)
private Button button;
这里需要做一个Button包的导入,快捷键(windows上是ctrl+shift+o
,mac上command+shift+o
),导入成功之后会多一行import android.widget.Button;
然后在MainActivity
类里面增加一个OnButtonClickListener
的内部类,而这个OnClickListener
是实现了OnClickListener
的接口,在实现这个接口的时候,也需要导包,由于有很多OnClickListener
,这里我们需要做导入视图包里面的OnClickListener
,导入成功之后会多一行import android.view.View.OnClickListener;
class OnButtonClickListener implements OnClickListener{ //... }
然后在OnButtonClickListener
类里面重写(实现)onClick
方法
class OnButtonClickListener implements OnClickListener{ @Override public void onClick(View v) { System.out.println("按钮被点击"); } }
然后在onCreate
方法里面实现对按钮的事件监听的绑定
button = (Button)findViewById(R.id.Button01); button.setOnClickListener(new OnButtonClickListener());
所有的代码如下
package mengkang.zmk; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.Button01); button.setOnClickListener(new OnButtonClickListener()); } class OnButtonClickListener implements OnClickListener{ @Override public void onClick(View v) { System.out.println("按钮被点击"); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }