1、弹提示信息
Toast.makeText(act, "短信发送完成", Toast.LENGTH_LONG).show();
2、发送短信
SmsManager smsManager = SmsManager.getDefault(); PendingIntent sentIntent = PendingIntent.getBroadcast(act, 0, new Intent(), 0); smsManager.sendTextMessage(addressStr, null, contentStr , sentIntent, null); Toast.makeText(act, "短信发送完成", Toast.LENGTH_LONG).show()
3、监听器实现方法
一、implements OnClickListener 实现该接口,然后实现方法
二、匿名实现
bn.setOnClickListener(new OnClickListener() { //实现事件处理方法 @Override public void onClick(View v) { // TODO Auto-generated method stub show.setText("bn按钮被单击了!"); } });
三、配置实现
<!-- 在标签中为按钮绑定事件处理方法 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="单击我" android:onClick="clickHandler" />
四、自定义listerner
class MyClickListener implements View.OnClickListener
4、Configuration 用于描述手机上的配置信息
Configuration config = getResources().getConfiguration();
5、handler
android不允许在子线程中更新界面组件。使用Handler 更改组件信息
handler不应该在子线程中创建,应该在全局变量中定义。
//定义一个计时器,让该计时器周期性地执行指定任务
final Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { //如果该消息是本程序所发送的 if (msg.what == 0x1233) { //动态地修改所显示的图片 show.setImageResource(imageIds[currentImageId++]); if (currentImageId >= 4) { currentImageId = 0; } } } };
new Timer().schedule(new TimerTask() { @Override public void run() { //新启动的线程无法访问该Activity里的组件 //所以需要通过Handler发送信息 Message msg = new Message(); msg.what = 0x1233; //发送消息 myHandler.sendMessage(msg); } }, 0 , 800);
5、获取raw目录下文件大小
InputStream ins = context.getResources().openRawResource (R.raw.video) int videoSize = ins.available();
这种写法没用
Uri filePath = Uri.parse("android.resource://com.android.FileTransfer/" + R.raw.video);
File videoFile = new File(filePath.getPath());
mWebView.loadUrl("file://sdcard/index.html");
6、预定义样式
http://www.cnblogs.com/hnrainll/archive/2012/05/18/2507378.html
7、Android Unable to resolve target 'android-8'
http://blog.163.com/jenny_tyb/blog/static/208669106201272922654303/
8、width与layout_width区别
width指控件中文本的格式,layout_width注重的是控件与父控件之间的关系。。。想想小盒模型
9、spinner使用方法
其实就是个下拉列表,需要设置一个adapter,有点类似listView,可以使用arrayAdapter也可以自行写一个adapter扩展BaseAdapter。
http://blog.csdn.net/xu_song/article/details/7700089
/** * 将drawable转换成bitmap * * @param drawable * @return Bitmap */ private static Bitmap drawableToBitmap(Drawable drawable) { // 取drawable的长宽 int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; // 取drawable的颜色格式 Bitmap bitmap = Bitmap.createBitmap(width, height, config); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, height); drawable.draw(canvas); return bitmap; } /** * 单位转换:dip => px * * @param ctx 上下文环境 * @param dipValue * @return */ public static int dip2px(Context ctx, int dipValue) { final float scale = ctx.getResources().getDisplayMetrics().density; return (int) (dipValue * scale); }
10、自定义menuOption,使用此方法拦截。
public boolean onMenuOpened(int featureId, Menu menu) { if (menuDialog == null) { menuDialog = new AlertDialog.Builder(this).setView(menuView).show(); } else { menuDialog.show(); } return false;// 返回为true 则显示系统menu }
11、SimpleAdapter 的用法
public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
第二个参数是数据,一般设置为HashMap,每个listView的数据对象。。第三个参数,为布局文件,第四个参数,表示hashmap对象的参数,第五个参数为对象布局文件中的ViewId
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < menuNameArray.length; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("itemImage", imageResourceArray[i]); map.put("itemText", menuNameArray[i]); data.add(map); } SimpleAdapter simperAdapter = new SimpleAdapter(this, data, R.layout.item_menu, new String[] { "itemImage", "itemText" }, new int[] { R.id.item_image, R.id.item_text }); return simperAdapter;
如果一个Activity只需要一个列表,可用ListActiviy来使用,不需要配置布局文件
package com.example.listviewscroll; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.app.ListActivity; import android.database.DataSetObserver; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); String str[]=new String[20]; for(int i=0;i<str.length;i++){ str[i]="item "+i; } ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str); setListAdapter(aa); } }
12、获取array数组配置文件的值
//获取相应对象 String[] ls=getResources().getStringArray(R.array.action);
13、spinner的用法
Q:同样的配置代码,为什么有的下拉选项有一个单选按钮,而自己写的就诶呦捏?貌似也不是android version问题。
list.add("北京1"); list.add("上海2"); list.add("深圳3"); list.add("南京4"); list.add("重庆"); mySpinner = (Spinner)findViewById(R.id.spinner1); //第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。 adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list); //第三步:为适配器设置下拉列表下拉时的菜单样式。 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //第四步:将适配器添加到下拉列表上 mySpinner.setAdapter(adapter);
14、可用View来做分割线
<View android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
15、ListView
一般把listView中ItemView单独配置成一个配置文件。
16、时间设置
protected Dialog onCreateDialog(int id) { switch (id) { case 1: //监听器 return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false); case 2: return new DatePickerDialog(this, mDateSetListener, mYear, mMonth-1, mDay); } return null; }
17、shape的使用
可以用来修改,组件的corner圆角
http://www.eoeandroid.com/thread-49097-1-1.html
18、滑动界面效果ViewPager,ViewFlipper ,Gallery
ViewPager是3.0+之后才有的,用之前的版本需要添加一个android.v4_support.jar
http://www.cnblogs.com/bill-joy/archive/2012/04/09/2438688.html
ViewFlipper 可以设置间隔时间让他自动切换,如果需要滑动手势需要监听,
ViewPager 设置自定义一个PagerAdapter。可以通过滑动手势翻页。
setCurrentItem();
19、popWindow使用
可以悬浮出一个窗口。
public void showPopupWindow() { Context mContext = PopupWindowDemo.this; LayoutInflater mLayoutInflater = (LayoutInflater) mContext .getSystemService(LAYOUT_INFLATER_SERVICE); View music_popunwindwow = mLayoutInflater.inflate( R.layout.music_popwindow, null); mPopupWindow= new PopupWindow(music_popunwindwow, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //设置显示位置 mPopupWindow.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 0, 0); //mPopWindow上其他的组件 img=(ImageButton)music_popunwindwow.findViewById(R.id.control_play); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { secondPop(); } }); }
http://trinea.iteye.com/blog/1461095
20、
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout header = (LinearLayout)inflater.inflate(R.layout.categoryheader, null);
21、物理返回键,返回上一个Activity
默认会调用这个函数onBackPressed()
Activity A startActiviy(this,B),A调用pause,
B中按返回键,默认是finish当前Activity B,返回到上一个activityA
保证按返回的时候,不会finish当前Activity即可。
将每个activity的属性中增加 android:launchMode="singleInstance"
22、滑动抽屉的使用
SlidingDrawer should be used as an overlay inside layouts. This means SlidingDrawer should only be used inside of a FrameLayout or a RelativeLayout for instance
api 17之后过时了
http://www.eoeandroid.com/thread-173470-1-1.html
例子
http://676744379-qq-com.iteye.com/blog/1125147
1:handle: 点击的按钮
2:content:展开的内容
sd.setOnDrawerOpenListener(new OnDrawerOpenListener() { @Override public void onDrawerOpened() { im.setImageResource(R.drawable.right); } }); // 设置SlidingDrawer被关闭的事件处理 sd.setOnDrawerCloseListener(new OnDrawerCloseListener() { @Override public void onDrawerClosed() { im.setImageResource(R.drawable.left); } });
23、获取手机多媒体数据库
http://aijiawang-126-com.iteye.com/blog/602921
private List<MusicData> getMusicFileList() { List<MusicData> list = new ArrayList<MusicData>(); String[] projection = new String[]{MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ARTIST}; long time1 = System.currentTimeMillis(); //获取歌曲的信息 Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI , projection, null, null, null); if (cursor != null) { cursor.moveToFirst(); int colNameIndex = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); int colTimeIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION); int colPathIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA); int colArtistIndex = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); int fileNum = cursor.getCount(); for(int counter = 0; counter < fileNum; counter++){ MusicData data = new MusicData(); data.mMusicName = cursor.getString(colNameIndex); data.mMusicTime = cursor.getInt(colTimeIndex); data.mMusicPath = cursor.getString(colPathIndex); data.mMusicAritst = cursor.getString(colArtistIndex); list.add(data); cursor.moveToNext(); } cursor.close(); } long time2 = System.currentTimeMillis(); Log.i(TAG, "seach filelist cost = " + (time2 - time1)); return list; }
24、水平滚动
http://blog.csdn.net/pathuang68/article/details/6561380
+ ScrollView只能包含一个直接子view,这是因为ScrollView是FrameLayout的派生类,通常情况下,这个直接子view是一个LinearLayout,在直接子view(比如LinearLayout)中,可以再包含其他对象。
+ScrollView只支持垂直滚动。
+HorizontalScrollView除只支持水平滚动外,其他都和ScrollView一样。
+如果要屏幕支持垂直滚动和水平滚动,那么就要让HorizontalScrollView作为ScrollView的直接子view,或者让ScrollView作为HorizontalScrollView的直接子view。
1、获取直接子view
LinearLayout parent=(LinearLayout) getChildAt(0);
2、增加view
parent.addView(children[i]);
3、增加全局视图监听器
class MyOnGlobalLayoutListener implements OnGlobalLayoutListener
getViewTreeObserver().addOnGlobalLayoutListener(listener);
4、添加子view
parent.addView(children[i], dims[0], dims[1]);
//这样写就完全透明了,一个透明的TextView啊。。
View transparent = new TextView(this);
25、Android中dip, dp, px, sp的区别
http://blog.csdn.net/chenji001/article/details/6018780
26、手势监听
1、activity中复写onTouch,如果这个滑动时间被gestureDetector处理了,返回true。
public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; }
2、
// 实例化 SampleGuest gestureListener = new SampleGuest(this); gestureDetector = new GestureDetector(gestureListener);
3、
public class SampleGuest implements OnGestureListener
步骤操作在activity中捕获,然后在自定中回调手势事件。
http://edison-cool911.iteye.com/blog/695163
4、自定义ArrayListAdapter的使用
http://zhangfy068.iteye.com/admin/blogs/1822515
27、盒子模型
28、service详解
http://android.blog.51cto.com/268543/527314
29、获取目录下资源
1、可以使用反射,获取资源的R.drawer.id
try{ Field field=R.drawable.class.getField(type); int i= field.getInt(new R.drawable()); Log.d(tag,i+""); return i; }catch(Exception e){ Log.e(tag,e.toString()); return R.drawable.unknow; }
http://blog.csdn.net/kmyhy/article/details/6583804
30、AIDL的使用
1、为了实现跨进程远程调用接口。
2、服务端创建一个Service 然后实现该接口,书写方法时,每个参数必须指定in或out来表明它是输入参数还是输出参数。
private ITestService.Stub binder = new Stub(){}
3、
@Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub mContext = this; return binder; //返回AIDL接口实例化对象 }
4、客户端绑定该Service
//创建远程调用对象 private ServiceConnection connection = new ServiceConnection(){ public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub //从远程service中获得AIDL实例化对象 tService = ITestService.Stub.asInterface(service); System.out.println("Bind Success:"+tService); } public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub tService = null; } };
5、客户端调用
public void onClick(View v) { // TODO Auto-generated method stub int viewId = v.getId(); try{ if (viewId == btn.getId()){ Intent service = new Intent(ITestService.class.getName()); //绑定AIDL bindService(service, connection, BIND_AUTO_CREATE); }else if (viewId == btn1.getId()){ text.setText("远程结果:"+tService.getAccountBalance()); }else if (viewId == btn2.getId()){ List<String> names = new ArrayList<String>(); names.add("李彬彬"); tService.setOwnerNames(names); }else if (viewId == btn3.getId()){ String[] customerList = new String[1]; tService.getCustomerList("向华", customerList); text.setText("远程结果:"+customerList[0]); }else if (viewId == btn4.getId()){ tService.showTest(); } }catch(RemoteException e){ e.printStackTrace(); } }
6、参考资料http://www.iteye.com/topic/655866
31、style和Theme
style 在/res/values 中定义<resource><style.../></resource>
可以继承parent,用于单个view的样式,类似HTML中CSS
Theme 与style一样定义,,但是theme作用于整个activity 。。。
用法context.setTheme(..) 或在配置文件中
style所有的属性都在android.R.attr中。
32、当前时间的获取
private String getDate(){ Date date = new Date(); Calendar c = Calendar.getInstance(); c.setTime(date); String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; int w = c.get(Calendar.DAY_OF_WEEK) - 1 ; if (w < 0) { w = 0; } String mDate = c.get(Calendar.YEAR)+"年" + c.get(Calendar.MONTH) + "月" + c.get(Calendar.DATE) + "日 " + weekDays[w]; return mDate; }
33、任意位置显示对话框
下面是设置对话框x的偏移量。
1 |
int marginLeft = 100 ;
|
2 |
Window window = getDialog().getWindow();
|
3 |
WindowManager.LayoutParams wmlp =window.getAttributes();
|
4 |
wmlp.gravity = Gravity.LEFT;
|
5 |
wmlp.x = marginLeft;
|
6 |
Log.i(getTag(), "wmlp=" +wmlp);
|
7 |
window.setAttributes(wmlp);
|
值得注意的是: 我们要看看WindowManager.LayoutParams的文档中关于x,y属性的说明:
01 |
/** |
02 |
* X position for this window. With the default gravity it is ignored.
|
03 |
* When using {@link Gravity#LEFT} or {@link Gravity#START} or {@link Gravity#RIGHT} or
|
04 |
* {@link Gravity#END} it provides an offset from the given edge.
|
05 |
*/
|
06 |
@ViewDebug .ExportedProperty
|
07 |
public int x;
|
08 |
|
09 |
/**
|
10 |
* Y position for this window. With the default gravity it is ignored.
|
11 |
* When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides
|
12 |
* an offset from the given edge.
|
13 |
*/
|
14 |
@ViewDebug .ExportedProperty
|
15 |
public int y;
|
重要的两点就是:
(1)如果你需要设置x的值,那么需要将gravity设置有LEFT,START,RIGHT或者END。
(2)如果你需要设置y的值,那么需要将gravity设置成有TOP,BOTTOM。
上面的两点,如果你的对FrameLayout设置的margin不起作用了,可能也是需要遵守上面两点规则。
转(http://my.oschina.net/banxi/blog/102995)
34.检测网络连接状态.
(1 ) 首先确保配置了相应权限.使用如下权限:
1 |
< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
|
(2)检测的网络连接状态的示例代码
01 |
private boolean checkNetwork() {
|
02 |
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
|
03 |
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
|
04 |
if (networkInfo == null || !networkInfo.isAvailable()) {
|
05 |
// showDialog
|
06 |
return false ;
|
07 |
08 |
} else if (networkInfo.getType() != ConnectivityManager.TYPE_WIFI) {
|
09 |
Toast.makeText( this , "当前网络连接使用手机流量!,建议使用Wifi!" , Toast.LENGTH_LONG);
|
10 |
}
|
11 |
12 |
return true ;
|
13 |
} |
35、软键盘的开关
http://blog.csdn.net/pilou5400/article/details/5954905
36、再按一次退出程序
@Override //如果是继承Activity可以用这种办法 public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub System.out.println("keyDown..........."); if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { finish(); return true; } return super.onKeyDown(keyCode, event); }
//如果是继承GroupActivity的话,比如TabActivity需要用这种方法实现,onKeyDown居然不会被回调、如果连续二次按返回键时间差小于二秒则退出。 long exitTime = 0; public boolean dispatchKeyEvent(KeyEvent event) { System.out.println(KeyEvent.KEYCODE_BACK+"--------------------"+event.getKeyCode()+" "+exitTime+"---------------------"+event.getAction()); if(event.getKeyCode()==KeyEvent.KEYCODE_BACK && event.getAction()==KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); exitTime=System.currentTimeMillis(); System.exit(0); } return true; } return super.dispatchKeyEvent(event); }
37、设置全屏。横屏
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
res/color/目录下
4、背景色根据状态更改颜色 android:backgroup
<item android:state_selected="true"><shape>
<gradient android:angle="0" android:centerColor="#00a59f" android:endColor="#00a59f" android:startColor="#00a59f" />
</shape></item>
<item android:state_focused="true"><shape>
<gradient android:angle="0" android:centerColor="#00a59f" android:endColor="#00a59f" android:startColor="#00a59f" />
</shape></item>
<item android:state_pressed="true"><shape>
<gradient android:angle="0" android:centerColor="#00a59f" android:endColor="#00a59f" android:startColor="#00a59f" />
</shape></item>
<item><shape>
<gradient android:angle="0" android:centerColor="#00ff00" android:endColor="00ff00" android:startColor="00ff00" />
</shape></item>
</selector>
如果直接给背景色color会报错。
5、启动APK的默认Activity
PackageManager pm = ctx.getPackageManager();
PackageInfo pi;
try {
pi = pm.getPackageInfo(packageName, 0);
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage(pi.packageName);
List<ResolveInfo> apps = pm.queryIntentActivities(intent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String className = ri.activityInfo.name;
intent.setComponent(new ComponentName(packageName, className));
ctx.startActivity(intent);
}
} catch (NameNotFoundException e) {
Log.e("startActivity", e);
}
}
7、计算字宽
TextPaint FontPaint = new TextPaint();
FontPaint.setTextSize(Size);
return FontPaint.measureText(text);
}
注意如果设置了textStyle,还需要进一步设置TextPaint。
38、绘制提醒数字
自定义一个MyView重写onDraw()方法,,注意在布局文件中配置自定义View。构造函数需要是有AttributeSet否则会抛出异常。
package com.flysnow.icon.notification; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.View; import android.widget.Button; /** * @author 作者 :FFish Zhang * @version 创建时间:2013-4-8 下午3:17:51 * 类说明 */ public class MyView extends Button{ int contacyCount=0; long start; Handler handler; public MyView(Context context,AttributeSet attr) { super(context,attr); handler=new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub invalidate(); } }; Thread thread=new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } contacyCount++; handler.sendEmptyMessage(0); } // TODO Auto-generated method stub } }); thread.start(); } public MyView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub Rect rect=getBackground().getBounds(); super.onDraw(canvas); Paint countPaint=new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG); countPaint.setColor(Color.RED); countPaint.setTextSize(20f); countPaint.setTypeface(Typeface.DEFAULT_BOLD); canvas.drawText(String.valueOf(contacyCount), rect.width()-18, 25, countPaint); } }
public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
意义从原图片上取一个src大小的矩形,绘制到画布上dst上这个位置。
BitmapDrawable bd=(BitmapDrawable) getResources().getDrawable(R.drawable.lufei); Rect src=new Rect(0,0,100,100); Rect dst=new Rect(50,50,300,300); canvas.drawBitmap(bd.getBitmap(), src, dst, countPaint);
下载文件到手机自身内存中,而不是SD卡中
Context.getFilesDir(), 内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。 Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象
扩展栏的应用
- // Set up our adapter
- mAdapter = new SimpleExpandableListAdapter(
- this,
- groupData, // 存储父list的数据
- android.R.layout.simple_expandable_list_item_2, //父list的现实方式
- new String[] { NAME,IS_EVEN}, // 父list需要显示的数据
- new int[] { android.R.id.text1,android.R.id.text2}, // 父list的数据绑定到的view
- childData, //子list的数据
- android.R.layout.simple_expandable_list_item_2, //子list的显示
- new String[] { NAME, IS_EVEN },
- new int[] { android.R.id.text1, android.R.id.text2 }
- );
- setListAdapter(mAdapter);
- }
或参考代码
http://zhangfy068.iteye.com/admin/blogs/1858767
强制退出APP进程
Log.e("kill", "kill-Process");
方法一:
android.os.Process.killProcess(android.os.Process.myPid());
方法二:
System.exit(0);
applyDimension的作用是:根据当前的分辨率把pix 转化为 dip
int padding = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 40, getActivity()
.getResources().getDisplayMetrics());
text.setPadding(padding, padding, padding, padding);
@表示引用资源
@android:string表明引用的系统的(android.*)资源
@string表示引用应用内部资源
对于id, 可以用@+id表明创建一个id
?表示引用属性
“?”引用主题属性,当您使用这个标记,你所提供的资源名必须能够在主题属性中找到,因为资源工具认为这个资源属性是被期望得到的,您不需要明确的支出他的类型(?android:attr/android:textDisabledColor
相关推荐
Android学习笔记(持续更新中)_李富强.doc
Android学习笔记全全整理,是针对想要深入理解并掌握Android开发技术的学习者们的一份宝贵资源。这份笔记涵盖了从基础到高级的多个方面,旨在帮助读者建立起完整的Android知识体系。以下将详细介绍其中可能包含的...
这篇学习笔记将引导新手入门,通过创建第一个简单的案例来了解Android Studio的基本操作。 首先,让我们了解一下Android Studio的核心功能。它基于IntelliJ IDEA,具备代码自动补全、重构、调试等强大的开发特性。...
这篇Android学习笔记主要涵盖了从第五章到第十三章的内容,是Android开发者或对Android系统感兴趣的初学者的重要参考资料。笔记详细解读了Android应用开发的核心概念和技术,旨在帮助读者深入理解并掌握Android开发...
在Android开发过程中,持续学习和实践是提升技能的关键,"Android学习笔记1"这样的资源可以帮助开发者巩固理论知识,并通过实际代码加深理解。在遇到问题时,查阅官方文档、社区论坛(如Stack Overflow)和开发者...
### Android学习笔记知识点详解 #### 一、简介与背景 Android作为全球最受欢迎的移动操作系统之一,自2007年谷歌发布以来,迅速占领市场并持续引领移动技术的发展。随着移动互联网的兴起和发展,Android应用开发...
《Android学习笔记》 在移动应用开发领域,Android系统占据着重要的地位,是开发者们热衷探索的技术平台。这份“Android学习笔记”旨在为初学者和有经验的开发者提供一个全面的学习指南,深入理解Android系统的架构...
Service可以通过startService()或bindService()方法启动,前者启动后立即返回,服务会在后台持续运行,而后者创建服务并与其建立连接,可以进行双向通信。 4. **ContentProvider**:ContentProvider是Android中统一...
这份“android学习笔记”包含了作者在Android开发中的实践经验和解决问题的方法,旨在促进共同学习和交流。 笔记可能涵盖以下几个关键知识点: 1. **Android基础知识**:Android系统架构、四大组件(Activity、...
笔记包含了大量的实例代码、技术解析和实战经验,对于想要深入学习Android开发的程序员来说,是一份宝贵的资源。 一、Android系统架构 Android系统由五大部分组成:Linux内核、硬件抽象层(HAL)、库、应用程序框架...
【Android 学习笔记】 Android 是一款开源的操作系统,主要用于移动设备,如智能手机和平板电脑。它是Google主导的开放手机联盟开发的,以其开放性和可定制性吸引了大量的开发者和用户。学习Android开发对于想要...
这篇【Android学习笔记(四):不使用IDE采用命令行】介绍了如何在命令行环境下建立项目、编写代码、编译和安装应用程序。 1. **建立项目** 使用Android SDK中的`tools`目录下的`android`命令来创建一个新的...
【标题】:“Android学习笔记(三、便签demo改进)” 在Android开发的学习过程中,创建一个简单的便签应用是常见的实践项目。这个笔记主要聚焦于如何改进一个基础的便签应用,提升用户体验和功能完整性。在本文中,...
Android 学习笔记系列旨在帮助开发者入门Android开发,本文主要探讨了如何创建并运行第一个“Hello, World”程序,以及如何通过添加按钮和文本输入框实现更复杂的交互功能。 首先,Android开发通常从创建一个基本的...
《黑马Android基础笔记》是一份全面且深入的Android开发学习资料,主要针对初学者和希望巩固基础知识的开发者。这份笔记涵盖了Android开发的核心概念和技术,旨在帮助读者构建坚实的Android开发基础。 1. **Android...