android富文本编辑器

上图看效果:


原理:动态布局【锤子便签,印象笔记都是如此】

源码:

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;

        }
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值