美文网首页
2019-05-19

2019-05-19

作者: 上杉樱木 | 来源:发表于2019-11-02 02:07 被阅读0次

    Android Studio

    1.添加按钮,并绑定点击事件

            Button cardsBtn = (Button)findViewById(R.id.cardsBtn);
            cardsBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, CardsActivity.class);
                    startActivity(intent);
                }
            });
    

    2.设置控件内的文本位置 : gravity

    3.水平三个控件,希望最左和最右的控件为wrap_content,中间的控件占水平方向的所有部分。把他的layout_width设置为match_content会让他占据了所有控件的位置。解决方法是设置layout_weight为1。

    4.导入CameraView
    https://github.com/google/cameraview
    下载并解压到本地,File->New->New Module
    修改build.gradle(Project)。supportLibraryVersion版本查看appcompat,buildToolsVersion 查看本地Sdk下的biuld-tools

    ext {
        // Sdk and tools
        minSdkVersion = 24
        targetSdkVersion = 28
        compileSdkVersion = 28
        buildToolsVersion = '28.0.3'
    
        // App dependencies
        supportLibraryVersion = '28.0.0'
        junitVersion = '4.12'
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
    
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    导入后发现无法找到该类(Missing Classes)
    解决方法:在build.gradle(App)里加上导入

    dependencies {
        implementation project(':library')
    }
    

    5.dp
    dp=dip 与像素有关 与设备尺寸无关
    px 像素
    dpi像素密度(每英寸像素数量) 分辨率/尺寸
    dp = (DPI/160)px

    6.相机权限

    关于Android运行时的权限
    链接:https://blog.coding.net/blog/understanding-marshmallow-runtime-permission
    Android6.0之前为静态权限,在用户安装应用是询问是否获得权限。Android6.0之后为动态权限,在用户打开应用时询问是否获得权限。
    链接:https://www.jianshu.com/p/57798618bd90
    检查权限:

        //返回值为PackageManager.PERMISSION_GRANTED或
        //PackageManager.PERMISSION_DENIED
        int permissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_CALENDAR);
    

    请求权限:

        //第二个参数是String数组,第三个参数是请求码。便于在onRequestPermissionsResult 方法中根据requestCode进行判断.
    ActivityCompat.requestPermissions(PermissionActivity.this,
                            new String[]{Manifest.permission.READ_CONTACTS},
                            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    

    请求权限后的回调
    请求权限后会回调onRequestPermissionsResult方法

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        
    
                    } else {
    
                    }
                }
            }
        }
    

    告诉用户为何需要权限
    ActivityCompat.shouldShowRequestPermissionRationale(activity,permission) 这个方法是在用户拒绝权限后返回true. 也就是说:用户第一次点击一个需要权限的地方,该方法返回false(因为用户没拒绝~),当用户拒绝掉该权限,下次点击此权限处,该方法会返回true.可在里面进行对该权限的说明,然后弹出权限让用户选择,并且对话框有don't ask again选项.

    @OnClick(R.id.btn_check)
        public void onClick() {
    
            //判断是否有权限
            if (ContextCompat.checkSelfPermission(PermissionActivity.this,
                    Manifest.permission.READ_CONTACTS)
                    != PackageManager.PERMISSION_GRANTED) {
                //当用户拒绝掉权限时.
                if (ActivityCompat.shouldShowRequestPermissionRationale(PermissionActivity.this,
                        Manifest.permission.READ_CONTACTS)) {
    
                    Toast.makeText(PermissionActivity.this, "true", Toast.LENGTH_SHORT).show();
                    AlertDialog dialog = new AlertDialog.Builder(this).setTitle("该权限保证手机不会爆炸^ ^").setPositiveButton("我需要此权限!", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.requestPermissions(PermissionActivity.this,
                                    new String[]{Manifest.permission.READ_CONTACTS},
                                    MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                        }
                    }).setNegativeButton("炸吧炸吧~", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(PermissionActivity.this, "准备爆炸了", Toast.LENGTH_SHORT).show();
                        }
                    }).show();
    
                } else {
    
                    Toast.makeText(PermissionActivity.this, "false", Toast.LENGTH_SHORT).show();
                    ActivityCompat.requestPermissions(PermissionActivity.this,
                            new String[]{Manifest.permission.READ_CONTACTS},
                            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    
                }
            }
        }
    
    switch("需要获得权限"){
        case OK:
            弹出框
            switch("是否允许获得权限"){
                case Allow:
                    OK
                case Deny and Don't ask:
                    无权限 不能使用
                case Deny:
                    弹出框
                    switch(需要获得权限){
                        case OK:
                            ......
                        case Cancel:
                        无权限 不能使用
                    }
            }
        case Cancel:
            无权限 不能使用
    }
    

    7.final
    final修饰类时:该类不能被继承
    final修饰方法时:该方法不能被重写,子类出现同名的方法会报错。而当用private修饰时,子类出现同名的方法不会报错。
    final修饰变量时:如果修饰的基本数据类型,则变量值就时const。如果修饰引用变量时,则变量存的地址不能变,但地址对应的对象可以变。

    8.startActivityForResult和onActivityResult
      通过intent跳转至多个不同的Activity,当子activity的代码执行完毕后再次返回主页面,并返回数据。这种带数据的意图跳转需要使用activity的onActivityResult()方法。
    startActivityForResult(Intent intent, int requestCode);
    onActivityResult(int requestCode, int resultCode, Intent data)

    9.设置背景透明度但未变透明
    解决方法:addFlags

    lp.alpha = 0.5f;
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    getWindow().setAttributes(lp);
    

    10.OkHttp
    参考链接:https://www.jianshu.com/p/2663ce3da0db
    导入:
    直接implementation失败。不知道为什么。翻墙也不行。
    从github上下载jar包到libs下,然后将jar包Add As Library。之后可以看到gradle文件已做出修改。

    implementation files('libs/okhttp-4.0.0-alpha01.jar')
    

    internet
    url

    11.设置ToolBar的title居中
    参考链接:https://blog.csdn.net/tt_man/article/details/52791270

    <android.support.v7.widget.Toolbar        android:id="@+id/recommand_toolbar"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:minHeight="?attr/actionBarSize"        android:background="@color/colorWhite"        app:contentInsetStart="0dp"        android:layout_gravity="center">         <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center"            android:text="@string/app_name"            android:textSize="22sp" />     </android.support.v7.widget.Toolbar>
    

    12.使控件ImageView长宽比例跟图片保持一致

    2、ImageView的adjustViewBounds

    为ImageView设置adjustViewBounds,如下:
    android:adjustViewBounds="true"
    这个方法只能用于ImageView

    13.layout_weight算法
    Button1所占空间 = 1个match_parent空间+(-2个match_parent空间)*1/6 = 2/3个match_parent空间

    Button2所占空间 = 1个match_parent空间+(-2个match_parent空间)*2/6 = 1/3个match_parent空间

    Button3所占空间 = 1个match_parent空间+(-2个match_parent空间)*3/6 = 0个match_parent空间

    14.chain
    https://blog.csdn.net/airsaid/article/details/79052011#添加约束

    15.页面传参
    设置参数

            //传递些简单的参数
            Intent intent1 = new Intent();
            intent1.setClass(MainActivity.this,SimpleActivity.class);
    
            //intent1.putExtra("usr", "lyx");
            //intent1.putExtra("pwd", "123456");
            //startActivity(intent1);
    
            Bundle bundleSimple = new Bundle();
            bundleSimple.putString("usr", "lyx");
            bundleSimple.putString("pwd", "123456");
            intent1.putExtras(bundleSimple);
    
            startActivity(intent1);
    

    接收参数

            //接收参数
    
            //Intent intent = getIntent();
            //String eml = intent.getStringExtra("usr");
            //String pwd = intent.getStringExtra("pwd");
            
            Bundle bundle = this.getIntent().getExtras();
            String eml = bundle.getString("usr");
            String pwd = bundle.getString("pwd");
    

    相关文章

      网友评论

          本文标题:2019-05-19

          本文链接:https://www.haomeiwen.com/subject/nuaqzqtx.html