Android開(kāi)發(fā)學(xué)習(xí)筆記 Gallery和GridView淺析
一.Gallery的簡(jiǎn)介
Gallery(畫(huà)廊)是一個(gè)鎖定中心條目并且擁有水平滾動(dòng)列表的視圖,一般用來(lái)瀏覽圖片,并且可以響應(yīng)事件顯示信息。Gallery還可以和ImageSwitcher組件結(jié)合使用來(lái)實(shí)現(xiàn)一個(gè)通過(guò)縮略圖來(lái)瀏覽圖片的效果。
Gallery常用的XML屬性
|
屬性名稱
|
描述
|
|||||||||||||||||||||||||||||||||||||||
|
android:animationDuration
|
設(shè)置布局變化時(shí)動(dòng)畫(huà)的轉(zhuǎn)換所需的時(shí)間(毫秒級(jí))。僅在動(dòng)畫(huà)開(kāi)始時(shí)計(jì)時(shí)。該值必須是整數(shù),比如:100。
|
|||||||||||||||||||||||||||||||||||||||
|
android:gravity
|
指定在對(duì)象的X和Y軸上如何放置內(nèi)容。指定一下常量中的一個(gè)或多個(gè)(使用 “|”分割)
|
|||||||||||||||||||||||||||||||||||||||
|
android:spacing
|
圖片之間的間距
|
|||||||||||||||||||||||||||||||||||||||
|
android:unselectedAlpha
|
設(shè)置未選中的條目的透明度(Alpha)。該值必須是float類型,比如:“1.2”。
|
首先介紹Gallery單獨(dú)使用的例子:
MainActivity.java
package com.android.gallerydemo;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Gallery gallery;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gallery = (Gallery)findViewById(R.id.gallery);
//設(shè)置圖片適配器
gallery.setAdapter(new ImageAdapter(this));
//設(shè)置監(jiān)聽(tīng)器
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?>parent, View v, int position, long id) {
Toast.makeText(MainActivity.this, "點(diǎn)擊了第"+(position+1)+"張圖片", Toast.LENGTH_LONG).show();
}
});
}
}
class ImageAdapter extends BaseAdapter{
//聲明Context
private Context context;
//圖片源數(shù)組
private Integer[] imageInteger={
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7
};
//聲明 ImageAdapter
public ImageAdapter(Context c){
context = c;
}
@Override
//獲取圖片的個(gè)數(shù)
public int getCount() {
return imageInteger.length;
}
@Override
//獲取圖片在庫(kù)中的位置
public Object getItem(int position) {
return position;
}
@Override
//獲取圖片在庫(kù)中的位置
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
//給ImageView設(shè)置資源
imageView.setImageResource(imageInteger[position]);
//設(shè)置比例類型
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//設(shè)置布局 圖片128x192顯示
imageView.setLayoutParams(new Gallery.LayoutParams(128, 192));
return imageView;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?> <Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:background="?android:galleryItemBackground" />
效果圖:

Gallery和ImageSwitcher組件結(jié)合使用的例子:
MainActivity.java
package com.android.gallerytest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Gallery.LayoutParams;
import android.widget.ViewSwitcher.ViewFactory;
public class MainActivity extends Activity implements OnItemSelectedListener,
ViewFactory {
private ImageSwitcher mSwitcher;
//大圖片對(duì)應(yīng)的縮略圖源數(shù)組
private Integer[] mThumbIds = { R.drawable.sample_thumb_0,
R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,
R.drawable.sample_thumb_3, R.drawable.sample_thumb_4,
R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,
R.drawable.sample_thumb_7 };
//大圖片源數(shù)組
private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//設(shè)置窗口無(wú)標(biāo)題
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
//注意在使用一個(gè)ImageSwitcher之前,
//一定要調(diào)用setFactory方法,要不setImageResource這個(gè)方法會(huì)報(bào)空指針異常。
mSwitcher.setFactory(this);
//設(shè)置動(dòng)畫(huà)效果
mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery g = (Gallery) findViewById(R.id.gallery);
//添加OnItemSelectedListener監(jiān)聽(tīng)器
g.setAdapter(new ImageAdapter(this));
g.setOnItemSelectedListener(this);
}
//創(chuàng)建內(nèi)部類ImageAdapter
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mThumbIds[position]);
//設(shè)置邊界對(duì)齊
i.setAdjustViewBounds(true);
//設(shè)置布局參數(shù)
i.setLayoutParams(new Gallery.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//設(shè)置背景資源
i.setBackgroundResource(R.drawable.picture_frame);
return i;
}
private Context mContext;
}
@Override
//實(shí)現(xiàn)onItemSelected()方法,更換圖片
public void onItemSelected(AdapterView<?> adapter, View v, int position,
long id) {
//設(shè)置圖片資源
mSwitcher.setImageResource(mImageIds[position]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
@Override
//實(shí)現(xiàn)makeView()方法,為ImageView設(shè)置布局格式
public View makeView() {
ImageView i = new ImageView(this);
//設(shè)置背景顏色
i.setBackgroundColor(0xFF000000);
//設(shè)置比例類型
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
//設(shè)置布局參數(shù)
i.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return i;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageSwitcher
android:id="@+id/switcher"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
/>
<Gallery
android:id="@+id/gallery"
android:background="#55000000"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:spacing="16dp"
/>
</RelativeLayout>
效果圖:

二.GridView的簡(jiǎn)介
GridView(網(wǎng)格視圖)是按照行列的方式來(lái)顯示內(nèi)容的,一般用于顯示圖片,圖片等內(nèi)容,比如實(shí)現(xiàn)九宮格圖,用GridView是首選,也是最簡(jiǎn)單的。主要用于設(shè)置Adapter。
GridView常用的XML屬性:
|
屬性名稱
|
描述
|
|
android:columnWidth
|
設(shè)置列的寬度。
|
|
android:gravity
|
設(shè)置此組件中的內(nèi)容在組件中的位置??蛇x的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical 可以多選,用“|”分開(kāi)。
|
|
android:horizontalSpacing
|
兩列之間的間距。
|
|
android:numColumns
|
設(shè)置列數(shù)。
|
|
android:stretchMode
|
縮放模式。
|
|
android:verticalSpacing
|
兩行之間的間距。
|
下面有三個(gè)例子,第一個(gè)是只顯示圖片的,第二個(gè)是顯示圖片文字的(這里的圖片是Android系統(tǒng)自帶的圖片),第三個(gè)是顯示自定義的圖片文字。前面兩個(gè)例子的實(shí)現(xiàn)都不是很難,第三個(gè)例子的實(shí)現(xiàn)有些復(fù)雜,學(xué)習(xí)GridView的時(shí)候,就想著能不能自定義自己喜歡的圖片加上文字,在網(wǎng)上找些資料,一般都是第二個(gè)例子的形式的,最后在視頻學(xué)習(xí)上找到了能實(shí)現(xiàn)自定義自己的圖片的例子。自己就照著例子去學(xué)習(xí),修改成了第三個(gè)例子。
第一個(gè)例子:
MainActivity.java
package com.android.gridview.activity;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gv = (GridView)findViewById(R.id.GridView1);
//為GridView設(shè)置適配器
gv.setAdapter(new MyAdapter(this));
//注冊(cè)監(jiān)聽(tīng)事件
gv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(MainActivity.this, "pic" + position, Toast.LENGTH_SHORT).show();
}
});
}
}
//自定義適配器
class MyAdapter extends BaseAdapter{
//上下文對(duì)象
private Context context;
//圖片數(shù)組
private Integer[] imgs = {
R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
};
MyAdapter(Context context){
this.context = context;
}
public int getCount() {
return imgs.length;
}
public Object getItem(int item) {
return item;
}
public long getItemId(int id) {
return id;
}
//創(chuàng)建View方法
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(75, 75));//設(shè)置ImageView對(duì)象布局
imageView.setAdjustViewBounds(false);//設(shè)置邊界對(duì)齊
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//設(shè)置刻度的類型
imageView.setPadding(8, 8, 8, 8);//設(shè)置間距
}
else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imgs[position]);//為ImageView設(shè)置圖片資源
return imageView;
}
}
main.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"
>
<GridView
android:id="@+id/GridView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>
效果圖:

第二個(gè)例子:
MainActivity.java
package com.android.gridview2.activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private GridView gv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview);
//準(zhǔn)備要添加的數(shù)據(jù)條目
List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 9; i++) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("imageItem", R.drawable.icon);//添加圖像資源的ID
item.put("textItem", "icon" + i);//按序號(hào)添加ItemText
items.add(item);
}
//實(shí)例化一個(gè)適配器
SimpleAdapter adapter = new SimpleAdapter(this,
items,
R.layout.grid_item,
new String[]{"imageItem", "textItem"},
new int[]{R.id.image_item, R.id.text_item});
//獲得GridView實(shí)例
gv = (GridView)findViewById(R.id.mygridview);
//為GridView設(shè)置適配器
gv.setAdapter(adapter);
}
}
gridview.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <GridView android:id="@+id/mygridview" android:numColumns="3" android:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:stretchMode="columnWidth" /> </LinearLayout>
grid_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="wrap_content" android:layout_height="fill_parent" android:paddingBottom="6dip" > <ImageView android:id="@+id/image_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/text_item" android:layout_below="@+id/image_item" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout>
效果圖:

第三個(gè)例子:
MainActivity.java
package com.android.gridview3;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends Activity
{
private GridView gridView;
//圖片的文字標(biāo)題
private String[] titles = new String[]
{ "pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"};
//圖片ID數(shù)組
private int[] images = new int[]{
R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
R.drawable.pic7, R.drawable.pic8,R.drawable.pic9
};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView = (GridView) findViewById(R.id.gridview);
PictureAdapter adapter = new PictureAdapter(titles, images, this);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(MainActivity.this, "pic" + (position+1), Toast.LENGTH_SHORT).show();
}
});
}
}
//自定義適配器
class PictureAdapter extends BaseAdapter{
private LayoutInflater inflater;
private List<Picture> pictures;
public PictureAdapter(String[] titles, int[] images, Context context)
{
super();
pictures = new ArrayList<Picture>();
inflater = LayoutInflater.from(context);
for (int i = 0; i < images.length; i++)
{
Picture picture = new Picture(titles[i], images[i]);
pictures.add(picture);
}
}
@Override
public int getCount()
{
if (null != pictures)
{
return pictures.size();
} else
{
return 0;
}
}
@Override
public Object getItem(int position)
{
return pictures.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
if (convertView == null)
{
convertView = inflater.inflate(R.layout.picture_item, null);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
} else
{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.title.setText(pictures.get(position).getTitle());
viewHolder.image.setImageResource(pictures.get(position).getImageId());
return convertView;
}
}
class ViewHolder
{
public TextView title;
public ImageView image;
}
class Picture
{
private String title;
private int imageId;
public Picture()
{
super();
}
public Picture(String title, int imageId)
{
super();
this.title = title;
this.imageId = imageId;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public int getImageId()
{
return imageId;
}
public void setImageId(int imageId)
{
this.imageId = imageId;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />
picture_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
>
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:scaleType="fitXY"
android:padding="4dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
/>
</LinearLayout>
效果圖:

本文出自 “IT的點(diǎn)點(diǎn)滴滴” 博客
- Android入門之Gallery用法實(shí)例解析
- Android 使用Gallery實(shí)現(xiàn)3D相冊(cè)(附效果圖+Demo源碼)
- Android入門之Gallery+ImageSwitcher用法實(shí)例解析
- 怎樣刪除android的gallery中的圖片實(shí)例說(shuō)明
- Android控件Gallery3D效果實(shí)例代碼
- Android App開(kāi)發(fā)中使用RecyclerView實(shí)現(xiàn)Gallery畫(huà)廊的實(shí)例
- android Gallery組件實(shí)現(xiàn)的iPhone圖片滑動(dòng)效果實(shí)例
- Android App中使用Gallery制作幻燈片播放效果
- Android自定義HorizontalScrollView打造超強(qiáng)Gallery效果
- Android編程滑動(dòng)效果之Gallery仿圖像集瀏覽實(shí)現(xiàn)方法
- Android開(kāi)發(fā)實(shí)現(xiàn)Gallery畫(huà)廊效果的方法
- Android開(kāi)發(fā)中畫(huà)廊視圖Gallery的兩種使用方法分析
相關(guān)文章
Android Popupwindow彈出窗口的簡(jiǎn)單使用方法
這篇文章主要為大家詳細(xì)介紹了Android Popupwindow彈出窗口的簡(jiǎn)單使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android4.2中全屏或者取消標(biāo)題欄的方法總結(jié)
有的時(shí)候我們會(huì)看到,會(huì)先出現(xiàn)標(biāo)題欄,然后再消失,因?yàn)槲覀冎皇窃赼ctivity的oncreate方法中定義的,其他實(shí)現(xiàn)方法如下,感興趣的朋友可以了解下哈2013-06-06
android開(kāi)機(jī)自啟動(dòng)原理與實(shí)現(xiàn)案例(附源碼)
完成一下步驟后,啟動(dòng)一次程序,完成注冊(cè)。等下次手機(jī)開(kāi)機(jī)時(shí),該軟件即會(huì)自動(dòng)啟動(dòng),具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06
Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Android中判斷l(xiāng)istview是否滑動(dòng)到頂部和底部的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Android WebView使用方法詳解 附j(luò)s交互調(diào)用方法
這篇文章主要為大家詳細(xì)介紹了Android WebView使用方法詳解,文中附j(luò)s交互調(diào)用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Android自定義View繪制的方法及過(guò)程(二)
這篇文章主要解析了Android自定義View繪制的方法及過(guò)程,介紹了onSizeChanged、onDraw、onMeasure順序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android自定義view實(shí)現(xiàn)圓環(huán)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)圓環(huán)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
通過(guò)源碼角度看看AccessibilityService
這篇文章主要給大家介紹了關(guān)于通過(guò)源碼角度看看AccessibilityService的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
Android uses-permission權(quán)限列表中文注釋版
Android有一個(gè)精心設(shè)計(jì)的安全模型。每一個(gè)應(yīng)用都有其自己Linux用戶和群組,在單獨(dú)的進(jìn)程和VM上運(yùn)行,不能影響到其他應(yīng)用2014-05-05

