首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Android自定义View之不得不知道的文件attrs.xml(自定义属性)

Android自定义View之不得不知道的文件attrs.xml(自定义属性)

作者头像
计蒙不吃鱼
发布2025-06-12 15:08:23
发布2025-06-12 15:08:23
1630
举报
文章被收录于专栏:Android开发Android开发

老想着怎么把东西写得能够看懂,才发现会和教是两回事,好了,先看看效果图

先介绍一下Demoview:第一张图红框内是后续的代码

布局文件demoview.xml如下;里面放了一个Textview和ImageView。

这个时候如果在Activity中运用的话,就是一个死的view,那么有没有什么办法,能改变里面的东西呢(改变文字&&设置ImageView是否显示) 这里就不得不提到文章标题中的attrs.xml文件了:如下图

写好后是当然是运用了(其中clickable="true"是设置该控件可以点击,不设置点击变色的背景无效),图片中打错个字,,,,懒得改了

其中demo_style如下:一般都是放的.9图片,为了方便就放个颜色了

最后当然是要将自定义的属性实现其功能了(回到第一步中)

这两句就是取得你在运用中输入的东西了 其中:为了使title相当于TextView中的text:mtv.setText(),将获取的值放入就行了。

那么,那个boolean的值是用来干嘛的呢:控制图片是否显示–> miv.setVisibility(b ? VISIBLE : GONE);如果b为true则显示,为false则不显示。(拓展:了解一下VISIBLE :,GONE,INVISIBLE);

好了现在已经完成了这两个功能了,现在来提一下,点击更换图片

最后在Activity中调用:

DemoView.java代码如下:

代码语言:javascript
复制
public class DeomView extends RelativeLayout {
    private ImageView miv;
    private TextView mtv;
    private boolean yfisshow;

    public DeomView(Context context) {
        this(context, null);
    }

    public DeomView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);

    }

    public DeomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        String title = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "title");
        boolean b = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res-auto", "isshow", true);
        View view = View.inflate(context, R.layout.demoview, null);
        addView(view);
        mtv= (TextView) view.findViewById(R.id.tv_togle);
        miv = (ImageView) view.findViewById(R.id.iv_togle);
        miv.setVisibility(b ? VISIBLE : GONE);
        mtv.setText(title);

    }

    //改变状态
    public void setSetting0n(boolean isshow) {
        yfisshow = isshow;
        miv.setImageResource(isshow ? R.mipmap.on : R.mipmap.off);
    }
    //记录状态
    public boolean issetting() {
        return yfisshow;
    }
    public void setbackeguang() {
        //第一次优化
//        if (issetting()){
//            setSetting0n(false);
//        }else{
//           setSetting0n(true);
//        }
        //第二次优化
//          if (yfisshow){
//              setSetting0n(false);
//          }else{
//              setSetting0n(true);
//          }
        //第三次优化
//        if (yfisshow){
//            setSetting0n(!yfisshow);
//        }else{
//            setSetting0n(!yfisshow);
//        }
        setSetting0n(!yfisshow);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档