ExpandableListView是ListView的子类,他在ListView上进行了扩展,它把列表项分成了几组,每组里包含了多个列表项

ExpandableListView的列表项是由ExpandableListAdapter提供的,实现ExpandableListAdapter三种常用方式,常用的ExpandableListAdapter子类如下:

1,扩展BaseExpandableListAdapter实现ExpandableListAdapter

2,使用SimpleExpandableListAdapter将 两个List集合包装成ExpandableListAdapter

3,使用SimpleCursorTreeAdapter将Cursor中的数据包装成SimpleCursorTreeAdapter

ExpandableListAdapter及其子类的继承关系类图看这篇文章讲的比较好,看懂了:http://hubingforever.blog.163.com/blog/static/1710405792010538823477/

ExpandableListView的xml属性:

android:childDivider 指定个组内各子列表项之间的分隔条
     android:childIndicator 显示子列表项旁边的Drawble对象
     android:groupIndicator 显示组列表项旁边的Drawble对象

ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组可以单独展开。

重要方法:

<span style="font-size:24px;">expandGroup (int groupPos) ;//在分组列表视图中 展开一组,
setSelectedGroup (int groupPosition) ;//设置选择指定的组。
setSelectedChild (int groupPosition, int childPosition, boolean shouldExpandGroup);//设置选择指定的子项。
getPackedPositionGroup (long packedPosition);//返回所选择的组
getPackedPositionForChild (int groupPosition, int childPosition) ;//返回所选择的子项
getPackedPositionType (long packedPosition);//返回所选择项的类型(Child,Group)
isGroupExpanded (int groupPosition);//判断此组是否展开</span>
<span style="font-size:24px;">expandableListView.setDivider();这个是设定每个Group之间的分割线。
expandableListView.setGroupIndicator();这个是设定每个Group之前的那个图标。
expandableListView.collapseGroup(int group); 将第group组收起</span>

一,使用扩展BaseExpandableListAdapter来提供数据源

扩展BaseExpandableListAdapter需要重写11个方法:

* getGroupCount(),返回包含组列表的数量
             * getChildrenCount(int groupPosition),返回包含组列表的数量
             * 
             * getGroup(int groupPosition),返回组列表的对象
             * getChild(int groupPosition, int childPosition),返回组列表下的子列表对象
             * 
             * getGroupId(int groupPosition),返回组列表Id
             * getChildId(int groupPosition, int childPosition),返回祖列表的子列表的Id
             * 下面两个属性很重要!
             * getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent),该方法决定每个组选项的外观、
             * getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent),该方法决定每个子选项的外观、

*isChildSelectable(int groupPosition,
int childPosition):如果child添加监听事件,则要返回true

Main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!--ExpandableListView组件android:childDivider 指定个组内各子列表项之间的分隔条android:childIndicator 显示子列表项旁边的Drawble对象android:groupIndicator 显示组列表项旁边的Drawble对象--><ExpandableListViewandroid:id="@+id/expandableListView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:childDivider="#f0f"></ExpandableListView></LinearLayout>

MainActivity.java

package com.hust.expandablelistview;import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BaseExpandableListAdapter bela=new BaseExpandableListAdapter(){                 /*自动实现这10个方法* getGroupCount(),返回包含组列表的数量* getChildrenCount(int groupPosition),返回包含组列表的数量* * getGroup(int groupPosition),返回组列表的对象* getChild(int groupPosition, int childPosition),返回组列表下的子列表对象* * getGroupId(int groupPosition),返回组列表Id* getChildId(int groupPosition, int childPosition),返回祖列表的子列表的Id* * getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent),该方法决定每个组选项的外观、* getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent),该方法决定每个子选项的外观、* * * */int[] logos=new int[]{R.drawable.p,R.drawable.z,R.drawable.t};//组列表的数量private String[] armTypes=new String[]{"我的好友","高中同学","大学同学"};//组列表下的子列表项,可扩展的ExpandableListView是个二维数组private String[][] arms=new String[][]{{"狂战士","龙骑士","黑暗圣堂","电兵"},{"张娜","李四","赵龙","钱爽"},{"王燕","刘涛","张坦克","汪明城"}};//返回包含组列表的数量@Overridepublic int getGroupCount() {// TODO Auto-generated method stubreturn armTypes.length;}//返回组位置下的子列表项的数量@Overridepublic int getChildrenCount(int groupPosition) {// TODO Auto-generated method stubreturn arms[groupPosition].length;}//返回组列表的对象@Overridepublic Object getGroup(int groupPosition) {// TODO Auto-generated method stubreturn armTypes[groupPosition];}//返回组列表下的子列表对象@Overridepublic Object getChild(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn arms[groupPosition][childPosition];}//返回组列表Id@Overridepublic long getGroupId(int groupPosition) {// TODO Auto-generated method stubreturn groupPosition;}//返回祖列表的子列表的Id@Overridepublic long getChildId(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn childPosition;}@Overridepublic boolean hasStableIds() {// TODO Auto-generated method stubreturn true;}//该方法决定每个组选项的外观、这里这定义组列表布局,也可以用xml文件@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {// TODO Auto-generated method stubLinearLayout ll=new LinearLayout(MainActivity.this);ll.setOrientation(0);ImageView logo=new ImageView(MainActivity.this);logo.setImageResource(logos[groupPosition]);TextView textview=getTextView();textview.setText(getGroup(groupPosition).toString());ll.addView(logo);ll.addView(textview);return ll;             }//设置TextView的参数private TextView getTextView() {// TODO Auto-generated method stubAbsListView.LayoutParams lp=new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);TextView textview=new TextView(MainActivity.this);textview.setLayoutParams(lp);//设置布局参数,android:layout_Width="match_parent",android:layout_Height="64"textview.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);//android:gravity="CENTER_VERTICAL|LEFT"textview.setPadding(36, 0, 0, 0);textview.setTextSize(16);    //android:textsize="20dp"            return textview;}//该方法决定每个子选项的外观@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {// TODO Auto-generated method stubTextView text=getTextView();text.setText(getChild(groupPosition,childPosition).toString());                return text;}@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition) {// TODO Auto-generated method stubreturn true;}};ExpandableListView expandablelistview=(ExpandableListView) findViewById(R.id.expandableListView1);//设置adapterexpandablelistview.setAdapter(bela);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

二,使用SimpleExpandableListAdapter显示ExpandableListView

SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(   this, gruops, R.drawable.expandablelistview_groups, new String[]{"group"}, new int[]{R.id.textGroup},    childs, R.drawable.expandablelistview_child, new String[]{"child"}, new int[]{R.id.textChild}   ); 

* 参数1.上下文对象Context
* 参数2.一级条目目录集合
* 参数3.一级条目对应的布局文件 (expandablelistview_groups.xml文件
* 参数4.fromto,就是map中的key,指定要显示的对象
* 参数5.与参数4对应,指定要显示在groups中的id
* 参数6.二级条目目录集合
* 参数7.二级条目对应的布局文件
* 参数9.与参数8对应,指定要显示在childs中的id

1,定义一个主界面expandablelistview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><ExpandableListView android:id ="@+id/expandableListView"  android:layout_width ="fill_parent"  android:layout_height ="wrap_content"  ></ExpandableListView>
</LinearLayout>

2.在res/drawable目录下创建样式文件expandablelistview_groups.xml该界面是组界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/textGroup"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:paddingLeft="40px"  android:paddingTop="6px"  android:paddingBottom="6px"  android:textSize="15sp"  android:text="No data"  >   </TextView>
</LinearLayout>

3.在res/drawable目录下创建样式文件expandablelistview_child.xml;是子控件,直接显示列表内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextView    android:id="@+id/textChild"  android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:paddingLeft="60px"  android:paddingTop="10px"  android:paddingBottom="10px"  android:textSize="20sp"  android:text="No Data" />
</LinearLayout>

ExpandableListViewDemo_two.java

public class ExpandableListViewDemo_two extends Activity {/** Called when the activity is first created. */  private  ExpandableListView  expandableListView_one;@Override  public void onCreate(Bundle savedInstanceState)   {   super.onCreate(savedInstanceState);   setContentView(R.layout.expandablelistview);   expandableListView_one =(ExpandableListView)findViewById(R.id.expandableListView);   //创建二个一级条目标题    Map<String, String> title_1 = new HashMap<String, String>();   Map<String, String> title_2 = new HashMap<String, String>();   title_1.put("group", "移动开发");   title_2.put("group", "Web开发");   //创建一级条目容器    List<Map<String, String>> gruops = new ArrayList<Map<String,String>>();   gruops.add(title_1);   gruops.add(title_2);   //创建二级条目内容    //内容一    Map<String, String> content_1 = new HashMap<String, String>();   Map<String, String> content_2 = new HashMap<String, String>();   content_1.put("child", "ANDROID");   content_2.put("child", "IOS");   List<Map<String, String>> childs_1 = new ArrayList<Map<String,String>>();   childs_1.add(content_1);   childs_1.add(content_2);   //内容二    Map<String, String> content_3 = new HashMap<String, String>();   Map<String, String> content_4 = new HashMap<String, String>();  Map<String, String> content_5 = new HashMap<String, String>(); content_3.put("child", "jsp");   content_4.put("child", "servlet");   content_5.put("child", "page"); List<Map<String, String>> childs_2 = new ArrayList<Map<String,String>>();   childs_2.add(content_3);   childs_2.add(content_4);  childs_2.add(content_5); //存放两个内容, 以便显示在列表中    List<List<Map<String, String>>> childs = new ArrayList<List<Map<String,String>>>();   childs.add(childs_1);   childs.add(childs_2);   //创建ExpandableList的Adapter容器
/**
* 使用SimpleExpandableListAdapter显示ExpandableListView
* 参数1.上下文对象Context
* 参数2.一级条目目录集合
* 参数3.一级条目对应的布局文件 (expandablelistview_groups.xml文件
* 参数4.fromto,就是map中的key,指定要显示的对象
* 参数5.与参数4对应,指定要显示在groups中的id
* 参数6.二级条目目录集合
* 参数7.二级条目对应的布局文件
* 参数9.与参数8对应,指定要显示在childs中的id
/           SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(   this, gruops, R.drawable.expandablelistview_groups, new String[]{"group"}, new int[]{R.id.textGroup},    childs, R.drawable.expandablelistview_child, new String[]{"child"}, new int[]{R.id.textChild}   );   //加入列表    expandableListView_one.setAdapter(adapter); expandableListView_one.setOnChildClickListener(listener);}   private OnChildClickListener  listener =new OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {// TODO Auto-generated method stubtoast("点击了");return false;}};private void toast(String str) {Toast.makeText(this, str, Toast.LENGTH_LONG).show(); }
}

上面的样式也可以使用系统的自带的样式如下:
android.R.layout.simple_expandable_list_item_1,//层显示样式 ,系统自定义
android.R.layout.simple_expandable_list_item_2,

ExpandableListActivity直接继承了Activity。

1,继承ExpandableListActivity

2,定义好内容ExpandableListAdapter,扩展BaseExpandableListAdapter和SimpleExpandableListAdapter都可以

3,setListAdapter的方法添加adapter

package com.example.expandablelistactivity;import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;public class MainActivity extends ExpandableListActivity//继承ExpandableListActivity
{public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);//无需布局文件//自定义扩展BaseExpandableListAdapterExpandableListAdapter adapter = new BaseExpandableListAdapter(){int[] logos = new int[]{R.drawable.p,R.drawable.z,R.drawable.t};//组列表的数量private String[] armTypes=new String[]{"我的好友","高中同学","大学同学"};//组列表下的子列表项,可扩展的ExpandableListView是个二维数组private String[][] arms=new String[][]{{"狂战士","龙骑士","黑暗圣堂","电兵"},{"张娜","李四","赵龙","钱爽"},{"王燕","刘涛","张坦克","汪明城"}};//获取指定组位置、指定子列表项处的子列表项数据@Overridepublic Object getChild(int groupPosition, int childPosition){return arms[groupPosition][childPosition];}@Overridepublic long getChildId(int groupPosition, int childPosition){return childPosition;}@Overridepublic int getChildrenCount(int groupPosition){return arms[groupPosition].length;}private TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 64);TextView textView = new TextView(MainActivity.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(36, 0, 0, 0);textView.setTextSize(16);return textView;}//该方法决定每个子选项的外观@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent){TextView textView = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}//获取指定组位置处的组数据@Overridepublic Object getGroup(int groupPosition){return armTypes[groupPosition];}@Overridepublic int getGroupCount(){return armTypes.length;}@Overridepublic long getGroupId(int groupPosition){return groupPosition;}//该方法决定每个组选项的外观@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent){LinearLayout ll = new LinearLayout(MainActivity.this);ll.setOrientation(0);ImageView logo = new ImageView(MainActivity.this);logo.setImageResource(logos[groupPosition]);ll.addView(logo);TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());ll.addView(textView);return ll;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition){return true;}@Overridepublic boolean hasStableIds(){return true;}};// 设置该窗口显示列表setListAdapter(adapter);}
}

附上源码更方便学习:

public class ExpandableListActivity extends Activity implementsOnCreateContextMenuListener,ExpandableListView.OnChildClickListener, ExpandableListView.OnGroupCollapseListener,ExpandableListView.OnGroupExpandListener {   ExpandableListAdapter mAdapter;ExpandableListView mList;boolean mFinishedStart = false;/*** Override this to populate the context menu when an item is long pressed. menuInfo* will contain an {@link android.widget.ExpandableListView.ExpandableListContextMenuInfo}* whose packedPosition is a packed position* that should be used with {@link ExpandableListView#getPackedPositionType(long)} and* the other similar methods.* <p>* {@inheritDoc}*/@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {}/*** Override this for receiving callbacks when a child has been clicked.* <p>* {@inheritDoc}*/public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,int childPosition, long id) {return false;}/*** Override this for receiving callbacks when a group has been collapsed.*/public void onGroupCollapse(int groupPosition) {}/*** Override this for receiving callbacks when a group has been expanded.*/public void onGroupExpand(int groupPosition) {}/*** Ensures the expandable list view has been created before Activity restores all* of the view states.* *@see Activity#onRestoreInstanceState(Bundle)*/@Overrideprotected void onRestoreInstanceState(Bundle state) {ensureList();super.onRestoreInstanceState(state);}/*** Updates the screen state (current list and other views) when the* content changes.* * @see Activity#onContentChanged()*/@Overridepublic void onContentChanged() {super.onContentChanged();View emptyView = findViewById(com.android.internal.R.id.empty);mList = (ExpandableListView)findViewById(com.android.internal.R.id.list);if (mList == null) {throw new RuntimeException("Your content must have a ExpandableListView whose id attribute is " +"'android.R.id.list'");}if (emptyView != null) {mList.setEmptyView(emptyView);}mList.setOnChildClickListener(this);mList.setOnGroupExpandListener(this);mList.setOnGroupCollapseListener(this);if (mFinishedStart) {setListAdapter(mAdapter);}mFinishedStart = true;}/*** Provide the adapter for the expandable list.*/public void setListAdapter(ExpandableListAdapter adapter) {synchronized (this) {ensureList();mAdapter = adapter;mList.setAdapter(adapter);}}/*** Get the activity's expandable list view widget.  This can be used to get the selection,* set the selection, and many other useful functions.* * @see ExpandableListView*/public ExpandableListView getExpandableListView() {ensureList();return mList;}/*** Get the ExpandableListAdapter associated with this activity's* ExpandableListView.*/public ExpandableListAdapter getExpandableListAdapter() {return mAdapter;}private void ensureList() {if (mList != null) {return;}setContentView(com.android.internal.R.layout.expandable_list_content);}/*** Gets the ID of the currently selected group or child.* * @return The ID of the currently selected group or child.*/public long getSelectedId() {return mList.getSelectedId();}/*** Gets the position (in packed position representation) of the currently* selected group or child. Use* {@link ExpandableListView#getPackedPositionType},* {@link ExpandableListView#getPackedPositionGroup}, and* {@link ExpandableListView#getPackedPositionChild} to unpack the returned* packed position.* * @return A packed position representation containing the currently*         selected group or child's position and type.*/public long getSelectedPosition() {return mList.getSelectedPosition();}/*** Sets the selection to the specified child. If the child is in a collapsed* group, the group will only be expanded and child subsequently selected if* shouldExpandGroup is set to true, otherwise the method will return false.* * @param groupPosition The position of the group that contains the child.* @param childPosition The position of the child within the group.* @param shouldExpandGroup Whether the child's group should be expanded if*            it is collapsed.* @return Whether the selection was successfully set on the child.*/public boolean setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) {return mList.setSelectedChild(groupPosition, childPosition, shouldExpandGroup);}/*** Sets the selection to the specified group.* @param groupPosition The position of the group that should be selected.*/public void setSelectedGroup(int groupPosition) {mList.setSelectedGroup(groupPosition);}}

UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用相关推荐

  1. UI组件之AdapterView及其子类关系,Adapter接口及其实现类关系

    AdapterView本身是一个抽象基类,它派生的的子类在用法上十分相似.AdapterView直接派生的三个子类:AbsListView,AbsSpinner,AdapterViewAnimator ...

  2. UI组件之AdapterView及其子类(四)Gallery画廊控件使用

    听说 Gallery现在已经不使用了,API使用ViewPaper代替了,以后再学专研ViewPaper吧现在说说Gallery画廊,就是不停显示图片的意思 Gallery是用来水平滚动的显示一系列项 ...

  3. UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView

    AdapterView的内容一般是包含多项相同格式资源的列表,常用的有5种AdapterView的子类: (1)ListView:简单的列表 (2)Spinner:下拉列表,给用户提供选择 (3)Ga ...

  4. UI组件之AdapterView及其子类(五)ListView组件和ListActivity

    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项h ...

  5. UI组件之AdapterView及其子类(三)Spinner控件详解

    Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单或者一个dialog对话框,从该 ...

  6. UI组件之AdapterView及其子类(二)GridView网格视图的使用

    GridView网格视图属性: android:numColumns="auto_fit" --------列数设置为自动,可以为确定的数值 android:columnWidth ...

  7. 2.5 UI组件-AdapterView及子类(疯狂android学习笔记)

    列表视图(ListView)和ListActivity ①直接使用ListView创建 ②让Activity继承ListActivity(相当于该activity显示的组件为ListView) 提示: ...

  8. android adapter 组件,Android UI - AdapterView 及其子类

    AdapterView AdapterView 是一个抽象类,其派生的子类在用法上十分相似: AdapterView 继承了 ViewGroup: AdapterView 及其子类的继承关系如下: A ...

  9. android-UI组件(四):AdapterView及其子类

    http://blog.csdn.net/litianpenghaha/article/details/23270881 AdapterView组件是一组重要的组件,AdapterView本身是一个抽 ...

最新文章

  1. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
  2. 3d查看器无法加载三维模型_珠峰登顶成功,送套三维模型给你
  3. CSS position绝对定位absolute relative
  4. PHP使用for循环打出星号表格,console - JavaScript中,使用for循环输出如下图形(等腰三角形,和平行四边形)?原理是啥?...
  5. 【剑指offer】面试题35:复杂链表的复制(Java)
  6. linux c 编程手册,Linux C/C++编程手册查阅方法
  7. 京东取消快递员底薪引热议 官方回应:试点更有激励性的业务提成
  8. CDOJ 485 UESTC 485 Game (八数码变形,映射,逆cantor展开)
  9. 清空SQL数据库日志
  10. utf-8 编码 转换 汉字 字符集
  11. Smobiler错误记录
  12. 清除SQL Sever 2008数据库日志
  13. 纹理(讲得比较详细的文章)
  14. Miracle2.1 列表页面显示附件链接
  15. vueh5调用摄像头拍照_HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
  16. Nginx通过OpenSSL创建自签名证书配置HTTPS及二级目录
  17. 服务器向阿里云转移之容器化1.0.1容器建立
  18. Proxmox kvm关机失败
  19. HDOJ 2112 HDU Today (最短路 Dijkstra SPFA)
  20. 杭电ACM2188题

热门文章

  1. STM32初识——中断初始化过程(by woody)
  2. 功率电感器基础讲座-第1章-2_转载自村田官网
  3. Python:docx模块
  4. 波卡链Substrate (6)Babe协议二“分配slot机制”
  5. go语言中利用匿名函数和闭包实现文件名修改
  6. optee对std smc的处理的详解
  7. linux运维防火墙考题,Linux运维工程师:30道面试题整理 | 张戈博客
  8. matlab中大figure怎样修改,操作Matlab的Figure窗口(一)
  9. ida demangled names
  10. (37)0环与3环通信常规方式,PspTerminateProcess 关闭进程工具