1。style 属性的继承
方式一:通过parent属性用来继承android已经定义好的style。
方式一:如果要继承自定义的style,不需要通过parent属性,只要style的name以需要继承的style的name开始后跟新的style的name
<style name="Animation" />
<!-- Standard animations for a non-full-screen window or activity. -->
<style name="Animation.Dialog">
<item name="windowEnterAnimation">@anim/dialog_enter</item>
<item name="windowExitAnimation">@anim/dialog_exit</item>
</style>
2。windowSoftInputMode 的理解
android:windowSoftInputMode=”adjustPan” 键盘就会覆盖屏幕
android:windowSoftInputMode=”stateVisible|adjustResize” 屏幕整体上移
3。android:screenOrientation的理解
android:screenOrientation=”landscape”是限制此页面横屏显示,
android:screenOrientation=”portrait”是限制此页面数竖屏显示。
4。利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程
5。Character.isDigit这个字符是否是数字字符 即’0’~’9’
6.TextWatcher 的使用edittext 中数据改变时,检测状态,
// EditText监听器
class TextChange implements TextWatcher {
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
boolean Sign2 = et_usertel.getText().length() > 0;
boolean Sign3 = et_password.getText().length() > 0;
if (Sign2 & Sign3) {
btn_login.setTextColor(0xFFFFFFFF);
btn_login.setEnabled(true);
}
// 在layout文件中,对Button的text属性应预先设置默认值,否则刚打开程序的时候Button是无显示的
else {
btn_login.setTextColor(0xFFD0EFC6);
btn_login.setEnabled(false);
}
}
}
et_usertel.addTextChangedListener(new TextChange());
et_password.addTextChangedListener(new TextChange());
7。选择照片,拍照选择上传服务器
// 拍照部分
private void showCamera() {
final AlertDialog dlg = new AlertDialog.Builder(this).create();
dlg.show();
Window window = dlg.getWindow();
// *** 主要就是在这里实现这种效果的.
// 设置窗口的内容页面,shrew_exit_dialog.xml文件中定义view内容
window.setContentView(R.layout.alertdialog);
// 为确认按钮添加事件,执行退出应用操作
TextView tv_paizhao = (TextView) window.findViewById(R.id.tv_content1);
tv_paizhao.setText("拍照");
tv_paizhao.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SdCardPath")
public void onClick(View v) {
imageName = getNowTime() + ".png";
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 指定调用相机拍照后照片的储存路径
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File("/sdcard/fanxin/", imageName)));
startActivityForResult(intent, PHOTO_REQUEST_TAKEPHOTO);
dlg.cancel();
}
});
TextView tv_xiangce = (TextView) window.findViewById(R.id.tv_content2);
tv_xiangce.setText("相册");
tv_xiangce.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
getNowTime();
imageName = getNowTime() + ".png";
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
dlg.cancel();
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PHOTO_REQUEST_TAKEPHOTO:
startPhotoZoom(
Uri.fromFile(new File("/sdcard/fanxin/", imageName)),
480);
break;
case PHOTO_REQUEST_GALLERY:
if (data != null)
startPhotoZoom(data.getData(), 480);
break;
case PHOTO_REQUEST_CUT:
// BitmapFactory.Options options = new BitmapFactory.Options();
//
// /**
// * 最关键在此,把options.inJustDecodeBounds = true;
// * 这里再decodeFile(),返回的bitmap为空
// * ,但此时调用options.outHeight时,已经包含了图片的高了
// */
// options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/fanxin/"
+imageName);
iv_photo.setImageBitmap(bitmap);
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
@SuppressLint("SdCardPath")
private void startPhotoZoom(Uri uri1, int size) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri1, "image/*");
// crop为true是设置在开启的intent中设置显示的view可以剪裁
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX,outputY 是剪裁图片的宽高
intent.putExtra("outputX", size);
intent.putExtra("outputY", size);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File("/sdcard/fanxin/", imageName)));
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
8.打钩选择密码可见与不可见
iv_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iv_show.setVisibility(View.GONE);
iv_hide.setVisibility(View.VISIBLE);
et_password
.setTransformationMethod(PasswordTransformationMethod
.getInstance());
// 切换后将EditText光标置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence instanceof Spannable) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}