`
mintelong
  • 浏览: 396103 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android框架设计

阅读更多
这是对框架设计应用的一个小的总结
package com.misoo.ex01;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class ex01 extends Activity {


public static final int ADD_ID = Menu.FIRST;


public static final int DELETE_ID = Menu.FIRST + 1;


public static final int EXIT_ID = Menu.FIRST + 2;




@Override public void onCreate(Bundle icicle) {


super.onCreate(icicle);


setContentView(R.layout.main); }




@Override public boolean onCreateOptionsMenu(Menu menu) {


super.onCreateOptionsMenu(menu);


menu.add(0, ADD_ID, 0, R.string.menu_add);


menu.add(0, DELETE_ID, 1, R.string.menu_delete);


menu.add(0, EXIT_ID, 2, R.string.menu_exit);


return true; }




@Override public boolean onOptionsItemSelected(MenuItem item) {


switch (item.getItemId()) {


case ADD_ID: setTitle("Insert..."); break;


case DELETE_ID: setTitle("Delete..."); break;


case EXIT_ID: finish(); break;


}


return super.onOptionsItemSelected(item);


}}




说明:


1、一开始,框架反向呼叫onCreate()函数,也呼叫onCreateOptionsMenu()函数


2、当你选取<Add Item>选项时,框架会反向呼叫onOptionsItemSelected()函数


在我们修改了/res/values/strings.xml内容之后,记住要存档,因为这样可以更新R.java的内容,让menu.add()指令能找到所要的字符串。
1、R.java是连接*.java的程序码档案和*.xml布局档案的中介桥梁。
2、在.xml档案中,Eclipse根据其内的内容而自动产生一个R类别,作为应用程序设计者,并不需要去修改它。
3、当这些.xml档案有更新时,Eclipse就会在你确认并将*.xml存档时,自动更新它。
4、更加方便地去管理资源。
下面来介绍如何呈现按钮
首先来看看构建按钮的一般的步骤:
package com.misoo.ex02;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ex02 extends Activity implements OnClickListener {
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button);
Button btn2 = (Button)findViewById(R.id.button2);
btn.setOnClickListener(this);
btn2.setOnClickListener(this);
}
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.button:
setTitle("this is OK button");
break;
case R.id.button2:
this.finish();
break;
}
}}

下面是对应的.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
/>
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
/>
</LinearLayout>

说明:Button btn=(Button)findViewById(R.id.button);找出目前的布局里的按钮参考,并存放人btn内。
指令btn.setOnClickListener(this)设定按钮事件的处理程式,应额外事件监听者。当使用者按下id值为id/button的按钮时,框架必须把事件准确地传送到恰当的类别,并呼叫所指定的函数。其中的参数:this就表示此按钮事件必须传送到本地类别的物件,也就是目前物件。
当然,还可以创建出带有背景的按钮,对应的类别为ImageButton.

下面介绍如何进行书面的布局
1、像按钮这种屏幕控制项,在Android中,则通讲为View,其中,像Button是最小单元的View,多个小的View可以构成一个集合类型的View。
2、多个View能组合在一起,就会各种排列方式,即讲布局Layout.
3、最基本的布局为:垂直和水平排列
import android.graphics.Color;


import android.graphics.drawable.Drawable;


import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;

public class ex04 extends Activity {
private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;


@Override public void onCreate(Bundle icicle) {


super.onCreate(icicle);




//下面这两条指令诞生一个LinearLayout的集合型的View物件,并且设定为垂直类型布局


LinearLayout layout = new LinearLayout(this);


layout.setOrientation(LinearLayout.VERTICAL);




ImageButton btn = new ImageButton(this);


Drawable dw = this.getResources().getDrawable(R.drawable.ok); //Drawable类型??
btn.setImageDrawable(dw); //设置btn的图像为dw.
btn.setOnClickListener(listener);
//下面的指令诞生一个LayoutParams物件,并且把WC参数存入该物件里,此参数说明了我们希
望这个按钮的长宽大小
LinearLayout.LayoutParams param =new LinearLayout.LayoutParams(WC, WC);
layout.addView(btn, param);
ImageButton btn2 = new ImageButton(this);
dw = this.getResources().getDrawable(R.drawable.exit);
btn2.setImageDrawable(dw);
btn2.setOnClickListener(listener2);
layout.addView(btn2, param); //将ImageButton或是Button物件加入到layout里成为一组
LinearLayout out_layout = new LinearLayout(this);
out_layout.setOrientation(LinearLayout.HORIZONTAL);
Button btn3 = new Button(this);
btn3.setText("Cancel");
btn3.setTextColor(Color.WHITE);
btn3.setBackgroundColor(Color.RED);
btn3.setOnClickListener(listener3);

out_layout.addView(layout, param);
LinearLayout.LayoutParams param2 =new LinearLayout.LayoutParams(WC, WC);
param2.topMargin = 30;
out_layout.addView(btn3, param2);
setContentView(out_layout);
}

OnClickListener listener = new OnClickListener(){
public void onClick(View v)
{ setTitle("this is OK button"); }
};
OnClickListener listener2 = new OnClickListener() {
public void onClick(View v)
{ finish(); }
};

OnClickListener listener3 = new OnClickListener() {
public void onClick(View v)
{ setTitle("this is Cancel button"); }
};
}

下面介绍如何呈现List选单
这个程式展现了MVC的基本架构
Activity 对应着的是Controller
ListView 对应着的是View
DataModel对应着的是Model
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
public class ex05 extends Activity implements OnItemClickListener {
public static final int RELOAD_ID = Menu.FIRST;
public static final int EXIT_ID = Menu.FIRST + 1;
ListView lv;
ArrayAdapter<String> adapter;   //声明一个泛型adapter
DataModel dm; //声明一个数据模型dm
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
dm = new DataModel(); //创建一个模型
lv = new ListView(this);   //创建一个列表视图
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());

//这诞生一个ArrayAdapter的物件,并呼叫dm.loadData()函数取得选单所需要的内容,存入此新的物件里。


lv.setAdapter(adapter); //向adapter物件取得选单内容


lv.setOnItemClickListener(this);   //设定ListView选单时间的处理程式,又称为事件监听者。
setContentView(lv);

}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)  //这是列表视图操作所响应的事
{
setTitle("choice: " + String.valueOf(dm.getPrice(arg2)));
}
@Override public boolean onCreateOptionsMenu(Menu menu)  //这个操作是用来进行菜单的选项的设计的


{


super.onCreateOptionsMenu(menu);  //对于菜单的设计,在使用onCreateOptionMenu时,都需要这个操作,即让父类来实现绘画功能
menu.add(0, RELOAD_ID, 0, "Reload");  //添加菜单选项
MenuItem im = menu.findItem(RELOAD_ID);   //
im.setIcon(R.drawable.reload_im);
menu.add(0, EXIT_ID, 1, "Exit");
im = menu.findItem(EXIT_ID);
im.setIcon(R.drawable.exit_im);
return true;


}


@Override public boolean onOptionsItemSelected(MenuItem item) //这个选项是在选择菜单时所产生的动作
{
switch (item.getItemId()) {
case RELOAD_ID:  //如果选择的是第一个菜单,那么就执行下面的这个功能
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dm.loadData());
lv.setAdapter(adapter);

break;
case EXIT_ID:   //如果选择的是第二个菜单,那么就执行退出操作
finish();
break;


}


return super.onOptionsItemSelected(item);


}


}

public class DataModel {


private String[]data, xdata;


private double[] price;


private boolean k = true;


public DataModel()


{


data = new String[3];


data[0] = "Item-1";


data[1] = "Item-2";


data[2] = "Item-3";


xdata = new String[3];


xdata[0] = "Prod-x";


xdata[1] = "Prod-y";


xdata[2] = "Prod-z";


price = new double[3];


price[0] = 305.5;


price[1] = 56.75;


price[2] = 100.25;


}


public String[] loadData() {


k = !k;


if(k)


return xdata;


else


return data;


}


public double getPrice(int i)


{


return price[i];


}


}






下面同样是ListView多对应的功能


package com.misoo.ex06;


import java.util.ArrayList;


import java.util.Map;


import android.app.Activity;


import android.graphics.Color;


import android.os.Bundle;


import android.view.View;


import android.widget.AdapterView;


import android.widget.ListView;


import android.widget.SimpleAdapter;


import android.widget.TextView;


import android.widget.AdapterView.OnItemClickListener;




public class ex06 extends Activity {


private ListView lv;


private TextView tv;


private DataModel dm;


private ArrayList<Map<String, Object>> coll;


@Override


public void onCreate(Bundle icicle) {


super.onCreate(icicle);


dm = new DataModel();


setContentView(R.layout.list);


lv = (ListView)findViewById(R.id.list);


lv.setOnItemClickListener(listener);


tv = (TextView)findViewById(R.id.text);



//下面的dm.loadData()呼叫DataModel的loadData()函数将xml字符串或者是表格资料加入到ArrayList<Map<String,Object>>的集合物件中。


coll = dm.loadData();


//下面的指令将coll集合物件的资料传给SimpleAdapter物件,SimpleAdapter物件依据参数的


指定来从coll取出资料,并设定显示的树形等等。


SimpleAdapter adapter = new SimpleAdapter(this, coll,android.R.layout.simple_list_item_1, new String[] { "prod_na" },new int[] {android.R.id.text1});


lv.setAdapter(adapter); //将SimpleAdapter物件传送给ListView物件,立即更新了书面上List选单的内容.


}


OnItemClickListener listener = new OnItemClickListener() {


public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)


{


tv.setTextColor(Color.YELLOW);


tv.setText(coll.get(arg2).get("prod_type").toString());


}


};


}








import java.util.ArrayList;


import java.util.HashMap;


import java.util.Map;


public class DataModel {


public DataModel() {}


public ArrayList<Map<String, Object>> loadData() {


ArrayList<Map<String, Object>> coll= new ArrayList<Map<String, Object>>();


Map<String, Object> item;


item = new HashMap<String, Object>();


item.put("prod_na", "Linux");


item.put("prod_type", "ST");


coll.add(item);


item = new HashMap<String, Object>();


item.put("prod_na", "Windows");


item.put("prod_type", "Mobile");


coll.add(item);


return coll;


}


}




<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"


android:orientation="vertical"


android:layout_width="fill_parent"


android:layout_height="fill_parent"


>


<TextView android:id="@+id/text"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:text="Hello World, ex06"


/>


<ListView android:id="@+id/list"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


/>


</LinearLayout>




下面介绍如何使用相对布局Relative Layout


分析下面的这段代码:


import android.app.Activity;


import android.content.Context;


import android.os.Bundle;


import android.view.View;


import android.view.ViewGroup;


import android.view.LayoutInflater;


import android.view.View.OnClickListener;


import android.widget.AdapterView;


import android.widget.ArrayAdapter;


import android.widget.Button;


import android.widget.LinearLayout;


import android.widget.ListView;


import android.widget.RelativeLayout;


import android.widget.TextView;


import android.widget.AdapterView.OnItemClickListener;


public class ex07 extends Activity implements OnItemClickListener {


private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;


private String[] data = {" Item-1 ", " Item-2 ", " Item-3 "};


private TextView tv;


private String selection = "****";


private ArrayAdapter<String> adapter;


private boolean[] status = {false, false, false };


@Override


public void onCreate(Bundle icicle) {


super.onCreate(icicle);


//这诞生了一个相对布局物件,并设定为此Activity的起始书面布局


RelativeLayout r_layout = new RelativeLayout(this); 


setContentView(r_layout);


//取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate


LayoutInflater inflate = (LayoutInflater)


getSystemService(Context.LAYOUT_INFLATER_SERVICE);


LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);


RelativeLayout.LayoutParams param


= new RelativeLayout.LayoutParams(175, WC);


layout.setId(1);


r_layout.addView(layout, param);


tv = (TextView)layout.findViewById(R.id.text);


ListView lv = (ListView)layout.findViewById(R.id.list);


lv.setBackgroundResource(R.drawable.bk_red);


adapter = new ArrayAdapter<String>


(this, android.R.layout.simple_list_item_multiple_choice, data);


lv.setAdapter(adapter); lv.setItemsCanFocus(false);


lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);


lv.setOnItemClickListener( this);


Button btn1 = new Button(this);


btn1.setBackgroundResource(R.drawable.bk_ok_exit);


btn1.setId(2); btn1.setText("OK"); btn1.setOnClickListener(listener);


param = new RelativeLayout.LayoutParams(60, WC);


param.addRule(RelativeLayout.RIGHT_OF, 1);


param.leftMargin = 15; param.topMargin = 20;


r_layout.addView(btn1, param);


Button btn2 = new Button(this);


btn2.setBackgroundResource(R.drawable.bk_ok_exit);


btn2.setId(3); btn2.setText("Exit"); btn2.setOnClickListener(listener);


param = new RelativeLayout.LayoutParams(60, WC);


param.addRule(RelativeLayout.BELOW, 2);


param.addRule(RelativeLayout.ALIGN_LEFT, 2);


param.topMargin = 25;


r_layout.addView(btn2, param);


}


OnClickListener listener = new OnClickListener() {


public void onClick(View v) {


if(v.getId() == 2){


String ss = "{";


for(int i=0; i< adapter.getCount(); i++){


if(status[i])


{


ss += data[i]; ss += " ";


}


}


ss += "}";


setTitle(ss);


}


else if(v.getId() == 3)


finish();


}};


public void onItemClick(AdapterView<?> arg0, View v, int idx, long arg3)


{


status[idx] = ! status[idx];


}


}


<?xml version="1.0" encoding="utf-8"?>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"


android:orientation="vertical"


android:layout_width="fill_parent"


android:layout_height="fill_parent" >


<TextView android:id="@+id/text"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:text="Hello World, ex07" />


<ListView android:id="@+id/list"


android:layout_width="wrap_content"


android:layout_height="wrap_content" />


</LinearLayout>



package com.misoo.ex07;


import android.app.Activity;


import android.content.Context;


import android.os.Bundle;


import android.view.View;


import android.view.ViewGroup;


import android.view.LayoutInflater;


import android.view.View.OnClickListener;


import android.widget.AdapterView;


import android.widget.ArrayAdapter;


import android.widget.Button;


import android.widget.LinearLayout;


import android.widget.ListView;


import android.widget.RelativeLayout;


import android.widget.TextView;


import android.widget.AdapterView.OnItemClickListener;


//此程序是采用相对布局方式。所谓的相对是指定我们叙述一个组件的位置时,会以其中的另外一个组件为基准。


public class ex07 extends Activity implements OnItemClickListener {


/** Called when the activity is first created. */


private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;


private String[] data = {"Item-1", "Item-2", "Item-3"};


private TextView tv;


private String selection = "****";



@Override


public void onCreate(Bundle icicle) {


super.onCreate(icicle);


//下面代码诞生了一个相对布局物件,并设定为此Activity的起始书面布局


RelativeLayout r_layout = new RelativeLayout(this);


setContentView(r_layout);


//下面代码取得一个系统的LAYOUT_INFLATE_SERVICE服务的物件,取名为inflate,但是为什么要获得系统服务呢?


LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);


//下面指令呼叫inflate物件的inflate()函数依据/res/layout/list.xml之定义而诞生一个LinearLayout物件


LinearLayout layout = (LinearLayout)inflate.inflate(R.layout.list, null);


//这诞生一个RelativeLayout的参数物件,透过参数物件来设置此layout集合布局的宽度为120点,而高则视其内容而定。


RelativeLayout.LayoutParams param


= new RelativeLayout.LayoutParams(120, WC);


layout.setId(1); //


r_layout.addView(layout, param);


//下面两句代码分别找出layout里面的两个小View,并由tv和lv分别参考之


tv = (TextView)layout.findViewById(R.id.text);


ListView lv = (ListView)layout.findViewById(R.id.list);


//下面这句代码从data[]阵列取出资料,并交给lv物件,将显示于书面的List选单里


ArrayAdapter<String> adapter = new ArrayAdapter<String>


(this, android.R.layout.simple_list_item_1, data);


lv.setAdapter(adapter);


lv.setOnItemClickListener(this);


//------------------------------------------------------


Button btn1 = new Button(this);


btn1.setId(2);


btn1.setText("OK");


btn1.setOnClickListener(listener);


param = new RelativeLayout.LayoutParams(60, WC);


param.addRule(RelativeLayout.RIGHT_OF, 1);


param.leftMargin = 15;


param.topMargin = 20;


r_layout.addView(btn1, param);


//------------------------------------------------------


Button btn2 = new Button(this);


btn2.setId(3);


btn2.setText("Exit");


btn2.setOnClickListener(listener);


param = new RelativeLayout.LayoutParams(60, WC);


param.addRule(RelativeLayout.BELOW, 2);


param.addRule(RelativeLayout.ALIGN_LEFT, 2);


param.topMargin = 25;


r_layout.addView(btn2, param);


}



OnClickListener listener = new OnClickListener()


{


public void onClick(View v) {


if(v.getId() == 2)


tv.setText(selection);


else if(v.getId() == 3)


finish();


}


};


public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


// TODO Auto-generated method stub


setTitle(data[arg2]);


selection = data[arg2];


}



}


package com.misoo.ex08;


import android.app.Activity;


import android.os.Bundle;


import android.widget.Button;


import android.widget.ImageView;


import android.widget.RelativeLayout;


import android.widget.EditText;


import android.widget.TableLayout;


import android.widget.TableRow;


import android.view.View;


import android.view.ViewGroup;


import android.view.View.OnClickListener;




public class ex08 extends Activity implements OnClickListener {


private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;



@Override public void onCreate(Bundle icicle) {


super.onCreate(icicle);


//根据下面所说的嵌套层次,首先是定义最大的view,并设定为目前布局(this值)


RelativeLayout r_layout = new RelativeLayout(this);


setContentView(r_layout);


//当书面上的一群view排成一个矩阵或者是表格形式时,就采用TableLayout来叙述其布局方式。


//接着定义第二个的TableLayout,并加入到r_layout里


TableLayout tableLayout = new TableLayout(this);


r_layout.addView(tableLayout, new RelativeLayout.LayoutParams(WC, WC));


tableLayout.setId(1);


//此程序采用的嵌套层次为:RelativeLayout->TableLayout->TableRow->EditText->Button->ImageView


//再定义第三个的TableRow,并加入到tableLayout里


TableRow tableRow1 = new TableRow(this);


tableLayout.addView(tableRow1, new TableLayout.LayoutParams(WC, WC));


//最后定义最小的view,并加入到tableRow里


ImageView iv = new ImageView(this);


tableRow1.addView(iv);


iv.setImageDrawable(getResources().getDrawable(R.drawable.star_big_on));


EditText edit1 = new EditText(this);


tableRow1.addView(edit1);




//-------------------------------------------------


TableRow tableRow2 = new TableRow(this);


tableLayout.addView(tableRow2, new TableLayout.LayoutParams(WC, WC));


ImageView iv2 = new ImageView(this);


iv2.setImageDrawable(getResources().getDrawable(R.drawable.gallery_photo_4));


tableRow2.addView(iv2);


EditText edit2 = new EditText(this);


tableRow2.addView(edit2);


//-------------------------------------------------


Button btn = new Button(this);


RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(WC, WC);


param.addRule(RelativeLayout.BELOW, 1);


param.topMargin = 20;


r_layout.addView(btn, param);


btn.setText("Exit");


btn.setOnClickListener(this);


}


public void onClick(View arg0) {


// TODO Auto-generated method stub


finish();


}



}



分享到:
评论
1 楼 lalaeye 2014-02-11  
学习一下,明天再看。

相关推荐

    android框架设计模式和设计原则

    在Android开发领域,深入理解框架设计模式和设计原则是提升专业技能的关键步骤。设计模式是软件工程中的经验总结,它们是解决常见问题的有效方案。设计原则则是指导我们编写高质量、可维护代码的准则。以下是对这些...

    android 框架设计

    android 框架设计 framework 开发

    ANDROID框架揭秘

    Android框架设计遵循了模块化、可扩展性和兼容性的原则。它将复杂的系统功能分解成多个独立的服务,每个服务都可以根据需要动态加载和卸载。这种设计使得Android系统既能够适应不同的硬件平台,也能够随着技术的发展...

    android-框架设计分享(PPT文档).ppt

    《Android框架设计分享》 Android框架设计是移动应用开发中的重要环节,它关乎到应用程序的稳定性和可维护性。在Android开发中,架构的选择对于项目的长远发展至关重要。本分享主要探讨了Android框架设计的一些核心...

    github上很火的一个Android UI框架,SlidingMenu

    github上很火的一个Android UI框架,SlidingMenu.已经将所需要的Actionbarssherlock和SlidingMenu库打包好。下载后解压并且,将Actionbarssherlock,SlidingMenu和SlidingMenuExample这三个文件夹import到eclipse中...

    Android源码Telephony 框架设计解析

    二、Telephony中多卡及多运营商设计区分 6 1.telephony中的多卡 7 1)AP区分多卡 7 2)modem区分多卡 12 2.telephony中的多运营商设计 14 三、Telephony中AIDL模式设计 15 四、Telephony中观察者模式设计 16 五、...

    Android通用框架设计与完整电商APP开发

    Android通用框架设计与完整电商APP开发,欢迎大家下载,

    Android通用网络框架设计

    Android通用网络框架设计思维导图,打造属于自己的敏捷开发框架

    Android软件架构设计

    通过阅读《Android软件架构设计》,开发者不仅能掌握Android框架设计的核心原理,还能学习到如何根据项目需求选择合适的架构模式,以及如何有效地组织和优化代码,从而打造高质量的Android应用。这本书无疑将为...

    基于微信支付、支付宝支付等第三方支付的Android框架.rar

    3. **Android框架设计**: 这个框架可能采用模块化设计,将微信支付和支付宝支付封装为独立的服务或者组件,便于开发者根据需求选择接入。同时,为了保证兼容性和安全性,框架可能会包含对不同Android版本的适配...

    android设计招式之美(全)

    《Android设计招式之美》是一本深入探讨Android框架设计模式的专业书籍,涵盖了从基础到高级的各种设计技巧。这本书通过对各种设计模式的详细讲解,旨在帮助开发者提升在Android平台上的编程能力,实现更高效、可...

    android框架(源代码)

    本文将深入探讨"android框架(源代码)"中的关键知识点,特别是与`TabHost`相关的实现。 Android框架是Google为开发者提供的一个开放源代码平台,它包含了操作系统、中间件和关键应用,旨在帮助开发者快速开发...

    android ,google手机开发书籍代码1

    《Android 框架设计与应用程式开发》是高焕堂先生所著的一本深入探讨 Android 开发的经典著作。这本书籍旨在帮助读者理解和掌握 Android 应用程序的设计与实现,从而提升开发技能。通过阅读本书及配套的代码示例,...

    android ,google手机开发书籍代码2

    《Android 框架设计与应用程式开发》是高焕堂先生所著的一本深入探讨 Android 开发的经典著作。这本书籍旨在帮助读者理解和掌握 Android 应用程序的开发技术,特别是针对 Android 框架的设计原理和实际运用。在提供...

    Android通用框架设计与完整电商APP开发,带测试json

    Android通用框架设计与完整电商APP开发,附带json文件,全程带你从零设计通用的项目框架,并通过框架快速开发一个完整电商App验证和完善框架的复用性与灵活性等,综合提高你的项目框架设计能力和业务功能的快速实现...

    Android设计招式之美-1

    #### 设计样式与Android框架设计 在深入探讨《Android设计招式之美-1》之前,我们先了解该书的主要内容及其重要性。本书主要聚焦于Android应用框架的设计思想和技术实践,特别是通过一系列的设计招式(即设计模式)...

    台湾高焕堂Android讲义

    24.Observer样式应用于Android框架设计.doc 25.使用SQLite的Blob储存.mp3档案.doc 26.活用Android的Message Queue1.doc 27.活用Android的Message Queue(2).doc 28.Anrdroid的Message Queue3.doc 29&30认识UI Thread....

Global site tag (gtag.js) - Google Analytics