Android知识

一般情况下,Android应用程序由以下4种组件构成:1、Activity 2、Service3、BroadcastReceiver4、Content Provider


Android进程的类型包括:1、前台(foregound)进程 2、可见(Visible)进程 3、服务(Service)进程4、后台(background)进程 5、空(Empty)进程


Android应用程序一般包含:Java源代码、AndroidManifest.xml、资源文件。

Java源代码由Java编译器编译为class文件,接着dx工具处理为Dex字节码;AndroidManifest.xml、资源文件都由aapt处理为二进制文件;之后统一打包签名为apk包。

Android中一个包将生成一个Dex文件。反编译可以为Java源文件。


—————————————————————————————————————————————————————————————————————————————


事件响应事件:new 一个类如ButtonClick,实现OnClickListener里面的onClick方法,button.setOnClickListener(new ButtonClick());


键盘响应事件:如TestActivity继承Activity,重写里面的onKeyDown(int keyCode, KeyEvent msg)方法。KeyEvent为键盘事件类


运动事件(MotionEvent):触摸屏TouchScreen、滚动球TrackBall,是Android的输入设备

触摸屏和滚动球事件主要通过实现以下2个函数来接收:

public boolean onTouchEvent(MotionEvent event)

public boolean onTrackballEvent(MotionEvent event)

MotionEvent类作为参数传入,在这个参数中可以获得运动事件的各种信息。MotionEvent.ACTION_MOVE;MotionEvent.ACTION_UP;MotionEvent.ACTION_DOWN

可获取鼠标的位置,动作类型等等。


画图:写一个类继承View,重写它的onDraw(Canvas canvas)方法。onTouchEvent中可调用invalidate();重新绘制

涉及2个类:Paint类(画笔),Canvas类(画板)

paint.setColor(Color.RED);

canvas.drawColor(Color.WHITE);

canvas.drawCircle(mX, mY,10, paint);


屏幕间跳转和事件传递

Android每一个屏幕基本就是一个activity(活动),屏幕之间的切换实际上就是活动间的调用,跳转关系通过Intent(意图)实现。


比如一个点击按钮的click事件如下:

public void onClick(View v)
{
Intent intent = new Intent(); // 建立Intent
intent.setClass(Forwarding.this, ForwardTarget.class); // 设置活动。第一个为上下文content,第二个为跳转目标activity
startActivity(intent);

finish();//结束当前活动,没有这个的话则第一个活动处于OnPause状态,第二个活动退出之后,第一个活动重新出现,也就是调用onResume函数

}

这里使用的Intent的setClass()的方法的原型如下所示:
Intent setClass(Context packageContext, Class<?> cls)
第一个参数是当前的上下文类型Context,因此把当前的活动设置过去即可(Activity本身继承了Context),第二个是Intent所包含的JAVA类,直接设置forwardTarget.class类(跳转目标类)即可。


带有返回值的跳转(2个屏幕之间的交互)

java源文件ReceiveResult.java的代码片段如下所示

static final private int GET_CODE = 0;
private OnClickListener mGetListener = new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(ReceiveResult.this, SendResult.class);
startActivityForResult (intent, GET_CODE);
}
};


被跳转的目标的Java源文件SendResult.java的代码片段如下所示:

public void onClick(View v)
{
setResult(RESULT_OK, (new Intent()).setAction("Corky!"));
finish();
}

被跳转的目标程序将返回值返回,这里使用的依然是Intent作为交互的信息,通过setAction()设置不同的活动。


返回之后由ReceiveResult.java中重写onActivityResult方法对返回值进行处理,其中,两个整数类型的参数requestCode和resultCode分别代表请求代码和结果码,第三个参数Intent(类型data)表示活动间交互附加的数据信息

@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
if (requestCode == GET_CODE) {
Editable text = (Editable)mResults.getText();
if (resultCode == RESULT_CANCELED) {
text.append("(cancelled)");
} else {
text.append("(okay ");
text.append(Integer.toString(resultCode));
text.append(") ");
if (data != null) {
text.append(data.getAction());
}
}
text.append("\n");
}


菜单的使用

菜单是屏幕中较为独立的元素

使用菜单主要通过重载Activity中的两个函数来实现:
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)


onCreateOptionsMenu()用于在建立菜单时进行设置,建立时为每一个按钮设置ID,菜单项被选择时调用onOptionsItemSelected(),通过MenuItem类的getItemId()函数获得这个菜单的ID,继续进行处理。
菜单类在Android中表示为android.view.Menu类。使用这个类可以进行一些更为细节的设置和操作。
abstract MenuItem add(int groupId, int itemId, int order, CharSequence title)
abstract MenuItem add(int groupId, int itemId, int order, int titleRes)


弹出对话框

对话框的父类是android.app.Dialog,通过构建类android.app.AlertDialog来实现弹出式对话框,可以使用AlertDialog.Builder和不同的参数来构建对话框。

实现方法是继承onCreateDialog()函数,返回一个Dialog类型:

@Override
protected Dialog onCreateDialog(int id) {

}

onCreateDialog()函数的参数id是区分对话框的标示,当调用对话框的时候需要调用showDialog()。
public final void showDialog (int id)
showDialog()函数也是通过id来区分对话框

代码实现的片断如下所示:

return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_two_buttons_title)
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}


单选框和按钮对话框

setSingleChoiceItems

复选框和按钮对话框

setMultiChoiceItems

文本按钮对话框

setView(View)


对话框总结:

对话框的类为android.app.Dialog,通过android.app.AlertDialog.Builder类来建立,在建立的过程中可以进行多项设置。

setIcon()和setTitle():用于设置图标和标题;

setMessage():用于设置提示信息;

setPositiveButton()、setNeutralButton()和setNegativeButton():用于设置左、中、右按钮;

setSingleChoiceItems()和setMultiChoiceItems():用于设置单选项和复选项;

setView():用于设置一个View作为对话框的内容。


—————————————————————————————————————————————————————————————————————————————

控件(Widget)的使用

View 是widgets的基类

扩展者:文本视图TextView、图像视图ImageView、进度条ProgressBar、视图组ViewGroup

ViewGroup可以包含很多子视图,本身也是一个视图


可变按钮ToggleButton

ToggleButton>>>CompoundButton>>>Button>>>TextView>>>View

ToggleButton包含2个开关,可以显示不同的文本textOn(开)和textOff(关)


ImageButton图像按钮,与ImageView主要区别在与ImageButton特定的是具有一个onSetAlpha(int aplha)函数,onSetAlpha函数通过指定0-255来指定Alpha数值。

mageButton只是扩展了ImageView,和普通按钮Button并没有继承(扩展)关系。ImageButton有一个扩展者是ZoomButton,这是一个带有动态缩放功能的图像按钮。


ProgressBar是android.view.View的直接扩展者,支持第二个进度条

int getMax() // 获得进度条的最大值
void setProgress(int progress) // 设置主进度条的进度
void setSecondaryProgress(int secondaryProgress) // 设置第二个进度条的进度
synchronized int getProgress () // 获得进度值
synchronized int getSecondaryProgress () // 获得第二个进度条的进度


自定义视图:

实现一个扩展android.view.View类的类,可以直接构造UI


—————————————————————————————————————————————————————————————————————————————


视图组ViewGroup和布局Layout的使用

Android GUI程序的屏幕体系结构的组织遵循以下原则:
一个屏幕可以包含一个视图;
视图组本身也是一个视图;
视图组可以包含若干个视图


这里一个主要的限制是:在没有视图组的情况下,两个以上的视图(也包括视图组)是不能够并列的。


几种独立使用的视图:

1、WebView网页视图,WebView本身扩展了AbsoluteLayout(绝对布局),因此也是一个ViewGroup

WebView的作用是可以在Android中支持一个HTML格式的元素。由此,虽然WebView也是一个视图组,但是从使用上基本等同普通的控件。

wv = (WebView) findViewById(R.id.wv1);
wv.loadData("<a href='x'>Hello World! - 1</a>", mimeType, encoding);


2、旋转按钮(Spinner)


3、文本切换器(TextSwitcher)


布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout、TableLayout(里面可包含多个TableRow)


线性布局里面:android:orientation="horizontal" 位置可取值horizontal、vertical


GridView网格视图组

xml中使用的android:numColumns 、android:columnWidth、android:horizontalSpacing和android:verticalSpacing类是GridView的特定属性,分别表示了列的数目,列的宽度,水平间距和竖直间距

android:numColumns设置为"auto_fit"表示根据宽度和间距等信息,自动适应。


AbsListView是ListView和GridView的共同父类,它使用ListAdapter作为其中的数据,ListAdapter作为列表的UI和数据的桥梁,通过实现这个类来构建界面上的AbsListView

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadApps();
setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter()); // 设置GridView后面的数据

}

-- - - --- - - --- - - --- - - --- - - -

public class AppsAdapter extends BaseAdapter {
public AppsAdapter() { }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(Grid1.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
public final int getCount() {
return mApps.size();
}
public final Object getItem(int position) {
return mApps.get(position);
}
public final long getItemId(int position) {
return position;
}
}



列表List视图组

它与网格视图组类似,ListView本身的使用方法可以和GridView一样,通过构建一个android.widget.BaseAdapter来完成。在实际的使用过程中,可以使用ListActivity这种更简单的方式。

使用列表类ListView时通常继承ListActivity来代替Activity,ListActivity扩展了Activity可以方便ListView的使用,主要的方法包括以下几个:
void setListAdapter(ListAdapter adapter) // 设置ListAdapter作为数据,自己写一个类继承BaseAdapter
void onListItemClick(ListView l, View v, int position, long id) // Item选择时的函数


Tab组织UI(Tab切换视图)

写一个类可继承TabActivity,主要包含以下方法

TabHost getTabHost()// 返回这个活动的TabHost,TabHost就可以使用addTab进行添加tab
TabWidget getTabWidget()  // 返回这个活动的TabWidget the activity is using to draw the actual tabs.
void onContentChanged() // 当内容变化的时候,更新屏幕的状态



—————————————————————————————————————————————————————————————————————————————


2D图形接口的使用

Android系统的图形API包括2D和3D两部分:2D部分使用android.graphics类,也作为上层控件的构建基础;3D部分使用OpenGL作为标准接口。

2D通过继承android.view.View类,并实现其中的onDraw()函数来实现绘制的工作,绘制的工作主要由android.graphics包来实现

涉及到的类有:Point、Rect 和Color、Bitmap(位图)、Paint、Canvas(画布,核心类,处理onDraw()调用),主要绘制的设置和操作在Paint(画笔)和Canvas(画布)2个类当中


OpenGL 3D图形







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android知识点整理包括但不限于以下内容: 1. Android基础知识: - Android系统架构和组件:包括应用层、应用框架层、系统运行库层和Linux内核层。 - Android应用的生命周期:包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)的生命周期。 - Android应用的资源管理:包括布局文件、字符串资源、图像资源等的使用和管理。 - Android应用的权限管理:包括权限的声明和请求。 2. Android界面开发: - 布局管理器:包括线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)等。 - 视图控件:包括文本视图(TextView)、按钮(Button)、图像视图(ImageView)等。 - 用户交互:包括点击事件、手势识别、触摸事件等的处理。 3. Android数据存储: - Shared Preferences:用于存储少量的键值对数据。 - SQLite数据库:用于存储结构化数据。 - 文件存储:包括内部存储和外部存储的文件存储方式。 4. Android网络编程: - 网络请求:使用HttpURLConnection或HttpClient进行网络请求。 - JSON解析:使用JSONObject或GSON库解析JSON数据。 - 图片加载:使用Picasso或Glide库加载网络图片。 5. Android多媒体开发: - 音频播放:使用MediaPlayer进行音频播放。 - 视频播放:使用VideoView或ExoPlayer进行视频播放。 - 相机和相册:使用Camera或Camera2 API进行拍照和录制视频。 6. Android传感器: - 加速度传感器、光传感器、陀螺仪等的使用。 7. Android地图和定位: - 使用Google Maps API进行地图显示和定位功能的开发。 以上仅为Android知识点的概要,实际开发中还涉及更多的内容。希望以上信息对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值