#2020徵文-TV# 3.1.1 文字元件 - Text
文字元件是我們最常用的元件之一,它是用來在UI介面上顯示字串。作為基本元件,有很多擴充套件,常見的有按鈕元件Button、文字編輯元件TextFiled、計時器元件TickTimer,它們都是Text元件的擴充套件(也稱為Text的子類)。
Text(文字元件)是Component類的子類之一,所以它能夠使用Component類的所有公開的屬性和方法(後面章節會詳細介紹該類),Text類自身也提供了一些特殊的屬性、方法、內部類和介面。
1、從原始碼入手
閱讀官方的Java API文件看結構不是很清晰,所以我們在DevEco中檢視原始碼。
/** * 繼承Component類 */ public class Text extends Component {}
這裡我們說一下如何檢視類的繼承關係,由於DevEco是基於開源的社群版,它是沒有Diagrams功能的,我們可以使用第二種方法Navigate --> Type Hierarchy(或者F4)來檢視關係圖。
我們可以點選DevEco介面左側選項卡Structure檢視類中詳細結構,我們可以看到Text自身提供了很多屬性和方法,同時也繼承父類的很多屬性和方法。
/** * 預設建構函式 * 用於使用預設屬性和樣式建立文字例項 * @param context */ public Text(Context context) {} /** * 提供了用於在XML解析後使用指定的屬性集合和預設樣式建立文字例項的建構函式 * @param context * @param attrSet */ public Text(Context context, AttrSet attrSet) {} /** * 提供了用於在XML解析後使用指定的屬性集和指定的樣式建立文字例項的建構函式 * @param context * @param attrSet * @param styleName */ public Text(Context context, AttrSet attrSet, String styleName) {}
我們在程式碼中要給佈局新增元件時,需要先建立元件物件。使用磨人的建構函式建立Text物件,後面兩種建構函式我們這裡不做過多說明,這兩種是用於自定義元件時使用的,後面自定義元件小節中會詳細介紹,期待吧。
//建立Text物件
Text text = new Text(this);
我們可以在Structure中看到Text類有很多屬性,比如設定文字內容的text屬性、設定文字內容顏色的textColor屬性、設定文字內容字型大小的textSize屬性,及設定文字內容字型的font屬性等。也有繼承自父類的屬性,比如設定文字寬度的width屬性、設定文字高度的height屬性等。
//1. 建立Text物件 Text text = new Text(this); //2. 設定文字內容寬高 text.setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT); text.setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT); //3. 設定顯示內容 text.setText("我是在程式碼建立的Text。"); //4. 設定文字大小 text.setTextSize(50, Text.TextSizeType.FP); //5. 設定文字顏色 text.setTextColor(Color.BLUE); //6. 新增元件到佈局中 layout.addComponent(text);
我們可以啟動一下我們的模擬器,檢視是不是在介面中顯示了我們設定的文字內容。
當然元件不僅僅是做顯示使用的,我們還可以在元件上新增監聽事件,來實現互動效果,比如我們點選介面中的文字內容,讓它顯示成其他的內容。
我們現在使用的是程式碼中構建UI介面,當然官方也給我們提供了在XML中宣告佈局,新增元件,在程式碼中設定介面入口只需要指定它在記憶體中的地址。如果我們要對元件進行監聽,需要指定其在記憶體中的地址,然後建立物件完成監聽操作。
在resources --> base目錄下建立layout目錄(目錄下的檔案就是佈局資源),然後在該目錄下建立佈局資原始檔(字尾為.xml),然後在XML中宣告佈局和元件。
<!--xml檔案-->
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<Text
ohos:id="$+id:text_helloworld"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:layout_alignment="horizontal_center"
ohos:text="我是在XML中宣告的Text。"
ohos:text_size="50"
/>
</DirectionalLayout>
//在AbilitySlice的onStart方法中設定介面入口,這裡指定頁面在記憶體中的地址
super.setUIContent(ResourceTable.Layout_ability_text_xml);
2、常用屬性和方法
到這裡我們已經對Text有了大致的瞭解,對兩種編寫佈局的方式也有了大致的瞭解。Text有很多屬性和方法,我們在這裡給大家列出常用的幾個屬性和方法。
<Text
ohos:id="$+id:text_helloworld"
ohos:height="match_content"
ohos:width="match_content"
ohos:text="我是在XML中宣告的Text。"
ohos:text_size="50fp"
/>
<Text
ohos:id="$+id:text_auto_font_size"
ohos:height="match_content"
ohos:width="match_content"
ohos:text="T"
ohos:text_size="50fp"
ohos:auto_font_size="true"/>
<Text
ohos:height="match_content"
ohos:width="match_content"
ohos:text="Text Font"
ohos:text_size="50fp"
ohos:text_font="serif"/>
//2. 自動調整字型大小
Text text_auto_font_size = (Text) findComponentById(ResourceTable.Id_text_auto_font_size);
text_auto_font_size.setClickedListener(l -> {
text_auto_font_size.append("T");
});
獲取原文資源包
作者:IT明
想了解更多內容,請訪問: 51CTO和華為官方戰略合作共建的鴻蒙技術社群https://harmonyos.51cto.com