Android-如何通过XML制定view?

发布于 2016-12-15 01:11:31 字数 144 浏览 1137 评论 2

问题是这样的:我已经设计了一个xml布局,我想把这个布局作为一个自定义view使用,比如可以设置指定的属性等。网上自定义view我看了,需要重写onDraw(),使用canvas来绘制。但是我这个xml布局里面都是控件,如何画?那如果不用自定义view,该如何实现这个功能?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-10-21 04:03:07

第一,可以继承自view,重写view的public MyView(Context context, AttributeSet attrs) 构造方法(如果想在xml中使用,这一步必须)。在这一步中,你可以用LayoutInflate的inflate方法来加载布局。

(扩展)但是有一个需要注意的问题是,如果你想把你的代码封装成jar包来使用的话,inflate的要拿到的xml布局文件的id要么通过反射从你的工程的R.java(R.class)文件来取得(还要在代码混淆中过滤掉这一个),同时把xml文件加到项目中的res文件夹中去。要么就是把xml文件也包含到你的jar包中,然后以字节流来解析。

第二种方法,如果只是自定义了布局,而没有逻辑代码的话,可以不写JAVA代码,而在需要引用到这个xml布局的布局文件用include标签。

瑾兮 2017-03-17 15:17:07

我不清楚楼主这样做的原因什么,但是我自己习惯就是把一些对布局文件的操作写到一个layout里面。activity看起来就不会那么乱了。其实和加载view一样。比如说我现在写一个class Myview 继承LinearLayout;
需要加实现构造。

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

init()就是你加载你说的xml做的事情了,你可以通过
View view = LayoutInflater.from(context).inflate(R.layout.player, null);
得到,后面 addView()就可以了,view你已经得到了要得到里面的控件或执行相应的操作你简单了。
希望对你有帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文