2019-05-19

2019-11-02  本文已影响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");
上一篇下一篇

猜你喜欢

热点阅读