【问题标题】:Creating a professional in app user interface in Android在 Android 中创建专业的应用内用户界面
【发布时间】:2014-12-22 12:28:55
【问题描述】:

目前情况:

我们有不同的用户界面,它们被构建为片段,例如 MenuFragment:

public class MenuFragment extends Fragment implements Hideable, View.OnClickListener {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      this.view = inflater.inflate(R.layout.menu, container, false);
    }

    @Override
    public void hide() {
        view.setVisibility(View.GONE);
    }

    @Override
    public void show() {
        view.setVisibility(View.VISIBLE);
    }
}

可隐藏:

public static interface Hideable {

    void hide();

    void show();
}

状态是枚举:

public enum InterfaceState {
    STANDARD, TWO, THREE ;

    private List<Hideable> visibleElements;

    private void setVisibleElements(Hideable[] visibleElements) {
        this.visibleElements = Arrays.asList(visibleElements);
    }
}

设置它们使用:

InterfaceState.STANDARD.setVisibleElements(new Hideable[] { menuFragment });

menuFragment 在哪里

menuFragment = (MenuFragment) activity.getFragmentManager().findFragmentById(R.id.menu_fragment);

现在我调用 changeToState 更改状态:

public void changeToState(InterfaceState state) {

    List<Hideable> hideList = new LinkedList<>();
    for (Hideable e : this.currentState.visibleElements) {
        if (!state.visibleElements.contains(e))
            hideList.add(e);
            e.hide();

    }

    List<Hideable> showList = new LinkedList<>();
    for (Hideable e : state.visibleElements) {
        if (!this.currentState.visibleElements.contains(e))
            showList.add(e);
            e.show();
    }

系统似乎有问题。有时 UI 元素不会出现。

问题:

  1. 这是实现 UI 的好方法吗?如果没有,有什么更好的方法?
  2. Android 是否为 Visibility="GONE" 的视图分配空间?要使用上层机制,我需要在应用启动时直接定义所有 UI 元素(如 MenuFragment menuFragment)。
  3. 有什么建议/改进吗?

感谢所有读者。

【问题讨论】:

    标签: android user-interface dynamic fragment state


    【解决方案1】:
    1. 我一直提倡约定优于配置规则。 Android 对如何设计用户界面有一些很好的约定,您应该尽可能地使用它们。

    2. 不,它没有。也就是说,View.GONE 使视图表现得好像它不存在一样(从布局的角度来看),而 View.INVISIBLE 分配视图所需的布局空间,但只是使视图不可见。但是,即使使用View.GONE,您仍然可以使用findViewById() 获得视图。

    3. 我认为将信息存储在这样的枚举中是个坏主意。您应该找到适合您的不同方法(将您的列表放入活动、Application 类或类似的东西中。)

    编辑:您可以在Wikipedia 上找到有关该模式的一些有用信息,并且您可以阅读有关 Android 设计指南here 的更多信息。还有一个关于模式here 的不错的文档。您还可以查看 AOSP 的 code style guidelines(或者,好吧,规则),因为它们为如何编写代码提供了一些很好的约定。

    【讨论】:

    • 你能告诉我更多关于你的第一点的信息吗?我在哪里可以找到文献?
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2023-04-09
    • 2013-11-21
    相关资源
    最近更新 更多