记录下EditText的几个设置

背景:EditText的几个用法,经常找来找去。因此把项目里的一段代码摘来做为例子。在一个布局内定义了一个EditText和一个Button。实现如下功能:

  1. EditText默认不可编辑。
  2. 点击Button,EditText进去可编辑状态,自动获得焦点,并且唤起键盘。
  3. 再次点击Button,EditText恢复不可编辑状态,并且隐藏键盘。

布局文件(部分):

  <EditText
    android:id="@+id/et_photo_desc"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:padding="5dp"
    android:textColor="@color/font_color_level_3"
    android:background="@drawable/default_input_edit"
    android:enabled="false"
    android:gravity="center_vertical"
    android:inputType="textMultiLine"
    android:hint="@string/hint_click_to_add_desc"
    android:textSize="@dimen/content_font_size_level_2" />

    <Button
      android:id="@+id/btn_edit_desc"
      android:layout_width="wrap_content"
      android:layout_height="50dp"
      android:layout_centerInParent="true"
      android:textColor="@color/font_color_level_2"
      android:text="@string/photo_view_edit_edit_desc"
      android:onClick="onEditDescButtonClicked" />

Button的OnClick方法实现:

    public void onEditDescButtonClicked(View view) {
        Button btnEdit = (Button) view;

        etPhotoDesc.setEnabled(!etPhotoDesc.isEnabled());

        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (etPhotoDesc.isEnabled()) {
            etPhotoDesc.requestFocus();
            inputManager.showSoftInput(etPhotoDesc, InputMethodManager.SHOW_FORCED);
        } else {
            SpotFile spotFile = spotInfo.getFiles().get(currentIndex);
            spotFile.setDescription(etPhotoDesc.getText().toString());
            inputManager.hideSoftInputFromWindow(etPhotoDesc.getWindowToken(), 0);
        }

        int titleId = etPhotoDesc.isEnabled() ? R.string.photo_view_edit_save_desc : R.string.photo_view_edit_edit_desc;
        btnEdit.setText(titleId);
    }

知识点:

1. 内容多行显示

android:inputType="textMultiLine"

2. 内容垂直居中

android:gravity="center_vertical"

3. 唤起输入法

inputManager.showSoftInput(etPhotoDesc, InputMethodManager.SHOW_FORCED);

4. 隐藏输入法

inputManager.hideSoftInputFromWindow(etPhotoDesc.getWindowToken(), 0);

首先,你需要在Editactivity的布局文件中添加一个ImageView来显示拍摄的照片,并添加一些编辑控件(例如旋转、裁剪等)。 然后,在Editactivity的Java代码中,你需要做以下几个步骤: 1. 获取从上一个Activity传来的拍摄照片的路径,并将其显示在ImageView中。 ```java Intent intent = getIntent(); String photoPath = intent.getStringExtra("photo_path"); Bitmap bitmap = BitmapFactory.decodeFile(photoPath); imageView.setImageBitmap(bitmap); ``` 2. 添加一些编辑功能,例如旋转和裁剪,其中旋转可以使用Matrix来实现,而裁剪可以使用Bitmap.createBitmap()方法。 ```java // 旋转 Matrix matrix = new Matrix(); matrix.postRotate(90); Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); imageView.setImageBitmap(rotatedBitmap); // 裁剪 Bitmap croppedBitmap = Bitmap.createBitmap(bitmap, x, y, width, height); imageView.setImageBitmap(croppedBitmap); ``` 3. 将编辑后的图片保存到公共文件夹中,并记录下该图片的路径和其他相关信息。 ```java // 保存图片 String fileName = "edited_" + System.currentTimeMillis() + ".jpg"; File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), fileName); FileOutputStream fos = new FileOutputStream(file); croppedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); // 记录图片信息 String title = editTextTitle.getText().toString(); String description = editTextDescription.getText().toString(); String editedPhotoPath = file.getAbsolutePath(); // 将图片信息存储到数据库或SharedPreferences中 ``` 完整的Editactivity代码如下所示: ```java public class EditActivity extends AppCompatActivity { private ImageView imageView; private EditText editTextTitle; private EditText editTextDescription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit); imageView = findViewById(R.id.imageView); editTextTitle = findViewById(R.id.editTextTitle); editTextDescription = findViewById(R.id.editTextDescription); Intent intent = getIntent(); String photoPath = intent.getStringExtra("photo_path"); Bitmap bitmap = BitmapFactory.decodeFile(photoPath); imageView.setImageBitmap(bitmap); findViewById(R.id.buttonRotate).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Matrix matrix = new Matrix(); matrix.postRotate(90); Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); imageView.setImageBitmap(rotatedBitmap); } }); findViewById(R.id.buttonCrop).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int x = 100; int y = 100; int width = 200; int height = 200; Bitmap croppedBitmap = Bitmap.createBitmap(bitmap, x, y, width, height); imageView.setImageBitmap(croppedBitmap); } }); findViewById(R.id.buttonSave).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { String fileName = "edited_" + System.currentTimeMillis() + ".jpg"; File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), fileName); FileOutputStream fos = new FileOutputStream(file); croppedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); String title = editTextTitle.getText().toString(); String description = editTextDescription.getText().toString(); String editedPhotoPath = file.getAbsolutePath(); // 将图片信息存储到数据库或SharedPreferences中 } catch (Exception e) { e.printStackTrace(); } } }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值