今天寫了一個關於label的顯示窗口,代碼量也挺簡單的,大家一看就明白。不管在哪裏我們做軟件的都需要用到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);
- }
- }
我看一下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);
}
}