> 文档中心 > 基于鸿蒙操作系统的鸿蒙信息搜索引擎

基于鸿蒙操作系统的鸿蒙信息搜索引擎

基于鸿蒙操作系统的鸿蒙信息搜索引擎

【中原工】

创建项目

登录华为账号 选择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