Android 4学习(7):用户界面 - 基础
参考《Professional Android 4 Development》
Android UI基本元素
下面这些概念是Android UI设计的基础,深入学习和理解它们是Android UI设计的基础:
- View:View是所有UI元素,包括Layout在内,的父类。
- View Groups:View的子类,实现了ViewManager接口。一个ViewGroup可以包含多个子View。
- Fragmengts:用于封装UI的基本元素。Fragment有自己的layout配置文件,可以接收用户输入,可以方便地适配不同的屏幕。
- Activity:用于表达android设备的屏幕,Activity类似于Web开发中的Form表单。View等UI元素只有绑到Activity中才可以被用户可见。
Android UI基础
Android UI与Activity的绑定
最常用的方法是使用setContentView()将Layout ID或View对象传到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简介
Layout是ViewGroup的子类,用于描述和管理Android UI的布局。Android自带了很多Layout,常用的包括FrameLayout,LinearLayout,RelativeLayout和GridLayout。关于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_content将View的高(或宽)设置为能包裹控件内容的最小值,而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>
最新文章
- Codeforces Round #313 (Div. 1)
- 源码阅读笔记 - 3 std::string 与 Short String Optimization
- TCP/IP详解
- 【hadoop2.6.0】数据丢失问题解决
- 四种方案解决ScrollView嵌套ListView问题(转)
- MSDTC故障排除
- MFC中TRACE
- unity3d快捷键大全
- 给360的六条建议(禁止异地登录,普通用户500G足够用了)
- AndroidCharts为折线图表添加y坐标
- AbstractFactory 模式
- Linux下进程的文件访问权限
- iOS 通知的使用
- Struts2中there is no action mapped for acion name (/XXXXX)
- vim学习、各类插件配置与安装
- JavaScript正则表达式学习笔记(二) - 打怪升级
- softmax函数详解
- 腾讯技术分享:微信小程序音视频技术背后的故事
- 插入排序算法的JAVA实现
- 【做题】CF177G2. Fibonacci Strings——思维+数列