如果layout文件有一个FrameLayout作为根元素,那么FrameLayout和它的子元素都可以正常填充,而后都会被添加到LinearLayout中,LinearLayout是根ViewGroup...通过传入false,我们告诉LayoutInflater我们不暂时还想将View添加到根元素ViewGroup中,意思是我们一会儿再添加。...将Button添加到LinearLayout中还是用一行代码直接将attachToRoot设置为true简便一些。...它也是你在inflate()方法中传入的ViewGroup。FragmentManager会将Fragment的View添加到ViewGroup中,你可不想添加两次。...public abstract class LayoutInflater { .... } 既然是抽象类,那么一定有它的实现,我们知道系统会在ContextImpl中将所有的系统service
)其实子视图父视图可以简单理解成 一个LinearLayout 和 这个LinearLayout里边一个 TextView 的关系 TextView 就算LinearLayout的子视图 child...需要注意的是LayoutParams只是ViewGroup的一个内部类 这里边这个也就是ViewGroup里边这个LayoutParams类是 base class 基类 实际上每个不同的ViewGroup...假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。...可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每个棋子都有一个位置的信息,如这个棋子在4行4列,这里的“4行4列”就是棋子的LayoutParams。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
1.LayoutParams LayoutParams 是ViewGroup的内部静态类 ,ViewGroup的子类(如RelativeLayout,LinearLayout,FrameLayout...)都有其对应的 ViewGroup.LayoutParams的子类,如RelativeLayoutParams LayoutParams 的作用:指定视图View 的高度(height) 和...) findViewById(R.id.linear); // 把 LinearLayout 添加到布局里面 mLinearLayout = new LinearLayout...mLinearLayout.setLayoutParams(layoutParams); mRootView.addView(mLinearLayout); // 第二步,把TextView 添加到...具体如下: MeasureSpec 被封装在View类中的一个内部类里:MeasureSpec类 MeasureSpec类 用1个变量封装了2个数据(size,mode):通过使用二进制,将测量模式(
– 基类LayoutParams(也就是ViewGroup.LayoutParams)仅仅描述了这个View想要的宽度和高度。...– 不同ViewGroup的继承类对应着不同的ViewGroup.LayoutParams的子类。 看着我妙到巅峰的翻译,想必大家都看懂了类LayoutParams是ViewGroup类里的一个静态内部类(看吧,这就证明了LayoutParams是与父控件直接相关的),它的功能很简单,只提供了width和height两个属性,对应于xml...所以肯定在child view添加到父控件的那一刻,child view就应该有LayoutParams了。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
> 这里使用了 标签在布局中添加碎片,然后在标签中通过 android:name 属性来指明要添加的碎片的类名,注意一定要把包名加上。...运行结果: 4.2.2 动态添加碎片 在上一节中我们学习了如何在布局中添加碎片,下面我们来学习如何用代码动态的添加碎片。 新建一个 another_right_fragment 加到返回栈中。...fragmentTransaction.replace(R.id.framelayout,fragment); // 可以接受一个名字用于描述返回栈的状态,一般传入 null 即可 会将这个 Fragment 添加到栈中...那么如何在碎片中调用 Activity 呢?其实每个碎片中都可以通过调用 getActivity() 方法来得到和当前碎片相关联的 Activity 实例。 那么碎片与碎片直接如何通信呢?
Android 中提供了许多适配器的实现类。...定义一个实体类,作为 ListView 适配器的适配类型。...第一个参数就是要加载的布局,第二个参数就是这个布局要加入到这父布局中,第三个参数指定成 false 表示只让我们在父布局中声明的 layout 属性生效,其实就是为了测量一下这个生成的布局,但是不会将这个 View 添加到父布局中...,因为一旦 View 有了父布局后,就不能再添加到 ListView 中了。...最后我们在 Activity 中将 ListView 与我们自己创建的适配器绑定就可以了。
例如解析到一个标签,那么就根据用户设置的一些layout_width、layout_height、id等属性来构造一个TextView对象,然后添加到父控件(ViewGroup类型)中。...viewParent"); } } 可以看到,其实最终加载目标布局的还是inflate()函数,在该函数中将加载目标布局,获取到根元素后,如果mInflatedId不为...然后就是ViewStub从parent中移除、把目标布局的根元素添加到parent中。...ViewStub的inflate()方法,示例如下 : public class MainActivity extends Activity { // 把commLv2设置为类的成员变量...(parser, view, attrs, true); // 将子元素直接添加到merge标签的parent view中 viewGroup.addView
1.2视图容器组件ViewGroup View类有一个非常重要的子类ViewGroup,其为View的一个扩展,可以容纳多个 View,通过ViewGroup类可以创建有联系的子View组成的复合控件...其中常用的是RelativeLayout.LayoutParams、LinearLayout.LayoutParams、ViewGroup.MarginLayoutParams。...继承了 View类,当然也可以当成普通View来使用,但ViewGroup主要还是当成容器类使用。...但由于ViewGroup是一个抽象类,因此实际使用中通常总是使用ViewGroup 的子类来作为容器,例如各种布局管理器。...如果希望在代码中控制UI界面,那么所有的UI组件都将通过new关键字创建出来,然后以合适的方式添加到UI界面即可。
当片段经历暂停或停止状态继而恢复后,如果希望保留此片段的基本组件,则应在实现中将其初始化。 onCreateView() 系统会在片段首次绘制其界面时调用此方法。...Java代码加载Fragment 或者,通过编程方式将片段添加到某个现有 ViewGroup。 在 Activity 运行期间,您可以随时将片段添加到 Activity 布局中。...您只需指定要将片段放入哪个 ViewGroup。 如要在 Activity 中执行片段事务(如添加、移除或替换片段),则必须使用 FragmentTransaction 中的 API。...例如,以下示例说明如何将一个片段替换为另一个片段,以及如何在返回栈中保留先前的状态: // Create new fragment and transaction Fragment newFragment...如果向事务添加多个更改(如又一个 add() 或 remove()),并调用 addToBackStack(),则调用 commit() 前应用的所有更改都将作为单一事务添加到返回栈,并且返回按钮会将它们一并撤消
> 然后新建一个类Fragment1,这个类是继承自Fragment的: public class Fragment1 extends Fragment { @Override public... inflater.inflate(R.layout.fragment1, container, false); } } 我们可以看到,这个类也非常简单,主要就是加载了我们刚刚写好的...动态添加Fragment 你已经学会了如何在XML中使用Fragment,但是这仅仅是Fragment最简单的功能而已。...Fragment真正的强大之处在于可以动态地添加到Activity当中,因此这也是你必须要掌握的东西。当你学会了在程序运行时向Activity添加Fragment,程序的界面就可以定制的更加多样化。...我们通过一个例子来看一下,如何在一个Fragment中去访问另一个Fragment的视图。
> 然后新建一个类Fragment1,这个类是继承自Fragment的: public class Fragment1 extends Fragment { @Override public View...(R.layout.fragment1, container, false); } } 我们可以看到,这个类也非常简单,主要就是加载了我们刚刚写好的fragment1.xml布局文件并返回。...动态添加Fragment 你已经学会了如何在XML中使用Fragment,但是这仅仅是Fragment最简单的功能而已。...Fragment真正的强大之处在于可以动态地添加到Activity当中,因此这也是你必须要掌握的东西。当你学会了在程序运行时向Activity添加Fragment,程序的界面就可以定制的更加多样化。...我们通过一个例子来看一下,如何在一个Fragment中去访问另一个Fragment的视图。
1 布局介绍 1.1 ViewGroup介绍 在 Android 中视图组是集合若干个控件在一起的元素,ViewGroup 有两种用法,一种是像普通的控件一样使用(如网页视图、旋转按钮、...ViewGroup 视图组具有一系列的扩展者:AdapterView、AbsoluteLayout、FrameLayout、LinearLayout、 RelativeLayout、AdapterView...1.2 布局(Layout) 布局(Layout)是各个控件在屏幕上的位置关系,视图组的几个扩展类与布局相关。...FrameLayout、LinearLayout、RelativeLayout、AbsoluteLayout、TableLayout 都是扩展了ViewGroup 的类,因此 这些视图可以用于包含其他的控件...所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。
Activity 确保无论系统从哪个任务启动活动,都只会创建一个活动实例并将其添加到新任务堆栈的顶部,也就是说,该实例启动的其他活动将自动在另一个任务中运行。...好吧,其中有一个LinearLayout和两个FrameLayout。...Android为我们提供了View和ViewGroup子类的集合,其中提供了一些常见的输入控件(如按钮和文本字段)和各种布局模式(如线性或相对布局) 类,提供组件描述和时间处理方法。...ViewGroup:View类的子类,可以有子控件,可以视为容器。Android UI中的控件按照这种分层树结构堆叠。有两种方法可以创建UI布局。
如:当Activity暂停时,它拥有的所有Fragment们都暂停 2....具体使用 由于Fragment作为Activity一部分,所以Fragment的使用一般是添加到Activity中 将Fragment添加到Activity中一般有2种方法: 在Activity...match_parent" android:layout_height="match_parent" android:orientation="vertical" > // 该fragment类定义在包名为..."com.skywang.app"中的FragmentLayoutTest类的内部类ExampleFragment中 <fragment android:name="com.skywang.app.FragmentLayoutTest...ExampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup
与Activity类似,创建Fragment都需要实现一些回调方法,如:onCreate()、onCreateView()、onStart()、onResume()、onPause()、onStop()...重写改方法,返回值View将作为Fragment显示的组件 2 @Override 3 public View onCreateView(LayoutInflater inflater, ViewGroup.../>元素添加Fragment,android:name属性指定Fragment的实现类。...1 LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http:/...fragmentTransaction.addToBackStack(null); 10 // 5、提交事务 11 fragmentTransaction.commit(); 本篇博文仅介绍了Fragment的简单用法,在后续博文中将接着更深入的探讨
虽然您也可以在 LinearLayout 中将 TextView 置于 RecyclerView 之上来模拟 header 的效果,但是这个模拟的 header 在用户滑动屏幕的时候甚至是滑到列表底部的时候仍然会驻留在屏幕上...SPDX-License-Identifier: Apache-2.0 --> LinearLayout xmlns:android="http://schemas.android.com/apk...SPDX-License-Identifier: Apache-2.0 --> override fun onCreateViewHolder(parent: ViewGroup, viewType...ConcatAdapter 在 Activity 类中,创建一个变量代表 HeaderAdapter(),并将其置于 RecyclerView 的 Adapter 之上。...flowersAdapter = FlowersAdapter { flower -> adapterOnClick(flower) } 然后使用 ConcatAdapter 将这两个 adapter 添加到
2022-01-09 Android-30 implementation ‘androidx.appcompat:appcompat:1.2.0’ setContentView并没有将view添加到屏幕上...,只是创建了DecorView,xml添加到DecorView而已。...) */ public void setContentView(@LayoutRes int layoutResID) { // getWindow() 是 抽象类Window对象,其子类为...install AppCompat's"); } } } 1.2) AppCompatActivity#setContentView 调用的是AppCompatDelegateImpl实现类中的...需要使用supportRequestWindowFeature,因为AppCompatActivity类里面会覆盖设置。
一个activity包含一个window,window才是真正的窗口 Window Window是一个抽象类,它真正的实现类是PhoneWindow。...系统窗口,不需要对应任何Activity,如:状态栏,导航栏,普通应用程序不能创建系统窗口,必须要有系统应用权限.(层级2000~2999)。...添加到Window中,同时会创建ViewRootImp对象,并将ViewRootImp对象和DecorView建立关联。...contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT); screen_simple不布局内容 LinearLayout xmlns:...4、DecorView的显示 当DecorView的构造流程完成时此时decorView还没有添加到window中。
View 是通用的 UI 窗体小组件,如:按钮(Button)、文本框(Text field);而 ViewGroup 则是用来定义子视图布局的不可见的容器,如:网格部件(grid)、垂直列表部件(vertical...Android 提供了一系列对应于 View 和 ViewGroup 子类的 XML 标签,以便我们用 XML 创建自己的 UI。 Layouts 是 ViewGroup 的子类。...我们将在接下来的教程中练习如何使用 LinearLayout。 ? 图 1 关于 ViewGroup 对象如何组织布局分支和包含其他 View 对象。...你可以使用 R 类中的对象名称代指资源(如:在指定 android:hint 属性时需要的字符串)。...下一节中将使用这个字符串创建按钮。 下边就是修改好的 res/values/strings.xml: <?xml version="1.0" encoding="utf-8"?
实现View的滑动有很多种方法,如自己在onTouchEvent中处理触摸事件,然后滚动View到相应位置,也可以用google V4包为我们提供的ViewDragHelper来处理触摸事件,我们这里选择后者...这里我们要介绍一个DecorView,它是Window的最顶层View,它含有一个子LinearLayout,代表整个Window,包括通知栏,状态栏,内容显示区域,所以我们activity页面是DecorView...的子View的子View,那么我们能不能直接给DecorView的子View添加到我们的BaseSwipeLayout,再将BaseSwipeLayout添加到DecorView,当然是可以的,而且这种方式...我们定义一个SwipeHelper类,辅助我们进行BaseSwipeLayout插入操作。...decorView = (ViewGroup) activity.getWindow().getDecorView(); ViewGroup decorChild = (ViewGroup
领取专属 10元无门槛券
手把手带您无忧上云