目录

  • Android总结
    • Android四大组件
    • Activity生命周期
    • 添加网络权限
    • Intent Bundle--回转值跳转
      • 显性意图
      • 隐性意图
        • AndroidManifest.xml修改
        • 然后
      • 带Bundle跳转
        • 跳转
        • 接收
      • 带Bundle传值并回传
        • 跳转
    • 过渡动画
    • View移动动画
    • 得到ip
    • 判断网络连接
      • 判断方法
      • 判断并弹到设置
    • 中英文切换
    • 资源管理
      • Anim/ 创建
    • HashMap排序
      • 集合排序
      • 遍历
    • HTTP类 与 获取数据方法--网络框架
      • 在项目清单文件中添加
      • HTTP类
      • 获取数据方法
    • JSONArray 转数值的方法
    • GreenDao Application类 和 数据库管理类--数据库框架(保险起见 原始数据库需要看一下)
      • 添加依赖
        • Project build.gradle:
        • app build.gradle:
      • 实体类
        • 建entity包放实体类
        • Ctrl+F9后
        • 并多出三个类
        • 项目结构
    • 编写MyApplication类
      • 在项目清单文件中添加
      • 编写GreenDaoManager数据库管理类
    • AlertDialog AlertDialog.Builder--弹出框
      • 默认弹出框
      • 单选弹出框
        • 1
        • 2
      • 多选弹出框
    • ViewPage 的监听 Fragment--碎片以及小圆点
      • 布局XMl
      • Fragment适配器
      • 加入Fragment
      • 滑动viewpage小圆点变化
      • 点击小圆点Fragment viewpage发生变化
    • TableLayout--表格布局与传数据进表格
      • Xml
      • 传数据进表
    • Handler Runnable--线程与更新UI
      • 主体代码
      • 开启线程
      • 关闭线程
    • SimpleDateFormat--获得本地时间 年月日时分秒星期的格式
      • 主体代码
    • SharedPreferences.Editor--写入本地
    • getSharedPreferences()--获取本地缓存
    • VideoView MediaController --视频组件与进度条组件的搭配
    • 获取网页代码路径 与视频文件路径
      • 网页代码路径
      • 视频文件路径
    • LayoutParams --设置View的大小
    • Spinner --下拉框的适配和监听
      • 适配
      • 监听
    • Switch --开关的适配和监听
      • xml文件
      • 监听
    • ExtendableListView --列表视图的适配
      • Xml
        • 父视图group_item
        • 子视图 child_item
      • 适配器
      • 适配
      • 监听
    • Timer-TimerTask定时器
    • Handler定时器
    • NotificationManager Notification--通知栏的使用
    • shape --简单的图形框绘画
    • CalendarView --日历控件 监听
      • Xml
      • 监听
    • include ViewStub --包含视图和延时包含视图的使用
      • include
      • ViewStub
        • Xml
        • 延时加载
    • 组件显示与隐藏
      • 显示
      • 隐藏
    • 导入包的方法
    • Fragment中使用getFragmentManager()嵌入布局 在activity中
    • SimpleAdapter ArrayAdapter 的使用
      • ArrayAdapter
      • SimpleAdapter
    • ProgressBar的使用
      • Xml
      • Style
      • 属性
    • 退出程序
  • 还有一部分没有整理
    • MPAndroidChart--画图
    • EChart--画图
    • Animation--出入场动画的使用
    • 等等
    • 配张图自己感受

Android总结

为本人学习时小小的总结  比较建议初学者观看

Android四大组件

Android开发四大组件分别是:活动(Activity):用于表现功能。服务(Service):后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(ContentProvider):支持在多个应用中存储和读取数据,相当于数据库。

Activity生命周期

onCreate : 该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。 onStart : 此方法被回调时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交互。可以简单理解为Activity已显示而我们无法看见摆了。 onResume : 当此方法回调时,则说明Activity已在前台可见,可与用户交互了(处于前面所说的Active/Running形态),onResume方法与onStart的相同点是两者都表示Activity可见,只不过onStart回调时Activity还是后台无法与用户交互,而onResume则已显示在前台,可与用户交互。当然从流程图,我们也可以看出当Activity停止后(onPause方法和onStop方法被调用),重新回到前台时也会调用onResume方法,因此我们也可以在onResume方法中初始化一些资源,比如重新初始化在onPause或者onStop方法中释放的资源。 onPause : 此方法被回调时则表示Activity正在停止(Paused形态),一般情况下onStop方法会紧接着被回调。但通过流程图我们还可以看到一种情况是onPause方法执行后直接执行了onResume方法,这属于比较极端的现象了,这可能是用户操作使当前Activity退居后台后又迅速地再回到到当前的Activity,此时onResume方法就会被回调。当然,在onPause方法中我们可以做一些数据存储或者动画停止或者资源回收的操作,但是不能太耗时,因为这可能会影响到新的Activity的显示——onPause方法执行完成后,新Activity的onResume方法才会被执行。 onStop : 一般在onPause方法执行完成直接执行,表示Activity即将停止或者完全被覆盖(Stopped形态),此时Activity不可见,仅在后台运行。同样地,在onStop方法可以做一些资源释放的操作(不能太耗时)。 onRestart :表示Activity正在重新启动,当Activity由不可见变为可见状态时,该方法被回调。这种情况一般是用户打开了一个新的Activity时,当前的Activity就会被暂停(onPause和onStop被执行了),接着又回到当前Activity页面时,onRestart方法就会被回调。 onDestroy :此时Activity正在被销毁,也是生命周期最后一个执行的方法,一般我们可以在此方法中做一些回收工作和最终的资源释放onCreate():当我们点击activity的时候,系统会调用activity的oncreate()方法,在这个方法中我们会初始化当前布局setContentLayout()方法。onStart():onCreate()方法完成后,此时activity进入onStart()方法,当前activity是用户可见状态,但没有焦点,与用户不能交互,一般可在当前方法做一些动画的初始化操作。onResume():onStart()方法完成之后,此时activity进入onResume()方法中,当前activity状态属于运行状态 (Running),可与用户进行交互。onPouse()当另外一个activity覆盖当前的acitivty时,此时当前activity会进入到onPouse()方法中,当前activity是可见的,但不能与用户交互状态。onStop()onPouse()方法完成之后,此时activity进入onStop()方法,此时activity对用户是不可见的,在系统内存紧张的情况下,有可能会被系统进行回收。所以一般在当前方法可做资源回收。onDestory()onStop()方法完成之后,此时activity进入到onDestory()方法中,结束当前activity。onRestart()onRestart()方法在用户按下home()之后,再次进入到当前activity的时候调用。调用顺序onPouse()->onStop()->onRestart()->onStart()->onResume().

添加网络权限

Intent Bundle–回转值跳转

显性意图

Intent intent1 = new Intent(this, LoginActivity.class);intent1.putExtra("one", "one");intent1.putExtra("two", "two");startActivity(intent1);

隐性意图

AndroidManifest.xml修改

        

然后

Intent intent = new Intent();intent.setAction("com.example.Login");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.putExtra("zh", "张三");intent.putExtra("pass", "123456");startActivity(intent);

带Bundle跳转

跳转

Intent intent = new Intent(this, LoginActivity.class);Bundle bundle = new Bundle();bundle.putString("a", "aaa");intent.putExtras(bundle);startActivity(intent);

接收

Bundle bundle1 = getIntent().getExtras();bundle1.getString("a");

带Bundle传值并回传

跳转

Intent intent = new Intent(this, LoginActivity.class);Bundle bundle = new Bundle();bundle.putString("a", "aaa");intent.putExtras(bundle);startActivityForResult(intent,1);关闭跳转页面执行@Overridepublic void startActivityForResult(Intent intent, int requestCode) {    super.startActivityForResult(intent, requestCode);    if (requestCode==1){        //执行事件    }}

过渡动画

View移动动画

TranslateAnimation animation = new TranslateAnimation(        //View为原点        Animation.ABSOLUTE, 0f,//开始点的X坐标        Animation.ABSOLUTE, -400f,//移动到的X坐标        Animation.ABSOLUTE, 0f, //开始点的Y坐标        Animation.ABSOLUTE, 100f//移动到的Y坐标);animation.setDuration(2000);//动画的时间animation.setFillAfter(true);//true为不回到原点 false反之cy_img01.startAnimation(animation);

得到ip

private String getIp() {        WifiManager wm = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);        if (!wm.isWifiEnabled())            wm.setWifiEnabled(true);        WifiInfo wi = wm.getConnectionInfo();        int ipAdd = wi.getIpAddress();        String ip = intToIp(ipAdd);        return ip;    }    private String intToIp(int i) {        return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + (i >> 24 & 0xFF);    }

判断网络连接

判断方法

public boolean isNetworkConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }

判断并弹到设置

if (isNetworkConnected(this))    {        AlertDialog.Builder builder = new AlertDialog.Builder(this);        builder.setTitle("网络信息提示")                .setMessage("当前网络不可用,请先进行网络设置")                .create();        builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Intent intent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);                startActivity(intent);            }        });    }

中英文切换

String[] a = new String[]{        "简体中文",        "English"};AlertDialog.Builder builder = new AlertDialog.Builder(this);            builder.setSingleChoiceItems(a,0, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        wh = which;    }}).setPositiveButton("确认", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        resources = getResources();// 获得res资源对象        config = resources.getConfiguration();// 获得设置对象        dm = resources.getDisplayMetrics();        switch (wh) {            case 0:                config.locale = Locale.SIMPLIFIED_CHINESE;                resources.updateConfiguration(config, dm);                onCreate(null);                break;            case 1:                config.locale = Locale.US;                resources.updateConfiguration(config, dm);                onCreate(null);                break;        }    }}).setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {    }}).create().show();

资源管理

Anim/ 创建

res(右击)->new->android resource file(点击)
【File name】 这里需要输入你想创建的动画文件名
【Resource type】这里需要修改成动画资源文件类型,
Directory name】这个地方需要修改成anim

HashMap排序

集合排序

HashMap map = new HashMap<>(); map.put("d", 2);map.put("c", 1);map.put("b", 1);map.put("a", 3);List> list = new ArrayList<>(map.entrySet());//排序Collections.sort(list, new Comparator>() {    @Override    public int compare(Map.Entry t2, Map.Entry t1) {        //return t2.getValue() - t1.getValue(); //integer类型排序return t2.compareTo(t1);//string类型 排序    }});

遍历

for(Map.Entry a:list){    System.out.println(a.getKey());    System.out.println(a.getValue());}

HTTP类 与 获取数据方法–网络框架

在项目清单文件中添加

android:usesCleartextTraffic="true"

HTTP类

public class HTTP {    private static RequestQueue requestQueue;    public static interface Lis {        void success(JSONObject json);        void error(String error);    }    public static void conn(Context context, String address, final JSONObject json, final Lis lis) {        if (requestQueue == null) {            Volley.newRequestQueue(context);        }        String url = "";        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, json, new Response.Listener() {            @Override            public void onResponse(JSONObject jsonObject) {                lis.success(jsonObject);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {                lis.error(volleyError.toString());            }        });        requestQueue.add(request);    }}

获取数据方法

private void getdata(String user) {    try {        HTTP.conn(getContext(), "", new JSONObject().put("UserName", user), new HTTP.Lis() {            @Override            public void success(JSONObject json) {                try {                    //普通获取                    String  result=json.getString("result");                                    } catch (JSONException e) {                    e.printStackTrace();                }            }            @Override            public void error(String error) {            }        });    } catch (JSONException e) {        e.printStackTrace();    }}

JSONArray 转数值的方法

private void getdata(String user) {    try {        HTTP.conn(getContext(), "", new JSONObject().put("UserName", user), new HTTP.Lis() {            @Override            public void success(JSONObject json) {                try {                    //普通获取                    String  result=json.getString("result");                    //转JSONArray                    JSONArray array=json.getJSONArray("Array");                    List ResultList=new ArrayList();                    for (int i=0;i

GreenDao Application类 和 数据库管理类–数据库框架(保险起见 原始数据库需要看一下)

添加依赖

Project build.gradle:

classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'

app build.gradle:

a

pply plugin: 'org.greenrobot.greendao'greendao {    //数据库的schema版本,也可以理解为数据库版本号    schemaVersion 1    //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。    daoPackage 'com.example.thtf.kj.dao'    //设置DaoMaster、DaoSession、Dao目录    targetGenDir 'src/main/java'}implementation 'org.greenrobot:greendao:3.2.2'

实体类

建entity包放实体类

 @Entitypublic class Car {    @Id(autoincrement = true)    Long id;    String brand;    int money;    }

Ctrl+F9后

@Entitypublic class Car {    @Id(autoincrement = true)    Long id;    String brand;    int money;    @Generated(hash = 840096487)    public Car(Long id, String brand, int money) {        this.id = id;        this.brand = brand;        this.money = money;    }    @Generated(hash = 625572433)    public Car() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getBrand() {        return this.brand;    }    public void setBrand(String brand) {        this.brand = brand;    }    public int getMoney() {        return this.money;    }    public void setMoney(int money) {        this.money = money;    }    }

并多出三个类

项目结构

编写MyApplication类

public class MyApplication extends Application {    private static Context mContext;    @Override    public void onCreate() {        super.onCreate();        mContext = getApplicationContext();        GreenDaoManager.getInstance();    }    public static Context getContext() {        return mContext;    }}

在项目清单文件中添加

android:name=".MyApplication"注册MyApplication

编写GreenDaoManager数据库管理类

public class GreenDaoManager {    private static GreenDaoManager mInstance;    private DaoMaster mDaoMaster;    private DaoSession mDaoSession;    public GreenDaoManager() {        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "car-db", null);        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());        mDaoSession = daoMaster.newSession();    }    public static GreenDaoManager getInstance() {        if (mInstance == null) {            mInstance = new GreenDaoManager();        }        return mInstance;    }    public DaoMaster getDaoMaster() {        return mDaoMaster;    }    public DaoSession getDaoSession() {        return mDaoSession;    }    public DaoSession getNewDaoSession() {        mDaoSession = mDaoMaster.newSession();        return mDaoSession;    }}大功告成

AlertDialog AlertDialog.Builder–弹出框

默认弹出框

AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setTitle("这是弹出框")        .setMessage("这是内容")        .setPositiveButton("确认", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(getContext(), which + "", Toast.LENGTH_SHORT).show();            }        }).setNeutralButton("忽略", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), which + "", Toast.LENGTH_SHORT).show();    }}).setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), which + "", Toast.LENGTH_SHORT).show();    }}).create().show();

单选弹出框

1

final String[] a = new String[]{        "C",        "D",};AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setSingleChoiceItems(a, 1, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), a[which] + "", Toast.LENGTH_SHORT).show();    }}).show();

2

final String[] a = new String[]{        "A",        "B",}; AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setItems(a, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), a[which] + "", Toast.LENGTH_SHORT).show();    }}).show();

多选弹出框

final String[] dessert = new String[]{"抹茶千层", "芒果拿破仑", "草莓雪媚娘", "蓝莓慕斯"};boolean[] begin = new boolean[]{false, false, false, false};AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());alertDialog.setMultiChoiceItems(dessert, begin, new DialogInterface.OnMultiChoiceClickListener() {    @Override    public void onClick(DialogInterface dialog, int which, boolean isChecked) {        Toast.makeText(getContext(), dessert[which], Toast.LENGTH_SHORT).show();    }}).setPositiveButton("确认", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), "真好吃!", Toast.LENGTH_SHORT).show();    }}).setNegativeButton("取消", new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        Toast.makeText(getContext(), "真不好玩!", Toast.LENGTH_SHORT).show();    }}).show();

ViewPage 的监听 Fragment–碎片以及小圆点

布局XMl

<?xml version="1.0" encoding="utf-8"?>                                    

Fragment适配器

public class adapter extends FragmentPagerAdapter {    ArrayList fragments;    public adapter(FragmentManager fm, ArrayList fragments) {        super(fm);        this.fragments = fragments;    }    @Override    public Fragment getItem(int position) {        return fragments.get(position);    }    @Override    public int getCount() {        return fragments.size();    }}

加入Fragment

ArrayList fragments = new ArrayList<>();fragments.add(new page1());fragments.add(new page2());fragments.add(new page3());vp.setAdapter(new adapter(getFragmentManager(), fragments));

滑动viewpage小圆点变化

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(int position) {        for (int i = 0; i < ll.getChildCount(); i++) {            if (i == position) {                ll.getChildAt(i).setBackgroundResource(R.drawable.xld);            } else {                ll.getChildAt(i).setBackgroundResource(R.drawable.xbd);            }        }    }    @Override    public void onPageScrollStateChanged(int state) {    }});

点击小圆点Fragment viewpage发生变化

@Overridepublic void onClick(View v) {    switch (v.getId()) {        case R.id.t1:            vp.setCurrentItem(0);            break;        case R.id.t2:            vp.setCurrentItem(1);            break;        case R.id.t3:            vp.setCurrentItem(2);            break;    }}

TableLayout–表格布局与传数据进表格

Xml

                                        

传数据进表

private TableLayout tablelayout = (TableLayout) view.findViewById(R.id.tablelayout);TableRow row;for(int n = 0; n < 5;n++){ //行数    ArrayList arrayList = new ArrayList();    arrayList.add(n);    arrayList.add("张"+n);    arrayList.add((int)(Math.random()*100)%2 == 0 ? "男":"女");    arrayList.add((int)(Math.random()*30)) ;    row = new TableRow(getContext());    for(int m = 0;m < arrayList.size();m++){        TextView textView = new TextView(getContext());        textView.setText(arrayList.get(m)+"");        textView.setGravity(Gravity.CENTER);        textView.setBackgroundResource(R.drawable.black_kuang);        row.addView(textView); //添加一行中的一格    }    tablelayout.addView(row);//添加一行}

Handler Runnable–线程与更新UI

主体代码

private Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        int what = msg.what;        switch (what) {            case 0:        //更新UI                break;        }    }};private Runnable mRunnable = new Runnable() {    @Override    public void run() {        //想要做的事        mHandler.sendEmptyMessage(0);    }}; 

开启线程

new Thread(mRunnable).start();

关闭线程

mHandler.removeCallbacks(mRunnable);

SimpleDateFormat–获得本地时间 年月日时分秒星期的格式

主体代码

//规定格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd天 HH:mm:ss E");//获取本地时间Date date = new Date(System.currentTimeMillis());//显示时间simpleDateFormat.format(date);

SharedPreferences.Editor–写入本地

Object o = getSharedPreferences("data", 0).edit();((SharedPreferences.Editor) o).putString("a", "a");((SharedPreferences.Editor) o).commit();

getSharedPreferences()–获取本地缓存

Object o = getSharedPreferences("data", 0);((SharedPreferences) o).getString("a", "");

VideoView MediaController --视频组件与进度条组件的搭配

MediaController mediaController = new MediaController(getContext());vd.setVideoURI(Uri.parse("android.resource://" + getContext().getPackageName() + "/" + R.raw.v1));vd.setMediaController(mediaController); setVideoURI();导入视频start()播放pause()暂停

获取网页代码路径 与视频文件路径

网页代码路径

1.新建assets目录2.在assets目录中创建web(名字可以自己起)文件夹(据说如果不创建这层目录就无法拿到assets中的文件)webView.loadUrl("file:///android_asset/web/2.html");

视频文件路径

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/raw/" + R.raw.test_video);mVideoView.setVideoURI(uri);

LayoutParams --设置View的大小

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(160, 160);

Spinner --下拉框的适配和监听

适配

final String[] strings = new String[]{        "A", "B", "C", "D"};ArrayAdapter adapter=new ArrayAdapter(getContext(),android.R.layout.simple_expandable_list_item_1,strings);sp.setAdapter(adapter);

监听

sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {    @Override    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {        Log.e("", ":"+strings[position] );    }    @Override    public void onNothingSelected(AdapterView<?> parent) {    }});

Switch --开关的适配和监听

xml文件

    android:track="@drawable/b2" />

监听

sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {    @Override    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {        //isChecked 为开关    }});

ExtendableListView --列表视图的适配

Xml

父视图group_item

<?xml version="1.0" encoding="utf-8"?>    

子视图 child_item

<?xml version="1.0" encoding="utf-8"?>        

适配器

//为ExpandableListView自定义适配器class MyExpandableListView extends BaseExpandableListAdapter {    //返回一级列表的个数    @Override    public int getGroupCount() {        return groups.length;    }    //返回每个二级列表的个数    @Override    public int getChildrenCount(int groupPosition) { //参数groupPosition表示第几个一级列表        Log.d("smyhvae", "-->" + groupPosition);        return childs[groupPosition].length;    }    //返回一级列表的单个item(返回的是对象)    @Override    public Object getGroup(int groupPosition) {        return groups[groupPosition];    }    //返回二级列表中的单个item(返回的是对象)    @Override    public Object getChild(int groupPosition, int childPosition) {        return childs[groupPosition][childPosition]; //不要误写成groups[groupPosition][childPosition]    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    //每个item的id是否是固定?一般为true    @Override    public boolean hasStableIds() {        return true;    }    //【重要】填充一级列表    @Override    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        if (convertView == null) {            convertView = getLayoutInflater().inflate(R.layout.group_item, null);        } else {        }        TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group);        tv_group.setText(groups[groupPosition]);        return convertView;    }    //【重要】填充二级列表    @Override    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {        if (convertView == null) {            convertView = getLayoutInflater().inflate(R.layout.child_item, null);        }        ImageView iv_child = (ImageView) convertView.findViewById(R.id.iv_child);        TextView tv_child = (TextView) convertView.findViewById(R.id.tv_child);        //iv_child.setImageResource(resId);        tv_child.setText(childs[groupPosition][childPosition]);        return convertView;    }    //二级列表中的item是否能够被选中?可以改为true    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }}

适配

//Model:定义的数据private String[] groups = {"A", "B", "C"};//注意,字符数组不要写成{{"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}private String[][] childs = {{"A1", "A2", "A3", "A4"}, {"A1", "A2", "A3", "B4"}, {"A1", "A2", "A3", "C4"}};expandable_list_view_id.setAdapter(new MyExpandableListView());

监听

//父监听expandable_list_view_id.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {    @Override    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {        Toast.makeText(getContext(),groups[groupPosition],Toast.LENGTH_SHORT).show();        return false;    }});
//子监听expandable_list_view_id.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {    @Override    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {        Toast.makeText(getContext(),childs[groupPosition][childPosition],Toast.LENGTH_SHORT).show();        return false;    }});

Timer-TimerTask定时器

1.隔几秒运行一次Int i=1;Timer timer=new Timer();TimerTask timerTask=new TimerTask() {   @Override   public void run() {      Log.e("a", "run: "+i++ );   }};timer.schedule(timerTask,1000);1.timer.schedule(task, time);  // time为Date类型:在指定时间执行一次。2.timer.schedule(task, firstTime, period);  // firstTime为Date类型,period为long。从firstTime时刻开始,每隔period毫秒执行一次。3.timer.schedule(task, delay)  // delay 为long类型:从现在起过delay毫秒执行一次4.timer.schedule(task, delay, period)  // delay为long,period为long:从现在起过delay毫秒以后,每隔period。毫秒执行一次。timer.schedule(timerTask,1000,100);

Handler定时器

mHandler.postDelayed(mRunnable,1000);

NotificationManager Notification–通知栏的使用

通知栏的方法private void notice(Context context, String title, String content, int icon, int i) {    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {        NotificationChannel channel = new NotificationChannel("1", "11", NotificationManager.IMPORTANCE_LOW);        manager.createNotificationChannel(channel);        Notification notification = new Notification.Builder(context, "1")                .setContentTitle(title)                .setContentText(content)                .setSmallIcon(icon)                .build();        manager.notify(i, notification);    } else {        Notification.Builder notification = new Notification.Builder(context)                .setContentTitle(title)                .setContentText(content)                .setSmallIcon(icon);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {            manager.notify(i, notification.build());        }    }}

shape --简单的图形框绘画

<?xml version="1.0" encoding="utf-8"?>                

<?xml version="1.0" encoding="utf-8"?>                

<?xml version="1.0" encoding="utf-8"?>                 

<?xml version="1.0" encoding="utf-8"?>            

CalendarView --日历控件 监听

Xml

监听

Cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {    @Override    public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {        String str=year+"年"+month+"月"+dayOfMonth+"日";        Toast.makeText(getContext(),str+"",Toast.LENGTH_SHORT).show();    }});

include ViewStub --包含视图和延时包含视图的使用

include

ViewStub

Xml

延时加载

View view = (View) findViewById(R.id.viewstub);if (view != null) {    view.setVisibility(View.VISIBLE);} else {    setTitle("加载子窗口");}

组件显示与隐藏

显示

view.setVisibility(View.VISIBLE);

隐藏

view.setVisibility(View.GONE);

导入包的方法

App-libs添加包右击 add library

Fragment中使用getFragmentManager()嵌入布局 在activity中

getSupportFragmentManager().beginTransaction().replace(R.id.maincontent,new Fragment_2()).commit();//R.id.maincontent 为需要嵌入的布局id// new Fragment_2() 为Fragment

SimpleAdapter ArrayAdapter 的使用

ArrayAdapter

String[] a = new String[]{        "A", "B"};ArrayAdapter stringArrayAdapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,a);

SimpleAdapter

final String[] actionTexts = new String[]{        getString(R.string.g1),        getString(R.string.g2),        getString(R.string.g3),        getString(R.string.g4),        getString(R.string.g5),        getString(R.string.g6),        getString(R.string.g7),        getString(R.string.g8),        getString(R.string.g9),        getString(R.string.g10),        getString(R.string.res_left_chuanyi),        getString(R.string.res_left_exit)};int[] actionImages = new int[]{        R.drawable.btn_l_star,        R.drawable.btn_l_book,        R.drawable.btn_l_arrows,        R.drawable.btn_l_grid,        R.drawable.btn_l_speech_3,        R.drawable.btn_l_twitter,        R.drawable.btn_l_skype,        R.drawable.btn_l_windows,        R.drawable.btn_l_slideshow,        R.drawable.btn_l_suitcase,        R.drawable.btn_l_target,        R.drawable.btn_l_download};actionItems = new ArrayList>();actionAdapter = new SimpleAdapter(getApplicationContext(), actionItems, R.layout.left_list_fragment_item,        new String[]{"action_icon", "action_name"},        new int[]{R.id.recharge_method_icon, R.id.recharge_method_name});for (int i = 0; i < actionImages.length; ++i) {    HashMap item1 = new HashMap();    item1.put("action_icon", actionImages[i]);    item1.put("action_name", actionTexts[i]);    actionItems.add(item1);}listView.setAdapter(actionAdapter);

ProgressBar的使用

Xml

Style

默认圆形?android:attr/progressBarStyleHorizontal" 条状

属性

progress.setMax(1000); //设置最大值progress.setProgress(100); //设置第一值progress.setSecondaryProgress(500);//设置第二值

退出程序

finish();

还有一部分没有整理

MPAndroidChart–画图

EChart–画图

Animation–出入场动画的使用

等等

配张图自己感受

更多相关文章

  1. 单点登录(三)| JIRA 安装及 JIRA 集成 CAS 实践
  2. Android(安卓)中Parcelable的作用 (转载)
  3. android 自定义View过程解析
  4. Android(安卓)Studio中配置AndroidAnnotations,遇到的问题及解决
  5. 【Android】在不同的线程池中执行AsyncTask
  6. Android(安卓)自定义复合组件Demo
  7. eclipse 上调试android的自带应用方法
  8. android实现横向滚动
  9. Android程序的签名保护及绕过方法

随机推荐

  1. Android(安卓)进阶——Android(安卓)Stud
  2. 浅谈android:clipChildren属性
  3. Android异步加载图像小结
  4. Android(安卓)Wear 控件——WearableList
  5. android 系统级 bug audio latency
  6. android中从图库中选取图片
  7. Android中Message机制的灵活应用
  8. Android中获取屏幕相关信息(屏幕大小,状态
  9. Android(安卓)基础总结:(四)Activity(Instan
  10. Android异步更新UI-线程池-Future-Handle