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");
网友评论