下载Codelab起步应用
https://gitee.com/openharmony/codelabs/tree/master/ComponentCodelab
解压文件,用DevEco Studio打开ComponentCodelab:
点击Tools -> HVD Manager,跳转到登录页面:
点击允许,出现模拟器列表:
点击 “P40” 右边的三角符号,打开模拟器:
点击右上角的三角符号运行:
此时点击上面的文字没有反应,因为我们还没有添加事件响应,接下来修改代码:
布局文件:
tab_list.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_parent" ohos:top_margin="15vp" ohos:orientation="vertical"> <TabList ohos:id="$+id:tab_list" ohos:top_margin="10vp" ohos:tab_margin="24vp" ohos:tab_length="140vp" ohos:text_size="20fp" ohos:height="36vp" ohos:width="match_parent" ohos:layout_alignment="center" ohos:orientation="horizontal" ohos:text_alignment="center" ohos:normal_text_color="#999999" ohos:selected_text_color="#afaafa" ohos:selected_tab_indicator_color="#afaafa" ohos:selected_tab_indicator_height="2vp"/> <Text ohos:id="$+id:tab_content" ohos:width="match_parent" ohos:height="match_parent" ohos:text_alignment="center" ohos:background_element="#70dbdb" ohos:text_color="#2e2e2e" ohos:text_size="16fp"/> </DirectionalLayout>
AbilitySlice文件:
TabListSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.TabList; import ohos.agp.components.Text; public class TabListSlice extends AbilitySlice { private TabList tabList; private Text tabContent; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_tab_list); initComponent(); addTabSelectedListener(); } private void initComponent() { tabContent = (Text) findComponentById(ResourceTable.Id_tab_content); tabList = (TabList) findComponentById(ResourceTable.Id_tab_list); initTab(); } private void initTab() { if (tabList.getTabCount() == 0) { tabList.addTab(createTab("Image")); tabList.addTab(createTab("Video")); tabList.addTab(createTab("Audio")); tabList.setFixedMode(true); tabList.getTabAt(0).select(); tabContent.setText("Select the " + tabList.getTabAt(0).getText()); } } private TabList.Tab createTab(String text) { TabList.Tab tab = tabList.new Tab(this); tab.setText(text); tab.setMinWidth(64); tab.setPadding(12, 0, 12, 0); return tab; } private void addTabSelectedListener() { tabList.addTabSelectedListener(new TabList.TabSelectedListener() { @Override public void onSelected(TabList.Tab tab) { tabContent.setText("Select the " + tab.getText()); } @Override public void onUnselected(TabList.Tab tab) { } @Override public void onReselected(TabList.Tab tab) { } }); } }
布局文件:
news_list_layout.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"> <ListContainer ohos:id="$+id:selector_list" ohos:height="36vp" ohos:width="match_parent" ohos:top_padding="8vp" ohos:orientation="horizontal"/> <Component ohos:height="1vp" ohos:width="match_parent" ohos:background_element="#70dbdb"/> <ListContainer ohos:id="$+id:news_container" ohos:height="match_parent" ohos:width="match_parent"/> </DirectionalLayout>
item_news_type_layout.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="40vp" ohos:width="match_content"> <Text ohos:id="$+id:news_type_text" ohos:height="match_content" ohos:width="match_content" ohos:text_alignment="center" ohos:left_padding="20vp" ohos:right_padding="20vp" ohos:text_color="#55000000" ohos:text_size="16fp"/> </DirectionalLayout>
item_news_layout.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="110vp" ohos:width="match_parent" ohos:orientation="vertical"> <DirectionalLayout ohos:height="109vp" ohos:width="match_parent" ohos:orientation="horizontal" ohos:padding="10vp"> <Text ohos:id="$+id:item_news_title" ohos:height="match_content" ohos:width="0vp" ohos:max_text_lines="3" ohos:multiple_lines="true" ohos:right_padding="20vp" ohos:text_size="18vp" ohos:weight="2"/> <Image ohos:id="$+id:item_news_image" ohos:height="match_content" ohos:width="0vp" ohos:image_src="$media:news_image" ohos:weight="1"/> </DirectionalLayout> <Component ohos:height="1vp" ohos:width="match_parent" ohos:background_element="#70dbdb"/> </DirectionalLayout>
Provider文件:
NewsTypeProvider.java
public class NewsTypeProvider extends BaseItemProvider { private String[] newsTypeList; private Context context; public NewsTypeProvider(String[] listBasicInfo, Context context) { this.newsTypeList = listBasicInfo; this.context = context; } @Override public int getCount() { return newsTypeList == null ? 0 : newsTypeList.length; } @Override public Object getItem(int position) { return Optional.of(this.newsTypeList[position]); } @Override public long getItemId(int position) { return position; } @Override public Component getComponent(int position, Component componentP, ComponentContainer componentContainer) { ViewHolder viewHolder = null; Component component = componentP; if (component == null) { component = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_item_news_type_layout, null, false); viewHolder = new ViewHolder(); Component componentText = component.findComponentById(ResourceTable.Id_news_type_text); if (componentText instanceof Text) { viewHolder.title = (Text) componentText; } component.setTag(viewHolder); } else { if (component.getTag() instanceof ViewHolder) { viewHolder = (ViewHolder) component.getTag(); } } if (viewHolder != null) { viewHolder.title.setText(newsTypeList[position]); } return component; } private static class ViewHolder { Text title; } }
NewsListProvider.java
public class NewsListProvider extends BaseItemProvider { private List<NewsInfo> newsInfoList; private Context context; public NewsListProvider(List<NewsInfo> listBasicInfo, Context context) { this.newsInfoList = listBasicInfo; this.context = context; } @Override public int getCount() { return newsInfoList == null ? 0 : newsInfoList.size(); } @Override public Object getItem(int position) { return Optional.of(this.newsInfoList.get(position)); } @Override public long getItemId(int position) { return position; } @Override public Component getComponent(int position, Component componentP, ComponentContainer componentContainer) { ViewHolder viewHolder = null; Component component = componentP; if (component == null) { component = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_item_news_layout, null, false); viewHolder = new ViewHolder(); Component componentTitle = component.findComponentById(ResourceTable.Id_item_news_title); Component componentImage = component.findComponentById(ResourceTable.Id_item_news_image); if (componentTitle instanceof Text) { viewHolder.title = (Text) componentTitle; } if (componentImage instanceof Image) { viewHolder.image = (Image) componentImage; } component.setTag(viewHolder); } else { if (component.getTag() instanceof ViewHolder) { viewHolder = (ViewHolder) component.getTag(); } } if (viewHolder != null) { viewHolder.title.setText(newsInfoList.get(position).getTitle()); viewHolder.image.setScaleMode(Image.ScaleMode.STRETCH); } return component; } private static class ViewHolder { Text title; Image image; } }
AbilitySlice文件:
ListContainerSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import com.huawei.codelab.provider.NewsListProvider; import com.huawei.codelab.provider.NewsTypeProvider; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Component; import ohos.agp.components.ListContainer; import ohos.agp.components.Text; import ohos.agp.utils.Color; import java.util.ArrayList; import java.util.List; public class ListContainerSlice extends AbilitySlice { private static final float FOCUS_TEXT_SIZE = 1.2f; private static final float UNFOCUS_TEXT_SIZE = 1.0f; private Text selectText; private ListContainer newsListContainer; private ListContainer selectorListContainer; private List<NewsInfo> totalNews; private List<NewsInfo> selectNews; private NewsTypeProvider newsTypeProvider; private NewsListProvider newsListProvider; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_news_list_layout); initView(); initProvider(); setListContainer(); initListener(); } private void initView() { selectorListContainer = (ListContainer) findComponentById(ResourceTable.Id_selector_list); newsListContainer = (ListContainer) findComponentById(ResourceTable.Id_news_container); } public class NewsInfo { private String title; private String type; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getType() { return type; } public void setType(String type) { this.type = type; } } private void initProvider() { String[] listNames = new String[]{"All", "Health", "Finance", "Technology", "Sport", "Internet", "Game"}; newsTypeProvider = new NewsTypeProvider(listNames, this); newsTypeProvider.notifyDataChanged(); String[] newsTypes = new String[]{"Health", "Finance", "Finance", "Technology", "Sport", "Health", "Internet", "Game", "Game", "Internet"}; String[] newsTitles = new String[]{ "Best Enterprise Wi-Fi Network Award of the Wireless Broadband Alliance 2020", "Openness and Cooperation Facilitate Industry Upgrade", "High-voltage super-fast charging is an inevitable trend", "Ten Future Trends of Digital Energy", "Ascend Helps Industry, Learning, and Research Promote AI Industry Development in the National AI Contest", "Enterprise data centers are moving towards autonomous driving network", "One optical fiber lights up a green smart room", "Trust technology, embrace openness, and share the world prosperity brought by technology", "Intelligent Twins Won the Leading Technology Achievement Award at the 7th World Internet Conference", "Maximizing the Value of Wireless Networks and Ushering in the Golden Decade of 5G" }; totalNews = new ArrayList<>(); selectNews = new ArrayList<>(); for (int i = 0; i < newsTypes.length; i++) { NewsInfo newsInfo = new NewsInfo(); newsInfo.setTitle(newsTitles[i]); newsInfo.setType(newsTypes[i]); totalNews.add(newsInfo); } selectNews.addAll(totalNews); newsListProvider = new NewsListProvider(selectNews, this); newsListProvider.notifyDataChanged(); } private void setListContainer() { selectorListContainer.setItemProvider(newsTypeProvider); newsListContainer.setItemProvider(newsListProvider); } private void initListener() { selectorListContainer.setItemClickedListener((listContainer, component, position, listener) -> { setCategorizationFocus(false); Component newsTypeText = component.findComponentById(ResourceTable.Id_news_type_text); if (newsTypeText instanceof Text) { selectText = (Text) newsTypeText; } setCategorizationFocus(true); selectNews.clear(); if (position == 0) { selectNews.addAll(totalNews); } else { String newsType = selectText.getText(); for (NewsInfo newsData : totalNews) { if (newsType.equals(newsData.getType())) { selectNews.add(newsData); } } } updateListView(); }); selectorListContainer.setSelected(true); selectorListContainer.setSelectedItemIndex(0); } private void setCategorizationFocus(boolean isFocus) { if (selectText == null) { return; } if (isFocus) { selectText.setTextColor(new Color(Color.getIntColor("#afaafa"))); selectText.setScaleX(FOCUS_TEXT_SIZE); selectText.setScaleY(FOCUS_TEXT_SIZE); } else { selectText.setTextColor(new Color(Color.getIntColor("#999999"))); selectText.setScaleX(UNFOCUS_TEXT_SIZE); selectText.setScaleY(UNFOCUS_TEXT_SIZE); } } private void updateListView() { newsListProvider.notifyDataChanged(); newsListContainer.invalidate(); newsListContainer.scrollToCenter(0); } }
布局文件:
radio_container.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:alignment="horizontal_center" ohos:orientation="vertical" ohos:left_padding="32vp"> <Text ohos:height="match_content" ohos:width="match_parent" ohos:top_margin="32vp" ohos:text="Question:Which of the following options belong to fruit?" ohos:text_size="20fp" ohos:layout_alignment="left" ohos:multiple_lines="true"/> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:orientation="horizontal" ohos:top_margin="8vp"> <Text ohos:height="match_content" ohos:width="match_content" ohos:text="Your Answer:" ohos:text_size="20fp"/> <Text ohos:id="$+id:answer" ohos:height="match_content" ohos:width="match_content" ohos:text_size="20fp" ohos:left_margin="18vp" ohos:text="[]" ohos:text_color="#FF3333"/> </DirectionalLayout> <RadioContainer ohos:id="$+id:radio_container" ohos:height="match_content" ohos:width="200vp" ohos:layout_alignment="left" ohos:orientation="vertical" ohos:top_margin="16vp" ohos:left_margin="4vp"> <RadioButton ohos:id="$+id:radio_button_1" ohos:height="40vp" ohos:width="match_content" ohos:text="A.Apple" ohos:text_size="20fp" ohos:text_color_on="#FF3333"/> <RadioButton ohos:id="$+id:radio_button_2" ohos:height="40vp" ohos:width="match_content" ohos:text="B.Potato" ohos:text_size="20fp" ohos:text_color_on="#FF3333"/> <RadioButton ohos:id="$+id:radio_button_3" ohos:height="40vp" ohos:width="match_content" ohos:text="C.Pumpkin" ohos:text_size="20fp" ohos:text_color_on="#FF3333"/> <RadioButton ohos:id="$+id:radio_button_4" ohos:height="40vp" ohos:width="match_content" ohos:text="D.Vegetables" ohos:text_size="20fp" ohos:text_color_on="#FF3333"/> </RadioContainer> </DirectionalLayout>
AbilitySlice文件:
RadioContainerSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.colors.RgbPalette; import ohos.agp.components.ComponentState; import ohos.agp.components.RadioButton; import ohos.agp.components.RadioContainer; import ohos.agp.components.Text; import ohos.agp.components.element.ShapeElement; import ohos.agp.components.element.StateElement; public class RadioContainerSlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_radio_container); initComponent(); } private StateElement getStateElement() { ShapeElement elementButtonOn = new ShapeElement(); elementButtonOn.setRgbColor(RgbPalette.RED); elementButtonOn.setShape(ShapeElement.OVAL); ShapeElement elementButtonOff = new ShapeElement(); elementButtonOff.setRgbColor(RgbPalette.DARK_GRAY); elementButtonOff.setShape(ShapeElement.OVAL); StateElement checkElement = new StateElement(); checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_CHECKED}, elementButtonOn); checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementButtonOff); return checkElement; } private void initComponent() { Text answer = (Text) findComponentById(ResourceTable.Id_answer); RadioContainer container = (RadioContainer)findComponentById(ResourceTable.Id_radio_container); int count = container.getChildCount(); for (int i = 0; i < count; i++) { ((RadioButton) container.getComponentAt(i)).setButtonElement(getStateElement()); } container.setMarkChangedListener((radioContainer1, index) -> { answer.setText(String.format("[%c]", (char)('A'+index))); }); } }
布局文件:
checkbox.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" ohos:left_padding="32vp"> <Text ohos:height="match_content" ohos:width="match_parent" ohos:top_margin="32vp" ohos:text="Question:Which of the following are fruits?" ohos:text_size="20fp" ohos:layout_alignment="left" ohos:multiple_lines="true"/> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:orientation="horizontal" ohos:top_margin="8vp"> <Text ohos:height="match_content" ohos:width="match_content" ohos:text="Your Answer:" ohos:text_size="20fp"/> <Text ohos:id="$+id:text_answer" ohos:height="match_content" ohos:width="match_content" ohos:text_size="20fp" ohos:left_margin="18vp" ohos:text="[]" ohos:text_color="#FF3333"/> </DirectionalLayout> <Checkbox ohos:id="$+id:checkbox_1" ohos:top_margin="20vp" ohos:height="match_content" ohos:width="match_content" ohos:text="A Apples" ohos:text_size="20fp" ohos:text_color_on="#FF3333" ohos:text_color_off="#000000"/> <Checkbox ohos:id="$+id:checkbox_2" ohos:top_margin="20vp" ohos:height="match_content" ohos:width="match_content" ohos:text="B Bananas" ohos:text_size="20fp" ohos:text_color_on="#FF3333" ohos:text_color_off="#000000"/> <Checkbox ohos:id="$+id:checkbox_3" ohos:top_margin="20vp" ohos:height="match_content" ohos:width="match_content" ohos:text="C Strawberries" ohos:text_size="20fp" ohos:text_color_on="#FF3333" ohos:text_color_off="#000000" /> <Checkbox ohos:id="$+id:checkbox_4" ohos:top_margin="20vp" ohos:height="match_content" ohos:width="match_content" ohos:text="D Potatoes" ohos:text_size="20fp" ohos:text_color_on="#FF3333" ohos:text_color_off="black" /> </DirectionalLayout>
AbilitySlice文件:
CheckboxSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.colors.RgbPalette; import ohos.agp.components.Checkbox; import ohos.agp.components.ComponentState; import ohos.agp.components.Text; import ohos.agp.components.element.ShapeElement; import ohos.agp.components.element.StateElement; import java.util.HashSet; import java.util.Set; public class CheckboxSlice extends AbilitySlice { private Text answer; private Set<String> selectedSet = new HashSet<>(); @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_checkbox); answer = (Text) findComponentById(ResourceTable.Id_text_answer); initCheckbox(); } private StateElement getStateElement() { ShapeElement elementButtonOn = new ShapeElement(); elementButtonOn.setRgbColor(RgbPalette.RED); elementButtonOn.setShape(ShapeElement.OVAL); ShapeElement elementButtonOff = new ShapeElement(); elementButtonOff.setRgbColor(RgbPalette.WHITE); elementButtonOff.setShape(ShapeElement.OVAL); StateElement checkElement = new StateElement(); checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_CHECKED}, elementButtonOn); checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementButtonOff); return checkElement; } private void setCheckedStateChangedListener(Checkbox checkbox, String CheckValue) { checkbox.setCheckedStateChangedListener((view, state) -> { if (state) { selectedSet.add(CheckValue); }else { selectedSet.remove(CheckValue); } showAnswer(); }); } private void showAnswer() { String select = selectedSet.toString(); answer.setText(select); } private void initCheckbox() { Checkbox checkbox1 = (Checkbox) findComponentById(ResourceTable.Id_checkbox_1); checkbox1.setButtonElement(getStateElement()); setCheckedStateChangedListener(checkbox1, "A"); if (checkbox1.isChecked()) { selectedSet.add("A"); } Checkbox checkbox2 = (Checkbox) findComponentById(ResourceTable.Id_checkbox_2); checkbox2.setButtonElement(getStateElement()); setCheckedStateChangedListener(checkbox2, "B"); if (checkbox2.isChecked()) { selectedSet.add("B"); } Checkbox checkbox3 = (Checkbox) findComponentById(ResourceTable.Id_checkbox_3); checkbox3.setButtonElement(getStateElement()); setCheckedStateChangedListener(checkbox3, "C"); if (checkbox3.isChecked()) { selectedSet.add("C"); } Checkbox checkbox4 = (Checkbox) findComponentById(ResourceTable.Id_checkbox_4); checkbox4.setButtonElement(getStateElement()); setCheckedStateChangedListener(checkbox4, "D"); if (checkbox4.isChecked()) { selectedSet.add("D"); } } }
布局文件:
data_picker.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_parent" ohos:orientation="vertical"> <DatePicker ohos:id="$+id:date_pick" ohos:height="150vp" ohos:width="300vp" ohos:background_element="#EDEDED" ohos:top_margin="13vp" ohos:layout_alignment="horizontal_center" ohos:selected_normal_text_margin_ratio="6" ohos:selected_text_size="16vp" ohos:selected_text_color="#0000FF" ohos:operated_text_color="#0000FF" ohos:normal_text_size="13vp" ohos:top_line_element="#9370DB" ohos:bottom_line_element="#9370DB" ohos:shader_color="#00CED1"> </DatePicker> <DirectionalLayout ohos:width="match_content" ohos:height="35vp" ohos:top_margin="13vp" ohos:layout_alignment="horizontal_center" ohos:orientation="horizontal"> <Text ohos:width="match_content" ohos:height="match_parent" ohos:text_size="15vp" ohos:padding="4vp" ohos:text="Currently selected date: "/> <Text ohos:id="$+id:text_date" ohos:height="match_content" ohos:width="100vp" ohos:background_element="$graphic:button_element" ohos:hint="date" ohos:left_margin="13vp" ohos:padding="4vp" ohos:text_size="15vp"> </Text> </DirectionalLayout> </DirectionalLayout>
AbilitySlice文件:
DatePickerSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.DatePicker; import ohos.agp.components.Text; public class DatePickerSlice extends AbilitySlice { private DatePicker datePicker; private Text textDate; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_data_picker); initComponent(); initDate(); setValueChangedListener(); } private void initComponent() { datePicker = (DatePicker) findComponentById(ResourceTable.Id_date_pick); textDate = (Text) findComponentById(ResourceTable.Id_text_date); } private void initDate() { int day = datePicker.getDayOfMonth(); int month = datePicker.getMonth(); int year = datePicker.getYear(); textDate.setText(String.format("%02d/%02d/%4d", day, month, year)); } private void setValueChangedListener(){ datePicker.setValueChangedListener( new DatePicker.ValueChangedListener() { @Override public void onValueChanged(DatePicker picker, int year, int monthOfYear, int dayOfMonth) { textDate.setText(String.format("%02d/%02d/%4d", dayOfMonth, monthOfYear, year)); } } ); } }
布局文件:
directional_layout.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_parent" ohos:top_margin="13fp" ohos:orientation="vertical"> <Text ohos:width="match_content" ohos:height="match_content" ohos:text="Lantern riddles of Mid Autumn Festival" ohos:text_alignment="center" ohos:multiple_lines="true" ohos:layout_alignment="center" ohos:top_margin="20vp" ohos:text_size="23vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="1.what man cannot live in a house?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="2.What never asks questions but gets a lot of answers?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="3.A mouse has a large pocket.What is it?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="4.What can hear you without ears and can answer you without a mouth?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="5.What is higher without a head than with a head?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="6.What is dark but made by light?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="7.What person tried to make you smile most of the time?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="8.You have it.You read it.There're some pictures in it?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="9.What animal has a head like a cat, eyes like a cat, a tail like a cat, but isn't a cat? " ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> <Text ohos:width="match_parent" ohos:height="match_content" ohos:text="10.What has hands but no feet, a face but no eyes, tells but not talk?" ohos:multiple_lines="true" ohos:left_margin="20vp" ohos:top_margin="20vp" ohos:text_size="18vp"/> </DirectionalLayout>
AbilitySlice文件:
DirectionalLayoutSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; public class DirectionalLayoutSlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_directional_layout); } }
布局文件:
dependent_layout.xml
<?xml version="1.0" encoding="utf-8"?> <DependentLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:id="$+id:parent_layout" ohos:height="match_parent" ohos:width="match_parent"> <ScrollView ohos:height="match_parent" ohos:width="match_parent"> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:bottom_padding="70vp" ohos:orientation="vertical"> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:alignment="vertical_center" ohos:orientation="horizontal" ohos:background_element="#FFFFFF"> <Text ohos:id="$+id:title_icon" ohos:height="match_content" ohos:width="match_content" ohos:text="NewsDemo" ohos:left_margin="20vp" ohos:text_size="20fp" ohos:weight="1"/> <Text ohos:id="$+id:read_num" ohos:height="match_content" ohos:width="match_content" ohos:right_margin="10vp" ohos:text="reads:10" ohos:text_size="10fp"/> <Text ohos:id="$+id:likes_num" ohos:height="match_content" ohos:width="match_content" ohos:right_margin="20vp" ohos:text="likes:9" ohos:text_size="10fp"/> </DirectionalLayout> <Text ohos:id="$+id:title_text" ohos:height="match_content" ohos:width="match_parent" ohos:left_margin="20vp" ohos:max_text_lines="4" ohos:multiple_lines="true" ohos:right_margin="20vp" ohos:text="Ten Future Trends of Digital Energy" ohos:text_color="#000000" ohos:text_size="18fp" ohos:top_margin="10vp"/> <Text ohos:id="$+id:title_content" ohos:height="match_content" ohos:width="match_parent" ohos:left_margin="20vp" ohos:multiple_lines="true" ohos:right_margin="20vp" ohos:text="Energy digitalization is an inevitable trend. Innovative integration of digital and energy technologies enables end-to-end visual, manageable, and controllable intelligent management of energy infrastructure, improving energy efficiency." ohos:text_alignment="center_horizontal" ohos:text_color="#708090" ohos:text_size="16fp" ohos:top_margin="5vp"/> <DirectionalLayout ohos:height="match_content" ohos:width="match_parent" ohos:orientation="horizontal"> <Image ohos:id="$+id:image_content1" ohos:height="100vp" ohos:width="0vp" ohos:image_src="$media:news_image_left" ohos:layout_alignment="center" ohos:left_margin="20vp" ohos:right_margin="2vp" ohos:top_margin="10vp" ohos:weight="1"/> <Image ohos:id="$+id:image_content2" ohos:height="100vp" ohos:width="0vp" ohos:image_src="$media:news_image" ohos:layout_alignment="center" ohos:left_margin="10vp" ohos:right_margin="2vp" ohos:top_margin="10vp" ohos:weight="1"/> <Image ohos:id="$+id:image_content3" ohos:height="100vp" ohos:width="0vp" ohos:image_src="$media:news_image_right" ohos:layout_alignment="center" ohos:left_margin="2vp" ohos:right_margin="20vp" ohos:top_margin="10vp" ohos:weight="1"/> </DirectionalLayout> </DirectionalLayout> </ScrollView> <Component ohos:height="0.5vp" ohos:width="match_parent" ohos:above="$+id:bottom_layout" ohos:background_element="#EAEAEC"/> <DirectionalLayout ohos:id="$+id:bottom_layout" ohos:height="50vp" ohos:width="match_parent" ohos:align_parent_bottom="true" ohos:alignment="vertical_center" ohos:background_element="#ffffff" ohos:left_padding="20vp" ohos:orientation="horizontal" ohos:right_padding="20vp"> <TextField ohos:height="30vp" ohos:width="160vp" ohos:background_element="$graphic:corner_bg_comment" ohos:hint="Enter a comment." ohos:left_padding="5vp" ohos:right_padding="10vp" ohos:text_alignment="vertical_center" ohos:text_size="15vp"/> <Image ohos:height="20vp" ohos:width="20vp" ohos:scale_mode="stretch" ohos:image_src="$media:message_icon" ohos:left_margin="20vp"/> <Image ohos:height="20vp" ohos:width="20vp" ohos:scale_mode="stretch" ohos:image_src="$media:collect_icon" ohos:left_margin="20vp"/> <Image ohos:height="20vp" ohos:width="20vp" ohos:scale_mode="stretch" ohos:image_src="$media:like_icon" ohos:left_margin="20vp"/> <Image ohos:height="20vp" ohos:width="20vp" ohos:scale_mode="stretch" ohos:image_src="$media:share_icon" ohos:left_margin="20vp"/> </DirectionalLayout> </DependentLayout>
AbilitySlice文件:
DependentLayoutSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; public class DependentLayoutSlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_dependent_layout); } }
布局文件:
stack_layout.xml
<?xml version="1.0" encoding="utf-8"?> <StackLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:id="$+id:stack_layout" ohos:height="match_parent" ohos:width="match_parent"> <Text ohos:id="$+id:text_blue" ohos:text_alignment="bottom|horizontal_center" ohos:text_size="24fp" ohos:text="Layer1" ohos:height="400vp" ohos:width="match_parent" ohos:background_element="#70dbdb" /> <Text ohos:id="$+id:text_light_purple" ohos:text_alignment="bottom|horizontal_center" ohos:text_size="24fp" ohos:text="Layer2" ohos:height="300vp" ohos:width="300vp" ohos:background_element="#EED2EE" /> <Text ohos:id="$+id:text_green" ohos:text_alignment="center" ohos:text_size="24fp" ohos:text="Layer3" ohos:height="200vp" ohos:width="200vp" ohos:background_element="#B4EEB4" /> </StackLayout>
AbilitySlice文件:
StackLayoutSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; public class StackLayoutSlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_stack_layout); } }
布局文件:
table_layout.xml
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_parent" ohos:background_element="#EDEDED" ohos:layout_alignment="center" ohos:orientation="vertical"> <Text ohos:id="$+id:info" ohos:width="match_content" ohos:height="30vp" ohos:text_size="20fp" ohos:top_margin="20vp" ohos:text="" ohos:text_alignment="center" ohos:layout_alignment="horizontal_center"/> <TableLayout ohos:id="$+id:table" ohos:width="700" ohos:height="match_content" ohos:orientation="horizontal" ohos:layout_alignment="horizontal_center" ohos:top_margin="10" ohos:column_count="3"> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="1" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="2" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="3" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="4" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="5" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="6" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="7" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="8" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="9" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="*" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="0" ohos:text_alignment="center"/> <Button ohos:width="50vp" ohos:height="50vp" ohos:text_size="15fp" ohos:left_margin="20vp" ohos:top_margin="15vp" ohos:background_element="$graphic:circle_button_element" ohos:text="#" ohos:text_alignment="center"/> </TableLayout> <DirectionalLayout ohos:width="match_content" ohos:height="match_content" ohos:top_margin="20vp" ohos:layout_alignment="horizontal_center" ohos:orientation="horizontal"> <Button ohos:id="$+id:call" ohos:width="60vp" ohos:height="35vp" ohos:text_size="15fp" ohos:text="CALL" ohos:background_element="$graphic:button_element" ohos:text_alignment="center"/> <Button ohos:id="$+id:clear" ohos:width="60vp" ohos:height="35vp" ohos:text_size="15fp" ohos:text="CLEAR" ohos:background_element="$graphic:button_element" ohos:left_margin="10vp" ohos:text_alignment="center"/> </DirectionalLayout> </DirectionalLayout>
AbilitySlice文件:
TableLayoutSlice.java
package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Button; import ohos.agp.components.Component; import ohos.agp.components.TableLayout; import ohos.agp.components.Text; import ohos.agp.utils.LayoutAlignment; import ohos.agp.window.dialog.ToastDialog; public class TableLayoutSlice extends AbilitySlice { private Text info; private Button call; private Button clear; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_table_layout); initComponent(); setClickedListener(); } private void initComponent() { info = (Text)findComponentById(ResourceTable.Id_info); call = (Button)findComponentById(ResourceTable.Id_call); clear = (Button)findComponentById(ResourceTable.Id_clear); } private void setClickedListener() { call.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { String toastInfo = info.getText(); if (toastInfo == null || toastInfo.isEmpty()) { toastInfo = "Please enter the number!"; } else { toastInfo = "Call " + info.getText(); } new ToastDialog(getContext()) .setText(toastInfo) .setAlignment(LayoutAlignment.CENTER) .setOffset(0,180) .show(); } }); clear.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { info.setText(""); } }); TableLayout table = (TableLayout)findComponentById(ResourceTable.Id_table); int childNum = table.getChildCount(); for (int index = 0; index < childNum; index++) { Button child = (Button)(table.getComponentAt(index)); child.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { if (component instanceof Button) { Button button = (Button)component; info.setText(info.getText() + button.getText()); } } }); } } }
关联主页跳转:
MainAbilitySlice.java
/* * Copyright (c) 2021 Huawei Device Co., Ltd. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.huawei.codelab.slice; import com.huawei.codelab.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Component; import ohos.agp.window.dialog.ToastDialog; /** * The main AbilitySlice. * * @since 2021-01-11 */ public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); setClickedListener(this, findComponentById(ResourceTable.Id_tab_list), findComponentById(ResourceTable.Id_list_container), findComponentById(ResourceTable.Id_radio_container), findComponentById(ResourceTable.Id_checkbox), findComponentById(ResourceTable.Id_date_picker), findComponentById(ResourceTable.Id_directional_layout), findComponentById(ResourceTable.Id_dependent_layout), findComponentById(ResourceTable.Id_stack_layout), findComponentById(ResourceTable.Id_table_layout) ); } private void setClickedListener(Component.ClickedListener clickListener, Component...components) { for (Component component : components) { if (component == null) { continue; } component.setClickedListener(clickListener); } } @Override public void onClick(Component component) { String className = ""; switch (component.getId()) { case ResourceTable.Id_tab_list: className = "com.huawei.codelab.slice.TabListSlice"; break; case ResourceTable.Id_list_container: className = "com.huawei.codelab.slice.ListContainerSlice"; break; case ResourceTable.Id_radio_container: className = "com.huawei.codelab.slice.RadioContainerSlice"; break; case ResourceTable.Id_checkbox: className = "com.huawei.codelab.slice.CheckboxSlice"; break; case ResourceTable.Id_date_picker: className = "com.huawei.codelab.slice.DatePickerSlice"; break; case ResourceTable.Id_directional_layout: className = "com.huawei.codelab.slice.DirectionalLayoutSlice"; break; case ResourceTable.Id_dependent_layout: className = "com.huawei.codelab.slice.DependentLayoutSlice"; break; case ResourceTable.Id_stack_layout: className = "com.huawei.codelab.slice.StackLayoutSlice"; break; case ResourceTable.Id_table_layout: className = "com.huawei.codelab.slice.TableLayoutSlice"; break; default: break; } abilitySliceJump(className); } private void abilitySliceJump(String name) { if (name == null || "".equals(name)) { return; } try { Class abilitySliceClass = Class.forName(name); Object object = abilitySliceClass.newInstance(); if (object instanceof AbilitySlice) { present((AbilitySlice) object, new Intent()); } } catch (Exception e) { new ToastDialog(getContext()) .setText("Error!") .show(); } } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } }
代码修改完成,再次运行程序:
现在点击文字会跳转到对应的页面:
如点击RadioContainer:
点击返回可回到主界面,再点击ListContainer: