Android 4学习(7):用户界面 - 基础

来源:互联网 发布:淘宝联盟的客服电话 编辑:程序博客网 时间:2024/04/30 01:45

参考《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中,例如:

@Overridepublic void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);}@Overridepublic 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”?><FrameLayoutxmlns: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”?><LinearLayoutxmlns: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 stubView stub = findViewById(R.id. download_progress_panel_stub);// Make it visible, causing it to inflate the child layoutstub.setVisibility(View.VISIBLE);// Find the root node of the inflated stub layoutView 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>








原创粉丝点击