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

先让我们看一下图先。

        
  1. packagecom.smart.widget;
  2. importandroid.content.Context;
  3. importandroid.util.AttributeSet;
  4. importandroid.view.LayoutInflater;
  5. importandroid.widget.LinearLayout;
  6. importandroid.widget.TextView;
  7. importcom.smart.acitivy.R;
  8. publicclassLabelEditextendsLinearLayout{
  9. privateTextViewtextView;
  10. privateStringlabelText;
  11. privateintlabelFontSize;
  12. privateStringlabelPosition;
  13. publicLabelEdit(Contextcontext,AttributeSetattrs)
  14. {
  15. super(context,attrs);
  16. //读取labelText属性的资源ID
  17. intresourceId=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. thrownewRuntimeException("必须设置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. StringinfService=Context.LAYOUT_INFLATER_SERVICE;
  50. LayoutInflaterli;
  51. //获得LAYOUT_INFLATER_SERVICE服务
  52. li=(LayoutInflater)context.getSystemService(infService);
  53. LinearLayoutlinearLayout=null;
  54. //根据labelPosition属性的值装载不同的布局文件
  55. if("left".equals(labelPosition))
  56. linearLayout=(LinearLayout)li.inflate(R.layout.labeledittext_horizontal,this);
  57. elseif("top".equals(labelPosition))
  58. linearLayout=(LinearLayout)li.inflate(R.layout.labeledittext_vertical,this);
  59. else
  60. thrownewRuntimeException("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);

}

}

更多相关文章

  1. Android仿易信界面SlidingMenu左右滑动
  2. QT5.2 Android(安卓)App中使用QML文件
  3. android 设置默认语言 多语言切换
  4. ActionBar(2) 标题和渐变背景设置
  5. android布局知识符文(layout)
  6. android 设置程序安装位置
  7. Android自定义View基础--Paint画笔设置样式
  8. Android动态设置ViewPager是否可手指滑动
  9. Android中使用shape

随机推荐

  1. PHP的数据类型和转化,PHP变量和常量
  2. 刘燕酿制丰胸靠谱吗,有谁用过吗
  3. 刘燕丰胸霜是正规产品吗?刘燕酿制丰胸有
  4. PHP简易计算器&封装函数练习
  5. PHP返回值&参数&变量作用域
  6. 07-16作业
  7. zy0806
  8. PHP基础课第四次作业
  9. 请实例演绎你对回调函数与递归函数的理解
  10. 【前端 · 面试 】HTTP 总结(七)—— HTTP