上图看效果:
原理:动态布局【锤子便签,印象笔记都是如此】
源码:
public class NotesActivity extends ActionBarActivity implements View.OnClickListener{
private Button add_imgs_btn = null, save_btn = null;
private LinearLayout notes_layout = null;
private EditText notes_text = null;
private final static int TAKE_PICTURE = 1; //调用系统相机拍照
private final static int CHOOSE_PICTURE = 2; //从系统相册选择照片
private final static int CHOOSE_PICTURE_KITKAT = 3; //从系统相册中选择照片:兼容android4.4
private String tag = "NotesActivity";
private List<String> listStr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notes);
initViews();
// Snackbar.
}
/**
* 初始化控件
* */
public void initViews(){
add_imgs_btn = (Button)findViewById(R.id.add_imgs_btn);
add_imgs_btn.setOnClickListener(this);
save_btn = (Button)findViewById(R.id.save_btn);
save_btn.setOnClickListener(this);
notes_layout = (LinearLayout)findViewById(R.id.notes_layout);
notes_text = (EditText)findViewById(R.id.notes_text);
}
/**
* 获取笔记内容
* */
private void getContent(){
int childCount = notes_layout.getChildCount();
listStr = new ArrayList<>();
String content = "";
for(int i=0; i<childCount; i++){
View tempView = notes_layout.getChildAt(i);
if(tempView instanceof EditText){
//content = content+ ((EditText)tempView).getText();
listStr.add(String.valueOf(((EditText)tempView).getText()));
} else if(tempView instanceof ImageView){
content = content+ tempView.getTag();
listStr.add(String.valueOf(tempView.getTag()));
}
}
// content = content + notes_text.getText();
Toast.makeText(this, "笔记内容:"+listStr, Toast.LENGTH_SHORT).show();
listStr.add(String.valueOf(notes_text.getText()));
Log.i(tag, "笔记内容:"+content);
}
/**
* 保存笔记
* */
private void saveNotes(){
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data == null) return;
if(resultCode == RESULT_OK){
switch (requestCode){
case CHOOSE_PICTURE:
Uri uri = data.getData();
String []proj = {MediaStore.MediaColumns.DATA};
Cursor cursor = managedQuery(uri, proj, null, null, null);
if(cursor!=null){
int image_columns_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
String path = cursor.getString(image_columns_index); //获取图片的路径
if(Build.VERSION.SDK_INT<14){
cursor.close();
}
addTextView(notes_text.getText());
addImageView(path);
}
break;
case CHOOSE_PICTURE_KITKAT: //兼容android4.4图片选择
uri = data.getData();
if(uri!=null){
String path = IntentImgUtil.getPath(this, uri);
addTextView(notes_text.getText());
addImageView(path);
}
break;
}
} else { //获取图片失败
Toast.makeText(this, "获取图片失败", Toast.LENGTH_SHORT).show();
}
}
/**
* 从系统相册中选取图片
* */
private void choosePicture(){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
startActivityForResult(intent, CHOOSE_PICTURE_KITKAT);
} else {
startActivityForResult(intent, CHOOSE_PICTURE);
}
}
/**
* 添加TextView
* */
private void addTextView(Editable editable){
EditText txtView = new EditText(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
txtView.setLayoutParams(params);
txtView.setBackgroundDrawable(null); //兼容低版本
txtView.setText(editable);
notes_text.setText(""); //清除
notes_layout.addView(txtView);
}
/**
* 添加ImageView
* */
private void addImageView(String path){
final ImageView imgView = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
imgView.setLayoutParams(params);
imgView.setAdjustViewBounds(true);
imgView.setScaleType(ImageView.ScaleType.CENTER);
imgView.setTag(path); //设置TAG
imgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(NotesActivity.this, "图片地址" + imgView.getTag(), Toast.LENGTH_SHORT).show();
}
});
imgView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//长按删除图片
notes_layout.removeView(imgView);
Toast.makeText(NotesActivity.this, "图片已删除", Toast.LENGTH_SHORT).show();
return true;
}
});
Bitmap bitmap = BitmapFactory.decodeFile(path);
imgView.setImageBitmap(bitmap);
notes_layout.addView(imgView);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.add_imgs_btn: //添加图片
choosePicture(); //从系统相册选取图片
break;
case R.id.save_btn: //保存
getContent();
break;
}
}
}