关于Android的开发经验总结 .

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

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

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

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

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

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

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

关于Android的开发经验总结 .    关于Android的开发经验总结 .

其实,我是用了在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的不同模式,先看效果

关于Android的开发经验总结 .                                 关于Android的开发经验总结 .

首先是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());来设置监听器

下面是全部代码。

  1. <span style="font-size:18px;">package EPurch.android.app;  
  2.   
  3. import android.app.TabActivity;  
  4. import android.content.Intent;  
  5. import android.content.pm.ActivityInfo;  
  6. import android.content.res.Resources;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.view.Window;  
  10. import android.view.WindowManager;  
  11. import android.widget.TabHost;  
  12. import android.widget.TabWidget;  
  13. import android.widget.TabHost.TabSpec;  
  14. import android.widget.TabHost.OnTabChangeListener;  
  15.   
  16. public class Home extends TabActivity{  
  17.     private TabHost myTabHost ;  
  18.     private TabWidget myTabWidget ;  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.           
  21.         super.onCreate(savedInstanceState);  
  22.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  23.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  24.         WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  25.         //强制设置为竖向   
  26.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  27.         setContentView(R.layout.home);  
  28.         myTabHost = getTabHost();  
  29.         myTabWidget = getTabWidget();  
  30.         Resources myResources = getResources();  
  31.   
  32.         TabSpec myTabSpec;  
  33.         Intent intent;  
  34.           
  35.         intent = new Intent(this,First.class);  
  36.         myTabSpec = myTabHost.newTabSpec("tab1")  
  37.         .setIndicator(nullnull)  
  38.         .setContent(intent);  
  39.         myTabHost.addTab(myTabSpec);  
  40.   
  41.           
  42.         intent = new Intent(this,Classify.class);  
  43.         myTabSpec = myTabHost.newTabSpec("tab2")  
  44.         .setIndicator(nullnull)  
  45.         .setContent(intent);  
  46.         myTabHost.addTab(myTabSpec);  
  47.   
  48.           
  49.         intent = new Intent(this,Search.class);  
  50.         myTabSpec = myTabHost.newTabSpec("tab3")  
  51.         .setIndicator(nullnull)  
  52.         .setContent(intent);  
  53.         myTabHost.addTab(myTabSpec);  
  54.   
  55.           
  56.         intent = new Intent(this,ShopCar.class);  
  57.         myTabSpec = myTabHost.newTabSpec("tab4")  
  58.         .setIndicator(nullnull)  
  59.         .setContent(intent);  
  60.         myTabHost.addTab(myTabSpec);  
  61.   
  62.           
  63.         intent = new Intent(this,More.class);  
  64.         myTabSpec = myTabHost.newTabSpec("tab5")  
  65.         .setIndicator(nullnull)  
  66.         .setContent(intent);  
  67.         myTabHost.addTab(myTabSpec);  
  68.   
  69.         View myView;  
  70.         myView = myTabWidget.getChildAt(0);  
  71.         myView.setBackgroundResource(R.drawable.home_menu_home_selected);  
  72.         myView = myTabWidget.getChildAt(1);  
  73.         myView.setBackgroundResource(R.drawable.home_menu_class_normal);  
  74.         myView = myTabWidget.getChildAt(2);  
  75.         myView.setBackgroundResource(R.drawable.home_menu_search_normal);  
  76.         myView = myTabWidget.getChildAt(3);  
  77.         myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);  
  78.         myView = myTabWidget.getChildAt(4);  
  79.         myView.setBackgroundResource(R.drawable.home_menu_more_normal);  
  80.           
  81.         myTabHost.setCurrentTab(0);  
  82.         myTabHost.setOnTabChangedListener(new OnMyTabChangeListener());  
  83.     }  
  84.     class OnMyTabChangeListener implements OnTabChangeListener{  
  85.         public void onTabChanged(String tabTag){  
  86.             View myView;  
  87.             switch(myTabHost.getCurrentTab()){  
  88.             case 0 :  
  89.                 myView = myTabWidget.getChildAt(0);  
  90.                 myView.setBackgroundResource(R.drawable.home_menu_home_selected);  
  91.                 myView = myTabWidget.getChildAt(1);  
  92.                 myView.setBackgroundResource(R.drawable.home_menu_class_normal);  
  93.                 myView = myTabWidget.getChildAt(2);  
  94.                 myView.setBackgroundResource(R.drawable.home_menu_search_normal);  
  95.                 myView = myTabWidget.getChildAt(3);  
  96.                 myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);  
  97.                 myView = myTabWidget.getChildAt(4);  
  98.                 myView.setBackgroundResource(R.drawable.home_menu_more_normal);  
  99.                 break;  
  100.             case 1 :  
  101.                 myView = myTabWidget.getChildAt(0);  
  102.                 myView.setBackgroundResource(R.drawable.home_menu_home_normal);  
  103.                 myView = myTabWidget.getChildAt(1);  
  104.                 myView.setBackgroundResource(R.drawable.home_menu_class_selected);  
  105.                 myView = myTabWidget.getChildAt(2);  
  106.                 myView.setBackgroundResource(R.drawable.home_menu_search_normal);  
  107.                 myView = myTabWidget.getChildAt(3);  
  108.                 myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);  
  109.                 myView = myTabWidget.getChildAt(4);  
  110.                 myView.setBackgroundResource(R.drawable.home_menu_more_normal);  
  111.                 break;  
  112.             case 2 :  
  113.                 myView = myTabWidget.getChildAt(0);  
  114.                 myView.setBackgroundResource(R.drawable.home_menu_home_normal);  
  115.                 myView = myTabWidget.getChildAt(1);  
  116.                 myView.setBackgroundResource(R.drawable.home_menu_class_normal);  
  117.                 myView = myTabWidget.getChildAt(2);  
  118.                 myView.setBackgroundResource(R.drawable.home_menu_search_selected);  
  119.                 myView = myTabWidget.getChildAt(3);  
  120.                 myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);  
  121.                 myView = myTabWidget.getChildAt(4);  
  122.                 myView.setBackgroundResource(R.drawable.home_menu_more_normal);  
  123.                 break;  
  124.             case 3 :  
  125.                 myView = myTabWidget.getChildAt(0);  
  126.                 myView.setBackgroundResource(R.drawable.home_menu_home_normal);  
  127.                 myView = myTabWidget.getChildAt(1);  
  128.                 myView.setBackgroundResource(R.drawable.home_menu_class_normal);  
  129.                 myView = myTabWidget.getChildAt(2);  
  130.                 myView.setBackgroundResource(R.drawable.home_menu_search_normal);  
  131.                 myView = myTabWidget.getChildAt(3);  
  132.                 myView.setBackgroundResource(R.drawable.home_menu_shopping_selected);  
  133.                 myView = myTabWidget.getChildAt(4);  
  134.                 myView.setBackgroundResource(R.drawable.home_menu_more_normal);  
  135.                 break;  
  136.             case 4 :  
  137.                 myView = myTabWidget.getChildAt(0);  
  138.                 myView.setBackgroundResource(R.drawable.home_menu_home_normal);  
  139.                 myView = myTabWidget.getChildAt(1);  
  140.                 myView.setBackgroundResource(R.drawable.home_menu_class_normal);  
  141.                 myView = myTabWidget.getChildAt(2);  
  142.                 myView.setBackgroundResource(R.drawable.home_menu_search_normal);  
  143.                 myView = myTabWidget.getChildAt(3);  
  144.                 myView.setBackgroundResource(R.drawable.home_menu_shopping_normal);  
  145.                 myView = myTabWidget.getChildAt(4);  
  146.                 myView.setBackgroundResource(R.drawable.home_menu_more_selected);  
  147.                 break;  
  148.                   
  149.             }  
  150.         }  
  151.     }  
  152.       
  153. }  
  154. </span>  


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