基于鸿蒙操作系统的鸿蒙信息搜索引擎
基于鸿蒙操作系统的鸿蒙信息搜索引擎
【中原工】
创建项目
登录华为账号 选择p40虚拟机
Ui设计
广告页面
页面代码
搜索页面
代码展示
主页ui页面
页面代码
我的页面ui页面
页面代码
代码功能的实现
建立导航 实现fraction之间的切换
导航Navbar实现类
package com.qiaoxg.harmony.component.bottomNav;import com.qiaoxg.harmony.ResourceTable;import ohos.agp.components.*;import ohos.agp.utils.Color;import ohos.app.Context;import ohos.hiviewdfx.HiLog;import ohos.hiviewdfx.HiLogLabel;import java.util.ArrayList;import java.util.List;import static ohos.agp.utils.LayoutAlignment.CENTER;public class MainBottomNavBar extends DirectionalLayout { private static final HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP, 0x00201, MainBottomNavBar.class.getSimpleName()); private final Context mContext; private OnNavClickListener mClickListener; //导航Tab private List mItemList = new ArrayList(); private final List mNavComponentList = new ArrayList(); //title字体大小 private final int NAV_TEXT_SIZE = 12; //icon的大小 private final int NAV_ICON_SIZE = 25; //当前选中的导航位置 private int mCurrPosition = 0; public MainBottomNavBar(Context context) { this(context, null); } public MainBottomNavBar(Context context, AttrSet attrSet) { super(context, attrSet); this.mContext = context; initComponent(); } private void initComponent() { setOrientation(HORIZONTAL); for (int i = 0; i < mItemList.size(); i++) { DirectionalLayout parentLayout = new DirectionalLayout(mContext); parentLayout.setTag(i); parentLayout.setOrientation(VERTICAL); parentLayout.setAlignment(CENTER); LayoutConfig layoutConfig = new LayoutConfig(); layoutConfig.weight = 1; layoutConfig.height = LayoutConfig.MATCH_PARENT; parentLayout.setLayoutConfig(layoutConfig); parentLayout.setClickable(true); parentLayout.setClickedListener(new ClickedListener() { @Override public void onClick(Component component) { int tag = (int) component.getTag();// showToast(mItemList.get(tag).getTitle());// HiLog.info(logLabel, String.format("点击了:%s", mItemList.get(tag).getTitle())); updateNavStyle(tag); if (mClickListener != null) { mClickListener.onClick(tag); } } }); Image iconIv = new Image(mContext); iconIv.setHeight(AttrHelper.vp2px(NAV_ICON_SIZE, mContext)); iconIv.setWidth(AttrHelper.vp2px(NAV_ICON_SIZE, mContext)); iconIv.setScaleMode(Image.ScaleMode.ZOOM_CENTER); iconIv.setPixelMap(mItemList.get(i).getIconId()); parentLayout.addComponent(iconIv); Text titleTv = new Text(mContext); titleTv.setTextSize(AttrHelper.fp2px(NAV_TEXT_SIZE, mContext)); Color color = new Color(mContext.getColor(ResourceTable.Color_color_nav_title)); titleTv.setTextColor(color); titleTv.setText(mItemList.get(i).getTitle()); parentLayout.addComponent(titleTv); addComponent(parentLayout); }// updateNavStyle(mCurrSelectedNavPosition); } private void updateNavStyle(int currPosition) {// int totalSize = getChildCount();// for (int i = 0; i mItemList.size()) { position = mItemList.size() - 1; } this.mCurrPosition = position; updateNavStyle(mCurrPosition); } public List getItemList() { return mItemList; } public void setItemList(List mItemList) { this.mItemList = mItemList; initComponent(); } public void setOnClickListener(OnNavClickListener listener) { this.mClickListener = listener; } public interface OnNavClickListener { void onClick(int position); void onLongClick(int position); }}
分别建立主页 我的页面 搜索 fraction页面
Discover页面代码展示
package com.qiaoxg.harmony.component;import com.qiaoxg.harmony.ResourceTable;import com.qiaoxg.harmony.component.provider.DiscoverProvider;import ohos.aafwk.ability.fraction.Fraction;import ohos.aafwk.content.Intent;import ohos.agp.components.Component;import ohos.agp.components.ComponentContainer;import ohos.agp.components.LayoutScatter;import ohos.agp.components.ListContainer;import ohos.agp.window.dialog.ToastDialog;import ohos.agp.window.service.WindowManager;public class DiscoverFraction extends Fraction { private Component mRootComponent; @Override protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) { int color = getFractionAbility().getColor(ResourceTable.Color_color_gray); WindowManager.getInstance().getTopWindow().get().setStatusBarColor(color); // 设置状态栏颜色 if (mRootComponent == null) { mRootComponent = scatter.parse(ResourceTable.Layout_ability_main_discover, null, false); ListContainer listContainer = (ListContainer) mRootComponent.findComponentById(ResourceTable.Id_discover_listContainer); listContainer.setItemProvider(new DiscoverProvider(getContext())); listContainer.setItemClickedListener((listContainer1, component, i, l) -> { DiscoverProvider.DiscoverItemHolder holder = (DiscoverProvider.DiscoverItemHolder) component.getTag(); new ToastDialog(component.getContext()).setText(holder.bean.getContent().substring(0,5)).show(); }); } return mRootComponent; } @Override protected void onStart(Intent intent) { super.onStart(intent); } @Override protected void onActive() { super.onActive(); } @Override protected void onInactive() { super.onInactive(); } @Override protected void onBackground() { super.onBackground(); } @Override protected void onComponentDetach() { super.onComponentDetach(); } @Override protected void onForeground(Intent intent) { super.onForeground(intent); } @Override protected void onStop() { super.onStop(); }}
home页面代码展示
package com.qiaoxg.harmony.component;import com.qiaoxg.harmony.ResourceTable;import com.qiaoxg.harmony.bean.HomeBean;import com.qiaoxg.harmony.component.provider.HomeProvider;import ohos.aafwk.ability.fraction.Fraction;import ohos.aafwk.content.Intent;import ohos.agp.components.*;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;import ohos.agp.window.service.WindowManager;import java.util.ArrayList;import java.util.List;public class HomeFraction extends Fraction { private Component mRootComponent; private ListContainer mListContainer; @Override protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) { int color = getFractionAbility().getColor(ResourceTable.Color_color_background); WindowManager.getInstance().getTopWindow().get().setStatusBarColor(color); // 设置状态栏颜色 if (mRootComponent == null) { mRootComponent = scatter.parse(ResourceTable.Layout_ability_main_home, null, false); mListContainer = (ListContainer) mRootComponent.findComponentById(ResourceTable.Id_home_listContainer); } return mRootComponent; } @Override protected void onStart(Intent intent) { super.onStart(intent); List list = getData(); HomeProvider provider = new HomeProvider(list); mListContainer.setItemProvider(provider); mListContainer.setItemLongClickedListener((container, component, position, id) -> { HomeBean item = (HomeBean) mListContainer.getItemProvider().getItem(position); new ToastDialog(container.getContext()) .setText("you long clicked:" + item.getTitle()) .setAlignment(LayoutAlignment.CENTER) .show(); return false; }); mListContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { @Override public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { HomeBean item = (HomeBean) mListContainer.getItemProvider().getItem(i); new ToastDialog(component.getContext()) .setText("you clicked:" + item.getTitle()) .setAlignment(LayoutAlignment.CENTER) .show(); } }); } @Override protected void onActive() { super.onActive(); } @Override protected void onInactive() { super.onInactive(); } @Override protected void onBackground() { super.onBackground(); } @Override protected void onComponentDetach() { super.onComponentDetach(); } @Override protected void onForeground(Intent intent) { super.onForeground(intent); } @Override protected void onStop() { super.onStop(); } private List getData() { List list = new ArrayList(); for (int i = 0; i < 20; i++) { HomeBean bean = new HomeBean(); bean.setTitle((i + 1) + " Harmony OS正式发布"); bean.setContent("2021年6月2日晚,华为发布了鸿蒙操作系统,是面向全场景的分布式操作系统"); bean.setDateTime("2021-06-02"); list.add(bean); } return list; }}
mine页面代码展示
package com.qiaoxg.harmony.component;import com.qiaoxg.harmony.ResourceTable;import com.qiaoxg.harmony.component.bottomNav.MainBottomNavBar;import ohos.aafwk.ability.fraction.Fraction;import ohos.aafwk.content.Intent;import ohos.agp.components.*;import ohos.agp.window.service.WindowManager;import ohos.hiviewdfx.HiLog;import ohos.hiviewdfx.HiLogLabel;public class MineFraction extends Fraction { private static final HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP, 0x00201, MineFraction.class.getSimpleName()); private Component mRootComponent; private ScrollView mScrollView; private Component mTitleView; private float mCurrAlpha = 0; private float mScrollLength = AttrHelper.vp2px(70, this); @Override protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) { int color = getFractionAbility().getColor(ResourceTable.Color_color_gray); WindowManager.getInstance().getTopWindow().get().setStatusBarColor(color); // 设置状态栏颜色 if (mRootComponent == null) { mRootComponent = scatter.parse(ResourceTable.Layout_ability_main_mine, null, false); mTitleView = mRootComponent.findComponentById(ResourceTable.Id_mine_title); mScrollView = (ScrollView) mRootComponent.findComponentById(ResourceTable.Id_mine_scrollView); mScrollView.addScrolledListener(new Component.ScrolledListener() { @Override public void onContentScrolled(Component component, int i, int i1, int i2, int i3) { if (i1 > 0) { mCurrAlpha = i1 / mScrollLength; HiLog.error(logLabel, "i1 is : " + i1 + " , and alpha is :" + mCurrAlpha); if (mCurrAlpha 1) { mCurrAlpha = 1; } mTitleView.setAlpha(mCurrAlpha); } } }); } return mRootComponent; } @Override protected void onStart(Intent intent) { super.onStart(intent); } @Override protected void onActive() { super.onActive(); } @Override protected void onInactive() { super.onInactive(); } @Override protected void onBackground() { super.onBackground(); } @Override protected void onComponentDetach() { super.onComponentDetach(); } @Override protected void onForeground(Intent intent) { super.onForeground(intent); } @Override protected void onStop() { super.onStop(); }}
通过适配器实现item的垂直方向展示
Discover页面各项信息的实现
package com.qiaoxg.harmony.component.provider;import com.qiaoxg.harmony.ResourceTable;import com.qiaoxg.harmony.bean.DiscoverBean;import ohos.agp.components.*;import ohos.app.Context;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class DiscoverProvider extends BaseItemProvider { private List mDataList = new ArrayList(); public static int onImageWidth = 0; public static int towImageWidth = 0; public static int threeImageWidth = 0; private Context mContext; private static int mImageContainerWidth = 0; public DiscoverProvider(Context context) { this.mContext = context; this.mImageContainerWidth = 1024 - AttrHelper.vp2px(32, mContext); for (int i = 0; i = 3) { layoutConfig.height = threeImageWidth; layoutConfig.width = threeImageWidth; } layoutConfig.weight = 1; for (int i = 0; i 0) { layoutConfig.setMarginLeft(AttrHelper.vp2px(4, imageContainer.getContext())); } image.setLayoutConfig(layoutConfig); image.setScaleMode(Image.ScaleMode.CLIP_CENTER); image.setPixelMap(i % 2 == 0 ? ResourceTable.Media_splash : ResourceTable.Media_splash_02); imageContainer.addComponent(image); } } }}
home页面信息展示的实现
package com.qiaoxg.harmony.component.provider;import com.qiaoxg.harmony.ResourceTable;import com.qiaoxg.harmony.bean.HomeBean;import ohos.agp.components.*;import java.util.ArrayList;import java.util.List;public class HomeProvider extends BaseItemProvider { private List mDataList = new ArrayList(); public HomeProvider(List list) { this.mDataList = list; } public void setDataList(List mDataList) { this.mDataList = mDataList; notifyDataChanged(); } @Override public int getCount() { return mDataList.size(); } @Override public Object getItem(int i) { return mDataList.get(i); } @Override public long getItemId(int i) { return i; } @Override public Component getComponent(int i, Component component, ComponentContainer componentContainer) { HomeItemHolder itemHolder; if (component == null) { component = LayoutScatter.getInstance(componentContainer.getContext()) .parse(ResourceTable.Layout_provider_item_home, null, false); itemHolder = new HomeItemHolder(component); // 将获取到的子组件信息绑定到列表项的实例中 component.setTag(itemHolder); } else { // 从缓存中获取到列表项实例后,直接使用绑定的子组件信息进行数据填充 itemHolder = (HomeItemHolder) component.getTag(); } HomeBean sampleItem = mDataList.get(i); itemHolder.title.setText(sampleItem.getTitle()); itemHolder.content.setText(sampleItem.getContent()); itemHolder.datetime.setText(sampleItem.getDateTime()); itemHolder.image.setVisibility(i % 5 == 4 ? Component.VISIBLE : Component.HIDE); return component; } public static class HomeItemHolder { private final Text title; private final Text content; private final Text datetime; private final Image image; public HomeItemHolder(Component component) { title = (Text) component.findComponentById(ResourceTable.Id_title); content = (Text) component.findComponentById(ResourceTable.Id_content); datetime = (Text) component.findComponentById(ResourceTable.Id_datetime); image = (Image) component.findComponentById(ResourceTable.Id_image); } }}
源码连接 https://gitee.com/codemanz/harmonywork