学一门新的语言或者技术,一般都 从HelloWorld开始的,我们学习Android也是一样的,
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
在我们的MainActivity中,只要这样简单地调用setContentView就可以将main里面的东西给显示在手机界面上了。
很简单的东西,所以都没有怎么去想过为什么这样调用setContentView就可以了,直到今天。
今天,看了几篇博客,讲到了View是如何绘制的,及setContentView是如何开始的,才发现自己思维太简单了,只想着用而用,没有去思考为什么这么用就可以,缺乏总结。
所以觉得还是得先记录一下自己的理解。
我们都知道,在手机界面上,我们要展现Button,TextView, ImageView等控件,我们必须将其放在一个布局,可以是我们自定义的布局,也可以是Android本身 提供的布局。
但是,这所有的布局,其实最终都是放在一个叫DecorView的最顶层,最外层的FrameLayout上。
Android本身提供了一些布局,比如最常见的R.layout.screen_title,包含有Title (标题栏) 和 Content(内容)的一个布局,如果我们没有设置什么Feature 之类的属性,一般就是用这个layout.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="?android:attr/windowTitleSize"
style="?android:attr/windowTitleBackgroundStyle">
<TextView android:id="@android:id/title"
style="?android:attr/windowTitleStyle"
android:background="@null"
android:fadingEdge="horizontal"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<FrameLayout android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:foregroundGravity="fill_horizontal|top"
android:foreground="?android:attr/windowContentOverlay" />
</LinearLayout>
当我们调用Activity.SetContentView的时候,其实是调用对应Window类(具体是PhoneWindow类)的setConentView,在这个方法中,会去初始化DecorView, 并根据之前设定的Feature属性,选择一个layout(比如R.layout_screen_title),将其添加到DecorView中,并获取其中的content子视图。
如上面所示,其实Title所对应的FrameLayout 就是标题栏, Content 所对应的FrameLayout 就是内容布局。我们自定义的main.xml 其实就是展示在这个Content 上。
大概结构如下:
分享到:
相关推荐
概述 Dialog在Android中是一个很优秀的工具。在使用Dialog时,我们一般都会自定义要显示的内容布局。Dialog自带了三个方法来支持自定义内容布局。 public void setContentView (int layoutResID);...set
对于Android的开发者来说,setContentView大家再熟悉不过了,在我们的Activity中首先就是要用它加载我们的布局,但是应该有一部分人是不知道加载布局的原理,也包括我,今天就从源码的角度分析setContentView加载...
本文实例讲述了Android开发中setContentView和inflate的区别。分享给大家供大家参考,具体如下: 一般用LayoutInflater做一件事:inflate inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化...
是一个很好的一个控件,可以很方便地集成到项目中去,是一个老外写的,很好用 public class SlidingExample extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate...
setContentView(R.layout.activity_main); intent=new Intent(MainActivity.this,pageActivity.class); pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0); calendar=...
setContentView(R.layout.activity_main); initializeViews(); final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get...
ArcToolbarView An Arc view for the android Toolbar or anywhere. Download Gradle: dependencies { ...Declare your Toolbar with ArcToolbarView. ... setContentView(R.layout.activity_arc_toolbar_view)
setContentView(R.layout.activity_main); root = (RelativeLayout) findViewById(R.id.activity_main); messageIcon = (ImageView) findViewById(R.id.message_icon); contactIcon = (ImageView) findViewById...
setContentView(R.layout.main); txtMsg = (TextView) findViewById(R.id.txtMsg); txtExpressnum = (EditText) findViewById(R.id.txtExpressnum); btnSearch = (Button) findViewById(R.id.btnSearch); ...
setContentView(R.layout.main); provinceSpinner=(Spinner)findViewById(R.id.spinner1); citySpinner=(Spinner)findViewById(R.id.spinner2); districtSpinner=(Spinner)findViewById(R.id.spinner3); ...
setContentView(R.layout.main); //放大按钮 zoomIn = (Button) findViewById(R.id.zoom_in); //缩小按钮 zoomOut = (Button) findViewById(R.id.zoom_out); zoomIn.setOnClickListener(this); zoomOut....
setContentView(R.layout.activity_main); vPager = (ViewPager) findViewById(R.id.vPager); adapter = new CustomPagerAdapter(vPager); vPager.setAdapter(adapter); } private class ...
10 setContentView(R.layout.mylayout); 11 二是在AndroidManifest.xml中: 2 android:label="" 3 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> 然而,这两种方法都不能达到我们在视频播放...
setContentView(R.layout.main); list=(ListView)findViewById(R.id.list); new Thread() { @Override public void run() { super.run(); String str = new GetDataFromJson...
1、下载eclipse、sdk工具包,安装jdk环境 检测jdk: Cmd→ java - version ...直接下载adt bundle 集成了eclipse adt 和sdk 然后直接使用eclipse 打开安卓项目 ...右键项目→new→other→android→android icon set
setContentView(R.layout.activity_chat); initViews(); initDatas(); initEvents(); } private void initViews() { mListview = (ListView) findViewById(R.id.listview_chat); mAudioButton = ...
this.setContentView(R.layout.main); InfiniteVerticalPager verticalPager = (InfiniteVerticalPager) this.findViewById(R.id.viewPager); verticalPager.setFactory(this); verticalPager....
setContentView(R.layout.activity_webview); ButterKnife.bind(this); String url = getIntent().getStringExtra(EXTRA_URL); mWebView.setWebViewClient(new WebViewClient()); WebSettings webSettings = ...
// set full screen requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); fl = new ...
她的活动nin biryaşamdöngüsüvar onCreate->活动başladığındailkçalışan方法onCreate方法集setContentView->活动ningörselyapısınıbelirler 她的活动来自AndroidManifest.xml,引用了olmakzorundad...