今天写了一个关于label的显示窗口,代码量也挺简单的,大家一看就明白。不管在哪里我们做软件的都需要用到label

先让我们看一下图先。

  1. package com.smart.widget;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.view.LayoutInflater;
  5. import android.widget.LinearLayout;
  6. import android.widget.TextView;
  7. import com.smart.acitivy.R;
  8. public class LabelEdit extends LinearLayout{
  9. private TextView textView;
  10. private String labelText;
  11. private int labelFontSize;
  12. private String labelPosition;
  13. public LabelEdit(Context context, AttributeSet attrs)
  14. {
  15. super(context, attrs);
  16. //  读取labelText属性的资源ID
  17. int resourceId = attrs.getAttributeResourceValue(null, "labelText", 0);
  18. //  未获得资源ID,继续读取属性值
  19. if (resourceId == 0)
  20. labelText = attrs.getAttributeValue(null, "labelText");
  21. //  从资源文件中获得labelText属性的值
  22. else
  23. labelText = getResources().getString(resourceId);
  24. //  如果按两种方式都未获得labelTex属性的值,表示未设置该属性,抛出异常
  25. if (labelText == null)
  26. {
  27. throw new RuntimeException("必须设置labelText属性.");
  28. }
  29. //  获得labelFontSize属性的资源ID
  30. resourceId = attrs.getAttributeResourceValue(null, "labelFontSize", 0);
  31. //  继续读取labelFontSize属性的值,如果未设置该属性,将属性值设为14
  32. if (resourceId == 0)
  33. labelFontSize = attrs.getAttributeIntValue(null, "labelFontSize",
  34. 14);
  35. //  从资源文件中获得labelFontSize属性的值
  36. else
  37. labelFontSize = getResources().getInteger(resourceId);
  38. //  获得labelPosition属性的资源ID
  39. resourceId = attrs.getAttributeResourceValue(null, "labelPosition", 0);
  40. //  继续读取labelPosition属性的值
  41. if (resourceId == 0)
  42. labelPosition = attrs.getAttributeValue(null, "labelPosition");
  43. //  从资源文件中获得labelPosition属性的值
  44. else
  45. labelPosition = getResources().getString(resourceId);
  46. //  如果未设置labelPosition属性值,将该属性值设为left
  47. if (labelPosition == null)
  48. labelPosition = "left";
  49. String infService = Context.LAYOUT_INFLATER_SERVICE;
  50. LayoutInflater li;
  51. //  获得LAYOUT_INFLATER_SERVICE服务
  52. li = (LayoutInflater) context.getSystemService(infService);
  53. LinearLayout linearLayout = null;
  54. //  根据labelPosition属性的值装载不同的布局文件
  55. if("left".equals(labelPosition))
  56. linearLayout = (LinearLayout)li.inflate(R.layout.labeledittext_horizontal, this);
  57. else if("top".equals(labelPosition))
  58. linearLayout = (LinearLayout)li.inflate(R.layout.labeledittext_vertical, this);
  59. else
  60. throw new RuntimeException("labelPosition属性的值只能是left或top.");
  61. //  下面的代码从相应的布局文件中获得了TextView对象,并根据LabelTextView的属性值设置TextView的属性
  62. textView = (TextView) findViewById(R.id.textview);
  63. textView.setTextSize((float)labelFontSize);
  64. textView.setTextSize(labelFontSize);
  65. textView.setText(labelText);
  66. }
  67. }

我看一下Label类
package com.smart.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.smart.acitivy.R;

public class LabelEdit extends LinearLayout{

private TextView textView;
    private String labelText;
    private int labelFontSize;
    private String labelPosition;

public LabelEdit(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        //  读取labelText属性的资源ID
        int resourceId = attrs.getAttributeResourceValue(null, "labelText", 0);
        //  未获得资源ID,继续读取属性值
        if (resourceId == 0)
            labelText = attrs.getAttributeValue(null, "labelText");
        //  从资源文件中获得labelText属性的值
        else
            labelText = getResources().getString(resourceId);
        //  如果按两种方式都未获得labelTex属性的值,表示未设置该属性,抛出异常
        if (labelText == null)
        {
            throw new RuntimeException("必须设置labelText属性.");
        }
        //  获得labelFontSize属性的资源ID
        resourceId = attrs.getAttributeResourceValue(null, "labelFontSize", 0);
        //  继续读取labelFontSize属性的值,如果未设置该属性,将属性值设为14
        if (resourceId == 0)
            labelFontSize = attrs.getAttributeIntValue(null, "labelFontSize",
                    14);
        //  从资源文件中获得labelFontSize属性的值
        else
            labelFontSize = getResources().getInteger(resourceId);
        //  获得labelPosition属性的资源ID
        resourceId = attrs.getAttributeResourceValue(null, "labelPosition", 0);
        //  继续读取labelPosition属性的值
        if (resourceId == 0)
            labelPosition = attrs.getAttributeValue(null, "labelPosition");
        //  从资源文件中获得labelPosition属性的值
        else
            labelPosition = getResources().getString(resourceId);
        //  如果未设置labelPosition属性值,将该属性值设为left
        if (labelPosition == null)
            labelPosition = "left";
        
        String infService = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li;
        //  获得LAYOUT_INFLATER_SERVICE服务
        li = (LayoutInflater) context.getSystemService(infService);
        LinearLayout linearLayout = null;
        //  根据labelPosition属性的值装载不同的布局文件
        if("left".equals(labelPosition))
            linearLayout = (LinearLayout)li.inflate(R.layout.labeledittext_horizontal, this);
        else if("top".equals(labelPosition))
            linearLayout = (LinearLayout)li.inflate(R.layout.labeledittext_vertical, this);
        else
            
            throw new RuntimeException("labelPosition属性的值只能是left或top.");
        
        //  下面的代码从相应的布局文件中获得了TextView对象,并根据LabelTextView的属性值设置TextView的属性
        
        textView = (TextView) findViewById(R.id.textview);
        textView.setTextSize((float)labelFontSize);            
        textView.setTextSize(labelFontSize);
        textView.setText(labelText);

}

}

本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/495893,如需转载请自行联系原作者

android—label窗口——基础编相关推荐

  1. android登录窗口——基础编

    大家一定在CS/BS的程序有登录窗口,ANDROID也应该是,下面我来做了一个界面欢迎大家参考! main 代码 package net.blogjava.mobile; import android ...

  2. [编转]Android localsocket 的基础和使用实践: 02

    在上一节里,谈到了基础和具体是实践实现: 这一节涉及调试和具体的实践测试: 例子源码在: http://download.csdn.net/detail/goleftgoright/4183596 下 ...

  3. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第二章:Android App 开发基础

    第 2 章 Android App开发基础 本章介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一 样,App工程是怎样的组织结构又是怎样配置的,App开 ...

  4. Android 的窗口管理系统 (View, Canvas, WindowManager)

    Android 的窗口管理系统 (View, Canvas, WindowManager) 我们知道Android 应用程序是怎么创建出来的,大概的流程是 ActivityManagerService ...

  5. Android Studio窗口组成

    Android Studio窗口组成 图2-1 AndroidStudio窗口构成图 1.工具栏:提供各种操作,包括运行.调试.AVD管理等 2.导航栏:提供对项目的导航,以及对打开.修改文件.对项目 ...

  6. Android 之窗口小部件详解--App Widget

    1 App Widget简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widge ...

  7. Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去

    在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...

  8. Android 核心分析之十二Android GEWS窗口管理之基本架构原理

    Android GWES之窗口管理之基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Window的To ...

  9. Android视频开发基础

    Android视频开发基础 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6205 ...

最新文章

  1. springmvc是如何和前端页面联系起来的
  2. Java中的命令设计模式
  3. 【HDU - 5605】 geometry(水,数学题,推公式)
  4. 为什么物联网大数据平台,使用TDengine,可不要redis, kafka, spark等软件?
  5. sublime3使用笔记
  6. 使用Angular Router导航基础
  7. layer弹窗在键盘按回车将反复刷新_人生减负指南——iPad Pro+妙控键盘上手体验...
  8. java ajax_Ajax Java示例
  9. PHP 微信网页授权开发
  10. 【C语言】游戏管理系统简单设计
  11. JAVA实战小项目——图书馆管理系统
  12. 客户关系管理系统(Customer Relationship Management)
  13. git Untracked Files Prevent Rebase
  14. FPGA基础之cyclone_iv资源概述
  15. SQL实时库存数量结存
  16. vue 引入字体文件
  17. easyUI中combobox中idFeild和textFeild的取值方法
  18. 白炽灯的用途和工作原理
  19. C程序设计语言之第1章 导言
  20. 定义一个类,并且在测试类中使用

热门文章

  1. 据说,程序员已成为女生年度最喜欢男友职业Top3?
  2. 中兴同美司法部和解协议获准:罚12亿美元
  3. spring源码分析之spring注解@Aspect是如何工作的?
  4. 解析 Callable Runnable Future 使用和原理
  5. 详解MariaDB数据库的触发器
  6. ES6数组的解构赋值( 中)
  7. TechParty Mini.0
  8. 《c++语言导学》——1.7 常量
  9. 聊聊动画引擎 pop
  10. Confd+Consul 配置文件动态生成