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

原文地址:https://www.cnblogs.com/jentary/p/8372660.html