zoukankan      html  css  js  c++  java
  • Android 4学习(7):用户界面

    参考《Professional Android 4 Development》

    Android UI基本元素

    下面这些概念是Android UI设计的基础,深入学习和理解它们是Android UI设计的基础:

    • ViewView是所有UI元素,包括Layout在内,的父类。
    • View GroupsView的子类,实现了ViewManager接口。一个ViewGroup可以包含多个子View
    • Fragmengts:用于封装UI的基本元素。Fragment有自己的layout配置文件,可以接收用户输入,可以方便地适配不同的屏幕。
    • Activity:用于表达android设备的屏幕,Activity类似于Web开发中的Form表单。ViewUI元素只有绑到Activity中才可以被用户可见。

    Android UI基础

    Android UIActivity的绑定

    最常用的方法是使用setContentView()Layout IDView对象传到Activity中,例如:

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      TextView myTextView = new TextView(this);
      setContentView(myTextView);
      myTextView.setText(“Hello, Android”);
    }

    同样的,使用findViewById()方法可以通过View ID获取View对象:

    TextView myTextView = (TextView)findViewById(R.id.myTextView);

    Layout简介

    LayoutViewGroup的子类,用于描述和管理Android UI的布局。Android自带了很多Layout,常用的包括FrameLayoutLinearLayoutRelativeLayoutGridLayout。关于Layout的更多信息,可以参考这个链接:

    http://developer.android.com/guide/topics/ui/declaring-layout.html#CommonLayouts

    下面是一个Layout示例文件:

    <?xml version=”1.0” encoding=”utf-8”?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:orientation=”vertical”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”>
      <TextView
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:text=”Enter Text Below”
      />
      <EditText
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:text=”Text Goes Here!”
      />
    </LinearLayout>

    wrap_contentView的高(或宽)设置为能包裹控件内容的最小值,而match_parent则使View尽可能地填充父容器。

    Layout优化

    <merge>: 由于Layout可以nest(叠加?)使用,所以有时会出现冗余的Layout。一个常见的例子是使用FrameLayout创建一个单根的配置文件,例如:

    <?xml version=”1.0” encoding=”utf-8”?>
    <FrameLayout
    xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”>
      <ImageView
      android:id=”@+id/myImageView”
      android:layout_width=”match_parent”
      android:layout_height=”match_parent”
      android:src=”@drawable/myimage”
      />
      <TextView
      android:id=”@+id/myTextView”
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:text=”@string/hello”
      android:gravity=”center_horizontal”
      android:layout_gravity=”bottom”
      />
    </FrameLayout>

    若将上面的layout添加到另一个Layout中,则会产生冗余(redundant),更好的解决方式是使用<merge>标签:

    <?xml version=”1.0” encoding=”utf-8”?>
    <merge xmlns:android=”http://schemas.android.com/apk/res/android”>
      <ImageView
      android:id=”@+id/myImageView”
      android:layout_width=”match_parent”
      android:layout_height=”match_parent”
      android:src=”@drawable/myimage”
      />
      <TextView
      android:id=”@+id/myTextView”
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:text=”@string/hello”
      android:gravity=”center_horizontal”
      android:layout_gravity=”bottom”
      />
    </merge>

    当使用<merge>标签的配置文件被嵌入到另一个文件中时,<merge>标签会被删掉。<merge>标签常和<include>一起使用,例如:

    <?xml version=”1.0” encoding=”utf-8”?>
    <LinearLayout
    xmlns:android=”http://schemas.android.com/apk/res/android”
    android:orientation=”vertical”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”>
      <include android:id=”@+id/my_action_bar”
      	layout=”@layout/actionbar”/>
      <include android:id=”@+id/my_image_text_layout”
      	layout=”@layout/image_text_layout”/>
    </LinearLayout>

    使用ViewStub

    ViewStub是View的子类,使用类似Lazy Load的方式加载,从而节省了系统资源。在代码中使用:

    // Find the stub
    View stub = findViewById(R.id. download_progress_panel_stub);
    // Make it visible, causing it to inflate the child layout
    stub.setVisibility(View.VISIBLE);
    // Find the root node of the inflated stub layout
    View downloadProgressPanel = findViewById(R.id.download_progress_panel);

    配置文件:

    <?xml version=”1.0” encoding=”utf-8”?>
    <FrameLayout “xmlns:android=http://schemas.android.com/apk/res/android”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”>
      <ListView
      android:id=”@+id/myListView”
      android:layout_width=”match_parent”
      android:layout_height=”match_parent”
      />
      <ViewStub
      android:id=”@+id/download_progress_panel_stub”
      android:layout=”@layout/progress_overlay_panel”
      android:inflatedId=”@+id/download_progress_panel”
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:layout_gravity=”bottom”
      />
    </FrameLayout>








  • 相关阅读:
    算法手记 之 数据结构(并查集详解)(POJ1703)
    ACM/ICPC 之 数据结构-线段树思想(POJ2182,含O(n^2)插入式解法)
    算法手记 之 数据结构(线段树详解)(POJ 3468)
    ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))
    题目1113:二叉树 (计算某个结点的子结点个数)
    题目1078:二叉树遍历 (已知先序遍历和中序遍历,求后序遍历+未解决)
    题目1107:搬水果(哈夫曼树+快速排序+冒泡排序)
    题目1433:FatMouse (未解决)
    BootStrap入门教程 (四) :JQuery类库插件(模态窗口,滚动监控,标签效果,提示效果,“泡芙”效果,警告区域,折叠效果,旋转木马,输入提示)
    BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)
  • 原文地址:https://www.cnblogs.com/jubincn/p/3381080.html
Copyright © 2011-2022 走看看