• android 基础


    package app.tj.com.hello;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.InputFilter;
    import android.text.Spanned;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            //动态创建视图
            LinearLayout linearLayout = new LinearLayout(this);
    
            ViewGroup.LayoutParams layoutParams =  linearLayout.getLayoutParams();
            //linearLayout.addView();
    
    
            linearLayout.setLayoutParams(layoutParams);
    
            //类似模板
            LayoutInflater layoutInflater = getLayoutInflater();
            layoutInflater.inflate(R.layout.activity_main,null);
    
    
            setContentView(R.layout.activity_main);
    
            //添加按钮
            Button button = (Button) findViewById(R.id.add);
    
            Button button2 = (Button) findViewById(R.id.add2);
    
            //添加监听
            /*button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,"添加",Toast.LENGTH_SHORT).show();
                }
            });*/
    
            button.setOnClickListener(listener);
    
    
            //触碰事件
            button.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
    
                    int actionType = event.getAction();
                    if (actionType==MotionEvent.ACTION_DOWN){
                        //按下
                    }else if (actionType==MotionEvent.ACTION_MOVE){
                        //移动
                    }else if (actionType==MotionEvent.ACTION_UP){
                        //松开
                    }
                    //绑定多个事件时是否往下传递,true不传递
                    return false;
                }
            });
    
            //获取布局页面  相当于DIV,可以加相关事件
            ViewGroup viewGroup = (ViewGroup) findViewById(R.id.main);
    
            viewGroup.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    return false;
                }
            });
            //一个ACTIVITY是一个UI线程,线程会监听页面的变化,每个ACTIVITY 中的VIEW 会相互影响
            //当线程阻塞超过5秒,系统就会干预
            //解决办法   再创建一个线程
            //新创建的线程不能修改当前UI主线程中的VIEW组件
    
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(final View v) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(5000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //不能再新开辟线程中调用V
                            //TextView textView = (TextView) v;
                            //可用---android解决方案
                            //可读性差
                            v.post(new Runnable() {
                                @Override
                                public void run() {
                                    //异步执行  放到UI主线程中
                                    TextView textView = (TextView) v;
                                }
                            });
    
                            //第二种方案  AsyncTask
    
                        }
                    }).start();
                }
            });
    
    
            //android 继承的五个优先级,进程在运行过程中会随时变化
            //1用户正在操作的
            //2用户从一个程序切换到另一个程序
            //3边放音乐,边看电子书,音乐的service
            //4定时检测更新
            //5缓存进程
    
    
            //资源文件   res   R类中都可以获取(asset不能获取AsserManager二进制流的方式获取)
            //anim  (xml动画文件)
            int color = this.getResources().getColor(R.color.colorAccent);
            this.getWindow().setBackgroundDrawableResource(R.color.colorAccent);
            //dimen尺寸资源
            //drawable  图片资源文件
    
            //view 的子类为vidget
            //相对位置  layout_height
            //wrap 内容多少   组件多大
            //ems 多少个字
            //fill  和父窗口一直  在定义 android:height不受影响
            //android:ems="2" 显示几个字  多了换行
            //android:gravity  文本位置设置
    
            //文本框
            TextView textView = (TextView) findViewById(R.id.textView);
            textView.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    //文本框内容
                    String content = s.toString();
                }
            });
    
    
            textView.setFilters(new InputFilter[]{
    
                    //实现自定义过滤
                    new InputFilter() {
                        @Override
                        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                            return null;
                        }
                    }
    
    
            });
    
            //Spinner下拉列表
            //数组适配器
            //ArrayAdapter
    
            //LinearLayout  线性布局    布局可以相互嵌套
            //RelativeLayout 相对布局 1位置  2边距  3对齐方式
            //FrameLayout 帧布局  从屏幕左上角(0,0)布局,进行叠加


    //图片视图
            ImageView imageView = (ImageView) findViewById(R.id.imageView);
            //获取窗口的宽度
            this.getWindowManager().getDefaultDisplay().getWidth();
    
            //文本框<requestFocus/>获取焦点
            EditText editText = (EditText) findViewById(R.id.editText);
    
            //弹出框
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("");
            builder.setMessage("");
            //builder.setView()  自定义弹框
    
    
            //弹出框弹出多个值单选
            builder.setItems(new String[]{}, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
    
            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
    
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
    
            Button button = (Button) findViewById(R.id.button);
    
    
            //scrollView  上下滚动视图
            //listView 自带上下滚动
            View view = getLayoutInflater().inflate(android.R.layout.activity_list_item,null);
    
    //        ListView listView = (ListView) findViewById(android.R.layout.activity_list_item);
    //        listView.setAdapter(new BaseAdapter() {
    //            @Override
    //            public int getCount() {
    //                return 0;
    //            }
    //
    //            @Override
    //            public Object getItem(int position) {
    //                return null;
    //            }
    //
    //            @Override
    //            public long getItemId(int position) {
    //                return 0;
    //            }
    //
    //            @Override
    //            public View getView(int position, View convertView, ViewGroup parent) {
    //                return null;
    //            }
    //        });
    
            //viewGroup   和VIEW的关系
            //GridView 九宫格
            //多个activity 组成一个栈  先进后出
    
            //intent 控制跳转和传值
            Intent intent = new Intent();
            //intent.setClass(this,)
    
            intent.putExtra("name","张三");
            this.startActivity(intent);
            this.startActivityForResult(intent,1);
            //使当前activity 销毁 重当前栈中删除
            this.finish();
            //activity 生命周期

    } //把listener 和按钮分离,可以重用 private View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()){ case R.id.add: //Toast.makeText(MainActivity.this,"添加",Toast.LENGTH_SHORT).show(); Toast toast = Toast.makeText(MainActivity.this,"添加",Toast.LENGTH_SHORT); //设置显示位置 toast.setGravity(Gravity.CENTER,0,0); toast.show(); //通知 //notification break; default: Log.i("app","测试"); } } }; //下拉列表会用到 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } }

    /**
         * 返回值监听
         * @param requestCode
         * @param resultCode
         * @param data
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
        }


    }

      双击 shift 查找类

          F4看继承关系

    gradle 地址

    http://services.gradle.org/distributions/




    src  MainActivity 主文件



    res放的都是资源文件

    layout  布局文件

    values 字符串文件

    R可以获取所有的资源文件

    R.id

    R.string


    @相当于R


    AndroidManifest.xml  app访问入口,所有的activity 都必须在其中注册

    logcat pid进程号


    一般不用 system
    用 log.i("tag","内容");


    android 进程优先级

    5个级别
    1  正在操作的界面
    2  用户从一个程序切换到另一个程序
    3  service process   边放音乐边看电子书
    4  定时检测更新
    5  缓存进程

    在运行过程中有可能随时变化


    消息
    toast
    context    applicationContext    相当于 Application
    activityContext  相当于request


    消息提示
    notification   通知消息

    Content title  内容的标题

    large icon 图标


    android  资源管理

    res放的所有资源   会扫描放到R类   R类可以访问

    还包括   raw(二进制文件)   xml
    assets  文件夹一般是原始文件 mp3文件  不能通过R类获取

    资源文件的获取包括二中格式   
    从代码中获取  R.
    从配置文件获取  R资源类型/名


    所有的资源文件都在<resources></resources>


    R.string.ming

    尺寸资源  dimens.xml  @dimen/ming

    px
    in
    dp
    sp

    xml 资源   只能在代码中使用

    drawable  图片资源   图片名不能用数字


    UI组件

    view
    TextView   EditText   Button
    TimerPicker   dataPicket

    List views

    gallery   mageswitcher   显示图片


    imageView   图片   android:src

    ems最多能输入几个字的长度

    singleline;"true"  单行

    maxlength  最长输入几个字

    <requestFocus>获取焦点

    hint text为空时显示的提示信息

    numeric   只能输入数字

    android:tag    相当于input里的 value   
    android:text

    spinner  下拉列表



    viewgroup



    Adapter    适配器模式    是数据源和UI组件之间的桥梁

    baseAdapter  最常用

    ArrayAdapter  


    UI布局  两种方式


    1。layout  布局文件
    线性布局   linearLayout

    android:orientation 布局方式   垂直  水平

    layout   可以嵌套



    2.在程序代码中动态生成



    gravity  对齐方式


    weight   相当于   框架集  对子元素

    相对布局  relativeLayout   比线性布局性能高

    layout_toRightOf    在右边
    layout_alignBottom  底部对齐


    UI布局
    1.帧布局
    frameLayout   常用于 图层    初始化页面,启动页面   层次感

    layout_gravity

    android:gravity



    2表格布局

    tableLayout

    对话框
    alertDialog



    自定义alertDialog


    layoutInflater    不再activity  中用  context.getsystemservice(context.)获取

    scrollview  垂直滚动条


    listView   自带滚动条   获取数据    需要使用adapter


    多个view   用  viewGroup

    GridView


    画廊控制
    gallery


    在 activity  中包含一个window 对象   在 window中包含一个布局容器  layout



    Fragment    (最低11)3.0后引进的新api     v4包2.2

    生命周期   必须放在activity中    和activity类似  有一些额外的回调


    fragmentManager

    activity 中没有frament  只能用fragmentManager



    dis

  • 相关阅读:
    LOJ 3055 「HNOI2019」JOJO—— kmp自动机+主席树
    LOJ 2586 「APIO2018」选圆圈——KD树
    bzoj 3600 没有人的算术——二叉查找树动态标号
    bzoj 1257 余数之和 —— 数论分块
    bzoj 3998 弦论 —— 后缀自动机
    bzoj 2946 公共串 —— 后缀自动机
    bzoj 4032 [ HEOI 2015 ] 最短不公共子串 —— 后缀自动机+序列自动机
    bzoj 2555 SubString —— 后缀自动机+LCT
    洛谷 P3804 [模板] 后缀自动机
    洛谷 P4106 / bzoj 3614 [ HEOI 2014 ] 逻辑翻译 —— 思路+递归
  • 原文地址:https://www.cnblogs.com/jentary/p/8372660.html
Copyright © 2020-2023  润新知