首页 > 编程知识 正文

android自定义view的三大流程,android自定义组合控件

时间:2023-05-04 00:29:13 阅读:44052 作者:1473

安卓APP不同的活动一般都有相同的地方。 最典型的是“标题栏”(titlebar ),您只需在每个activity中调用setTitle即可获得完全相同的标题栏,但标题字符之间的差异除外。

系统引入了类似titlebar的功能,但是如果需要像titlebar这样容易复制的bottombar怎么办?

当然,是否需要bottombar是个问题,但我想说的是,如果实际上我想让activity共享部分UI,该怎么办?

直观上,您将创建一个activity子类,在此子类的activity中实现公共UI,将其命名为BaseActivity,最后共享此部分UI的所有activity将继承此BaseActivity。

想法是这样的,那么这个基本活动该怎么写呢? 请注意上面的蓝色词。 如果公共UI是在setContentView中呈现的,那么是否应该处理基本活动子类的唯一UI? 合理地说,在BaseActivity子类中调用和显示setContentView

现在的情况是,我们想得到公共UI,但是不能将公共部分和独自部分的UI分开处理。 解决问题的方法是了解活动布局是如何配置的,以及setContentView在做什么。

另一方面,DecorView是窗口接口整体的最高位View。

二.译码器视图只有一个子元素是线性布局。 表示整个窗口界面,包含通知栏、标题栏、内容显示栏三个区域。

三.线性布局有两个框架布局子元素。

(20 )显示标题栏的画面。 只有一个TextView显示APP应用程序的名称。 也可以自定义标题栏。 加载的自定义标题栏视图将添加到框架布局中。

(21 )在内容栏中显示画面。 setContentView ) )方法加载的布局接口,用于加入其中。

因此,要实现具有activity公共部分的UI,请重写setContentView ()方法。 导入安卓. app.activity;

导入安卓. OS.bundle;

import Android.view.layoutinflater;

导入安卓. view.view;

导入安卓. view.view group;

导入安卓. view.view.onclick listener;

导入安卓. view.view group.layout params;

import Android .构件. linear layout;

import Android .构件. textview;

publicclassbaseactivityextendsactivity {

私密性textview m title tx;

隐私视图m后退;

私有互联网联盟内容中心;

@Override

protectedvoidoncreate (边界维护实例state )。

super.oncreate (savedinstancestate;

initContentView (

initTitleBar (;

}

公共语音导入标题栏

mtitletx=(textview ) findviewbyid ) r.id.titlebar_title;

m back=findviewbyid (r.id.titlebar _ left;

m back.setonclicklistener (newonclicklistener ) )。

@Override

公共语音在线(视图视图) {

finish (;

}

);

}

私有语音识别内容视图(

viewgroupcontent=(viewgroup ) findviewbyid ) Android.r.id.content );

content.removeAllViews (;

内容布局=newlinearlayout (this;

内容布局. set orientation (linear layout.vertical;

内容. add view (内容布局;

layoutinflater.from(this ).inflate ) r.layout.common_title_bar,contentLayout,true );

}

@Override

publicvoidsetcontentview (intlayoutresid ) {

//viewcustomcontentview=layoutinflater.from (this ).inflate ) layoutresid,null );

/*this is the same result with

viewcustomcontentview=layoutinflater.from (this ).inflate ) layoutresid,contentLayout,false );

*/

//content layout.add view (customcontentview,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT );

layoutinflater.from(this ).inflate ) layoutresid,contentLayout,true );

}

@Override

公共语音内容视图(viewcustomcontentview )。

内容布局. add view (customcontentview;

}

@Override

publicvoidsettitle (charsequencetitle ) {

mtitletx.settext(title );

}

}

(查看组) findviewbyid (Android.r.id.content )可以获取乘以一个活动内容部分的线性布局。 将linearlayoutcontentlayout=newlinearlayout (this )添加到此线性布局; 内容布局. set orientation (linear layout.vertical;

内容. add view (内容布局;

作为新的内容区域。

然后,将公用部分的UI添加到新的内容区域。 layoutinflater.from(this ).inflate ) r.layout.common_title_bar,contentLayout,true );

在这里,我们定制了标题栏作为通用部分,但实际上如果是标题栏,就不用那么麻烦,直接使用本机titlebar就可以了。

然后,重写setContentView,将子类的内容区域从原来应该直接乘以android.R.id.content的区域更改为乘以此新内容区域。 代码如下。 @Override

publicvoidsetcontentview (intlayoutresid ) {

layoutinflater.from(this ).inflate ) layoutresid,contentLayout,true );

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。