——第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇

最近一直在开发android上的应用程序,自己自学,想实现一个网上商城的客户端,经过不断地努力,经过不断地受挫,不断地提高,回过头自己可以去总结一些开发android的经验。写这篇的博客的目的是能够帮助其他想开发android的同道中人。

首先,如果想要学习开发android应用程序,入门级别的开发者,可以先去理解android本身提供的21种控件。这个过程中,自己要反复地去写程序,去按着自己的兴趣去开发一些小的程序。比如,可以去开发一个登陆界面,一个猜拳游戏,等等。另外,这个过程中,免不了应用到android的基础的五种布局方式。通过大量地编写demo去理解布局方式的意义。

概括地说,初步入门开发android要做的事情就是:熟练使用21控件+5种布局方式。

第二步,随着开发android的深入,随着对各种控件的熟练程度,对于UI的设计,你会越来越不满意android自带的控件,你会开始去开发自己定制的控件。例如一个按钮的点击效果,tabwidget的灵活使用等等。这个学习的过程,是充满困难与纠结的,因为网上的资料虽然多,但是大多数都是简单控件使用。其实,你能开始自己定制控件就走在了许多android的开发者之前了。所以自己尝试着定制控件,是一个充满困难,但是又充满乐趣的过程。一会儿我会讲解两种基本的定制。

第三步,突破了前个过程后,不要沾沾自喜,因为距离android的大牛还有很长的一段路要走。因为这个时候,你要开始理解android的内部机制,就必须了解linux内部原理。这个也得学习一段时间才能逐渐掌握。但是进入android的内核研究的话,你也就可以研究android上的安全问题,等等。因为笔者本人也就是在第二个阶段,所以对于以后的学习也不是很了解,所以也请大家见谅了。

接下来,我来介绍两种常用的定制方式,一个是按钮点击事件的处理,另外就是tabwidget的不同模式。

首先是按钮点击事件的处理。先看下面的两个图,发现“登陆”按钮在不点击的时候是红色的,但是在在点击的瞬间是黑色的,这是怎么做到的呢?

其实,我是用了在button上贴图的方式,一个图是红色的,另外一张图是黑色的来实现的效果。下面是xml代码:

<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/home_login_button_bk"
android:layout_gravity="right"
android:layout_marginTop="3px"
/>

其中“home_login_button_bk”是另外的一个xml文件,用这个文件来改变按钮的效果,这个文件在drawable文件夹下,代码:

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false"
android:drawable="@drawable/home_head_login_normal" />
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/home_head_login_normal" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/home_head_login_normal" />
<item android:state_focused="true" android:state_pressed="true
android:drawable="@drawable/home_head_login_selected" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/home_head_login_selected" />
<item android:state_focused="true"

android:drawable="@drawable/home_head_login_selected" />

</selector>

只用改变相应的图片就能实现效果。


接下来是tabwidget的不同模式,先看效果

首先是tabwidget在屏幕下方,实现的代码:

<FrameLayout
android:gravity="center"
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/home_backgroud" >

<LinearLayout android:id="@+id/first"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</LinearLayout>
</FrameLayout>

<TabWidget
android:id="@android:id/tabs"

android:padding="3.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.0"
android:tabStripEnabled="false"/>

在布局上先在<TabWidget></TabWidget>上面去保留一个<FrameLayout></FrameLayout>标签,来保持位置,这样tabwidget就被“挤”到了屏幕的下方。

android:tabStripEnabled="false"保证了tabwidget的下划线被去掉了。

另外,实现不同的tabwidget的change效果。

myTabHost.setOnTabChangedListener(new OnMyTabChangeListener());来设置监听器

下面是全部代码。

package EPurch.android.app;import android.app.TabActivity;import android.content.Intent;import android.content.pm.ActivityInfo;import android.content.res.Resources;import android.os.Bundle;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.TabHost;import android.widget.TabWidget;import android.widget.TabHost.TabSpec;import android.widget.TabHost.OnTabChangeListener;public class Home extends TabActivity{private TabHost myTabHost ;private TabWidget myTabWidget ;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN);    //强制设置为竖向    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);setContentView(R.layout.home);myTabHost = getTabHost();myTabWidget = getTabWidget();Resources myResources = getResources();TabSpec myTabSpec;Intent intent;intent = new Intent(this,First.class);myTabSpec = myTabHost.newTabSpec("tab1").setIndicator(null, null).setContent(intent);myTabHost.addTab(myTabSpec);intent = new Intent(this,Classify.class);myTabSpec = myTabHost.newTabSpec("tab2").setIndicator(null, null).setContent(intent);myTabHost.addTab(myTabSpec);intent = new Intent(this,Search.class);myTabSpec = myTabHost.newTabSpec("tab3").setIndicator(null, null).setContent(intent);myTabHost.addTab(myTabSpec);intent = new Intent(this,ShopCar.class);myTabSpec = myTabHost.newTabSpec("tab4").setIndicator(null, null).setContent(intent);myTabHost.addTab(myTabSpec);intent = new Intent(this,More.class);myTabSpec = myTabHost.newTabSpec("tab5").setIndicator(null, null).setContent(intent);myTabHost.addTab(myTabSpec);View myView;myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_selected);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_normal);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_normal);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_normal);myTabHost.setCurrentTab(0);myTabHost.setOnTabChangedListener(new OnMyTabChangeListener());}class OnMyTabChangeListener implements OnTabChangeListener{public void onTabChanged(String tabTag){View myView;switch(myTabHost.getCurrentTab()){case 0 :myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_selected);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_normal);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_normal);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_normal);break;case 1 :myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_normal);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_selected);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_normal);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_normal);break;case 2 :myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_normal);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_normal);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_selected);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_normal);break;case 3 :myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_normal);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_normal);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_normal);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_selected);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_normal);break;case 4 :myView = myTabWidget.getChildAt(0);myView.setBackgroundResource(R.drawable.home_menu_home_normal);myView = myTabWidget.getChildAt(1);myView.setBackgroundResource(R.drawable.home_menu_class_normal);myView = myTabWidget.getChildAt(2);myView.setBackgroundResource(R.drawable.home_menu_search_normal);myView = myTabWidget.getChildAt(3);myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);myView = myTabWidget.getChildAt(4);myView.setBackgroundResource(R.drawable.home_menu_more_selected);break;}}}}


大家如果有更好的建议,可以留言,咱一起分享。


更多相关文章

  1. Android之NDK开发详解
  2. Android(安卓)UI开发第十二篇——动画效果Animation
  3. Android(安卓)studio百度地图SDK开发 2020最新超详细的Android(
  4. Android(安卓)Flutter 混合开发高仿大厂App
  5. Android(安卓)底层开发概述(四)
  6. Android安卓开发知识库汇总
  7. 在IntelliJ IDEA搭建Android开发环境
  8. android,java,ndk,c++ iphone 之争
  9. Android(安卓)开发环境下载地址 -- 百度网盘 adt-bundle android

随机推荐

  1. 安卓 Android之开发简单小应用(三)
  2. Android(安卓)UI IoC注解加载布局
  3. Android(安卓)SD卡操作 (Environment 状态
  4. TensorFlow in Android
  5. android studio 官方用户指南翻译学习(四)
  6. Android字符串资源
  7. 【JAVA】生成一个32位的随机数。防止重复
  8. Android(安卓)防止Toast重复弹出相同的信
  9. Android之权限(permission)大全
  10. ionic上拉翻页及下拉刷新