当前位置: 首页 > 知识库问答 >
问题:

布局设计 标签/值详细信息到标签/值编辑

陆飞鸿
2023-03-14

很长一段时间以来,web开发人员都在开始本地android开发。对于新手来说,我认为这是一个非常常见的问题。

问:我有一个能够编辑详细信息的详细信息屏幕。单击编辑按钮导航到编辑屏幕。除了详细信息屏幕是只读的和每个字段都可编辑的编辑屏幕之外,视图基本相同。

示例布局

我已经阅读了这里的材料设计指南https://Material . io/guidelines/components/text-fields . html # text-fields-layout,它详细介绍了如何设计可编辑的字段。

我也在这里看过TextInputLayout:https://www . androidhive . info/2015/09/Android-material-design-floating-labels-for-edit text/

我可以为“详细信息”屏幕上的每个标签/值字段模拟 TextInputLayout(请参阅示例布局),但是,这似乎需要做很多工作。

我认为理想情况下,重复使用编辑表单字段非常方便,但只需将其标记为“详细信息”屏幕的只读。

我想问问Android大师们实现这一目标的“正确方法”。我宁愿不拼凑出一个解决方案。这个坚果以前肯定被破解过,然而,显然我的谷歌搜索技能不够好,找不到它。

共有3个答案

毋弘光
2023-03-14

我使用它的原因是根据当前视图的类型以编程方式改变元素的输入类型。如果是编辑视图,我只使用默认值。另一方面,我以这种方式更改输入类型。

editText1.setText("Your value text here");

editText1.setInputType(InputType.TYPE_NULL); 

我觉得很简单,安缇很管用

孟嘉歆
2023-03-14

使用<code>编辑文本方法即可在这些状态之间切换。从用户体验的角度来看,更改文本的颜色以及仅在启用模式下显示行是一个好主意。该设计可以通过使用Android的状态资源来实现。

傅正阳
2023-03-14

您可以使用以下说明禁用编辑文本字段:

https://stackoverflow.com/a/33582335/3268303

应用程序通常会共享添加/编辑屏幕,但不一定是查看/编辑屏幕。

添加/编辑共享的示例如下:

https://github . com/Google samples/Android-architecture/tree/todo-MVP/todo app/app/src/main/Java/com/example/Android/architecture/blue prints/todo app/addedittask

public class AddEditTaskPresenter implements AddEditTaskContract.Presenter,
    TasksDataSource.GetTaskCallback {

@NonNull
private final TasksDataSource mTasksRepository;

@NonNull
private final AddEditTaskContract.View mAddTaskView;

@Nullable
private String mTaskId;

private boolean mIsDataMissing;

/**
 * Creates a presenter for the add/edit view.
 *
 * @param taskId ID of the task to edit or null for a new task
 * @param tasksRepository a repository of data for tasks
 * @param addTaskView the add/edit view
 * @param shouldLoadDataFromRepo whether data needs to be loaded or not (for config changes)
 */
public AddEditTaskPresenter(@Nullable String taskId, @NonNull TasksDataSource tasksRepository,
        @NonNull AddEditTaskContract.View addTaskView, boolean shouldLoadDataFromRepo) {
    mTaskId = taskId;
    mTasksRepository = checkNotNull(tasksRepository);
    mAddTaskView = checkNotNull(addTaskView);
    mIsDataMissing = shouldLoadDataFromRepo;

    mAddTaskView.setPresenter(this);
}

@Override
public void start() {
    if (!isNewTask() && mIsDataMissing) {
        populateTask();
    }
}

@Override
public void saveTask(String title, String description) {
    if (isNewTask()) {
        createTask(title, description);
    } else {
        updateTask(title, description);
    }
}

@Override
public void populateTask() {
    if (isNewTask()) {
        throw new RuntimeException("populateTask() was called but task is new.");
    }
    mTasksRepository.getTask(mTaskId, this);
}

@Override
public void onTaskLoaded(Task task) {
    // The view may not be able to handle UI updates anymore
    if (mAddTaskView.isActive()) {
        mAddTaskView.setTitle(task.getTitle());
        mAddTaskView.setDescription(task.getDescription());
    }
    mIsDataMissing = false;
}

@Override
public void onDataNotAvailable() {
    // The view may not be able to handle UI updates anymore
    if (mAddTaskView.isActive()) {
        mAddTaskView.showEmptyTaskError();
    }
}

@Override
public boolean isDataMissing() {
    return mIsDataMissing;
}

private boolean isNewTask() {
    return mTaskId == null;
}

private void createTask(String title, String description) {
    Task newTask = new Task(title, description);
    if (newTask.isEmpty()) {
        mAddTaskView.showEmptyTaskError();
    } else {
        mTasksRepository.saveTask(newTask);
        mAddTaskView.showTasksList();
    }
}

private void updateTask(String title, String description) {
    if (isNewTask()) {
        throw new RuntimeException("updateTask() was called but task is new.");
    }
    mTasksRepository.saveTask(new Task(title, description, mTaskId));
    mAddTaskView.showTasksList(); // After an edit, go back to the list.
}
}
 类似资料:
  • Amazon标识管理iam=Amazon标识管理客户端Builder.standard()。US_EAST_1)。 有人能告诉我怎么做吗? 我试图在下面的程序中列出一个用户的标签,但我得到了下面的错误:我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅维修文档。 公共类ListUserTags{ }

  • memberlist|会员信息列表: 标签名称:memberlist 功能说明:会员信息调用标签 适用范围:全局使用 基本语法: {dede:memberlist orderby='scores' row='20'} <a href="../member/index.php?uid={dede:field.userid /}">{dede:field.userid /}</a> <span>{de

  • infoguide|分类信息搜索: 标签名称:infoguide 功能说明:分类信息的地区与小分类搜索 适用范围:全局使用 基本语法: {dede:infoguide /}

  • 问题内容: 我正在使用创建饼图,我想像在中那样分别设置值和标签。换句话说,我希望图表在饼图中显示的结果与图例中显示的结果不同。有什么办法可以做到这一点? 问题答案: 所述 ArgumentIndex 值对应于 系列名 , 域 和 范围 。您可以为基础中的每个系列或所有系列设置不同的生成器。 附录:对于,值的含义略有不同- 系列名称 , 值 和 百分比 。

  • 问题内容: 我有一个JComboBox,其中的项目是查询的结果。该组合显示了来自查询的所有类别名称,对吗?好的,可以。现在,我需要为每个项目赋予一个值,该值就是产品的ID。 到目前为止,这是我得到的: 正如您在代码中看到的那样,每个项目的“标签”都是它的名称。现在,如何设置每个项目的ID,以便以后进行操作? 谢谢,并尝试轻松回答,我正尽最大努力尝试获取Java东西!哈! 问题答案: 默认情况下使用

  • 我有一个JComboBox,其中项目是查询的结果。组合显示了从查询中获取的所有类别名称,对吗?好的,它起作用了。现在我需要给每个项目一个值,这将是产品的ID。 这是我到目前为止得到的: 正如您在代码中看到的,每个项目的“标签”都是它的名称。现在,如何设置每个项目的ID,以便我可以操作之后? 谢谢,试着轻松回答,我很难得到这个Java的东西!哈!