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
滑动菜单 下拉刷新 ExpandableListView适配器配置及使用
(持续更新中。。。) Note Chapter Description Java学习笔记,主要包含JDK6 、 JDK7 、 JDK8 、 JDK9 、 JDK10的学习知识点。 Kotlin学习笔记,主要包含Kotlin的所有知识。 Python学习笔记。 Android开发笔记。 ...
Android学习笔记 这些都是我在Android进阶学习和实践过程中,自己整理的笔记,没有太多讲解的内容。 主要涉及Java和Android两大块内容,都是一些偏向于实现和原理性的知识,很少有入门级的代码。 内容使用Typora编辑...
由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)...
本文实例为大家分享了Android补间动画展示的具体代码,供大家参考,具体内容如下 首先看看补间动画的共同属性: Duration:动画持续的时间(单位:毫秒) fillAfter:设置为true,动画转化在动画被结束后被应用 ...
本公司经过近几年的持续的技术积累,产品线有了较大拓展,除了原有的PDF在线阅读有了较大优化和更新(目前已经能够支持Google Chrome、Mozilla Firefox、苹果Safari、Opera等几乎所有主流的浏览器)以外,还推出了...
博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……...
Android学习笔记,对于自定义View等介绍比较全面 :Android开发技术前线,一个定期翻译、发布国内外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目,让我们的技术跟上国际步伐,虽然已停止维护,但里面...
,包括Java基础及深入知识点,Android技术博客,Python,Go学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!...
进行在工作之余能有能量持续更新。期待这个Repo能对正在学习Android开发的你有所帮助。当然由于目前水平有限,如果您发现了错漏,理解错误等还烦请指正,多谢。参考内容-这个Repo中的示例代码及笔记内容参考了以下...
By the way,微信公众号石杉的架构笔记(id:shishan100)有其它很多架构知识,墙裂推荐~ 一点小建议:学习本系列知识之前,如果你完全没接触过 MQ、ES、Redis、Dubbo、Hystrix 等,那么我建议你可以先在网上搜一下每...
gank.io-unofficial-android-client []() []() []() []() []() []() A Material Design style Gank. Io unofficial client App 一款Material Design风格的Gank.Io非官方客户端应用 功能介绍 每日干货查看,一键分享...
博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……...
:fire:Android 复习资料汇总:fire:(每周持续更新中~) 要想成为一名优秀的Android开发,一份知识体系是必不可少的~ 感谢大家的关注与支持,最近工作上比较忙,很难抽出时间来更新~ 第三方框架的内容总算是在11月底...
整理一份自己学习android的合集(现在整理下以前的笔记,写作一个demo作为总结,也是查漏补缺,同时可以比较下以前与现在自己的能力提升了多少!) 从2018/1/23开始 新建项目,计划——开始整理; 2018/1/26, 常用...
并且可以根据反馈持续更新。在这里,变量,函数,结构体,指针,并行计算,包和测试都有详细的讲解,另外独特的关键点标记也代表了本应用的用心之处,希望您喜欢,也希望您支持本应用。Go轻松学是我推出的一款学习...
笔记(持续更新中…)Android基础Java基础Android进阶Android原始分析系列Android架构网络编程 数据结构与算法读书笔记学习资料
会持续更新,但可能不快,同时要做其他事情。 1. HelloWorld 纯粹就是Helloworld。 2. ActivityTest 对于Activity的基本组件的一些测试。 3. ActivityLifeCycleTest 应该与作者的原始码均衡不大。 4. ...
目前,OpenCV由非盈利组织OpenCV.org维护,并得到了全球开发者、研究机构以及企业的持续贡献和支持。 主要特点 跨平台:OpenCV支持多种操作系统,包括但不限于Windows、Linux、macOS、Android和iOS,确保代码能够...