在Launcher3添加新的ListView,把应用添加到list中
2017-04-01 11:09
423 查看
1.编辑桌面list部件名称
2.在xml文件内添加相应的桌面list小部件
default_workspace_5*6.xml
3.创建list对应的列表类
4.初始化时在桌面添加list部件以及向部件内添加应用
}
DefaultLayoutParser.java
private static final String TAG_THIRD_WUYAZHOU = "thirdwuyazhou";
@Override protected HashMap<String, TagParser> getLayoutElementsMap() { HashMap<String, TagParser> parsers = new HashMap<String, TagParser>(); parsers.put(TAG_FAVORITE, new AppShortcutWithUriParser()); parsers.put(TAG_APPWIDGET, new AppWidgetParser()); parsers.put(TAG_SHORTCUT, new UriShortcutParser(mSourceRes)); parsers.put(TAG_RESOLVE, new ResolveParser()); parsers.put(TAG_FOLDER, new MyFolderParser()); parsers.put(TAG_PARTNER_FOLDER, new PartnerFolderParser()); //wuyazhou add begin parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou()); //wuyazhou add end return parsers; }
AutoInstallsLayout.java
protected HashMap<String, TagParser> getLayoutElementsMap() { HashMap<String, TagParser> parsers = new HashMap<String, TagParser>(); parsers.put(TAG_APP_ICON, new AppShortcutParser()); parsers.put(TAG_AUTO_INSTALL, new AutoInstallParser()); parsers.put(TAG_FOLDER, new FolderParser()); parsers.put(TAG_APPWIDGET, new AppWidgetParser()); parsers.put(TAG_SHORTCUT, new ShortcutParser(mSourceRes)); //fangqing add begin parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou()); //fangqing add end return parsers; }
@Thunk class ThirdFolderParserWuyazhou implements TagParser { @Override public long parseAndAdd(XmlResourceParser parser) { long id = mCallback.generateNewItemId(); final long container = Favorites.CONTAINER_THIRD; final long screenId = Long.parseLong(getAttributeValue(parser, ATTR_SCREEN)); mValues.clear(); mValues.put(Favorites.CONTAINER, container); mValues.put(Favorites.SCREEN, screenId); mValues.put(Favorites.CELLX, convertToDistanceFromEnd(getAttributeValue(parser, ATTR_X), mColumnCount)); mValues.put(Favorites.CELLY, convertToDistanceFromEnd(getAttributeValue(parser, ATTR_Y), mRowCount)); mValues.put(Favorites._ID, id); mValues.put(Favorites.SPANX, getAttributeValue(parser, ATTR_SPAN_X)); mValues.put(Favorites.SPANY, getAttributeValue(parser, ATTR_SPAN_Y)); mValues.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_THIRD_wuyazhou); if (mCallback.insertAndCheck(mDb, mValues) < 0) { return -1; } else { return id; } } }///
public static final int ITEM_TYPE_THIRD_wuyazhou = 7;
/////
LauncherModel.java
loadWorkspace(){
case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou: Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou 00"); info = new ShortcutInfo(); info.id = c.getLong(idIndex); info.container = container; info.screenId = c.getInt(screenIndex); info.cellX = c.getInt(cellXIndex); info.cellY = c.getInt(cellYIndex); info.spanX = c.getInt(spanXIndex); info.spanY = c.getInt(spanYIndex); info.itemType = itemType; sBgWorkspaceItems.add(info); sBgItemsIdMap.put(info.id, info); break;
}
2.在xml文件内添加相应的桌面list小部件
default_workspace_5*6.xml
<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">
<thirdwuyazhou launcher:screen="0" launcher:screenType="0" launcher:x="2" launcher:y="0" launcher:spanX="1" launcher:spanY="4" />
</favorites>
3.创建list对应的列表类
ThirdApp.java
package com.android.launcher3; import android.content.ComponentName; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.RelativeLayout; import android.widget.ListView; import android.widget.BaseAdapter; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.ArrayList; import java.util.HashSet; import android.util.Log; import android.graphics.drawable.Drawable; import android.widget.ImageView; import android.widget.TextView; import android.view.LayoutInflater; import android.graphics.Bitmap; import android.content.Intent; import android.content.res.Configuration; public class ThirdApp extends RelativeLayout{ private ListView mListView; private ListViewAdapter mAdapter; private Workspace mWorkspace; private Launcher mLauncher; private View mView; private ArrayList<ListInfo> mListInfo; private int mCountX; private int mCountY; public ThirdApp(Workspace workspace, Context context) { this(workspace, context, null); } public ThirdApp(Workspace workspace, Context context, AttributeSet attrs) { this(workspace, context, attrs, 0); } public ThirdApp(Workspace workspace, Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mLauncher = (Launcher) context; mWorkspace = workspace; LauncherAppState app = LauncherAppState.getInstance(); InvariantDeviceProfile profile = app.getInvariantDeviceProfile(); mCountX = profile.numColumns; mCountY = profile.numRows; initViews(); } void initViews(){ mView = LayoutInflater.from(mLauncher).inflate(R.layout.third_app, (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false); mListView = (ListView)mView.findViewById(R.id.list); mListInfo= new ArrayList<ListInfo>(); mAdapter = new ListViewAdapter(mListInfo); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub ListInfo listInfo = (ListInfo)mAdapter.getItem(position); mLauncher.startActivity(listInfo.mIntent); } }); } public void addItem(ShortcutInfo info){ String title = info.title.toString(); Intent intent = info.intent; LauncherAppState app = LauncherAppState.getInstance(); Bitmap bp= info.getIcon(app.getIconCache()); int index = (int)info.screenId*mCountY*mCountX+info.cellY*mCountX+info.cellX; ListInfo listInfo = new ListInfo(title, intent, bp, index); Collections.sort(mListInfo, ITEM_POS_COMPARATOR); mListInfo.add(listInfo); mAdapter.notifyDataSetChanged(); } public void removeItem(final HashSet<String> packageNames, final HashSet<ComponentName> components){ for(ListInfo info:mListInfo){ ComponentName cn = info.mIntent.getComponent(); if(cn != null &&components.contains(cn)){ mListInfo.remove(info); mAdapter.notifyDataSetChanged(); } } for(ListInfo info:mListInfo){ ComponentName cn = info.mIntent.getComponent(); if(cn!=null){ String pckName = info.mIntent.getComponent().getPackageName(); if(pckName != null &&packageNames.contains(pckName)){ mListInfo.remove(info); mAdapter.notifyDataSetChanged(); } } } } @Override protected void onFinishInflate() { super.onFinishInflate(); } public View getView(){ return mView; } public class ListViewAdapter extends BaseAdapter{ ArrayList<ListInfo> mData; public ListViewAdapter(ArrayList data){ mData = data; } @Override public int getCount() { // TODO Auto-generated method stub return mData.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mData.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final int selectID= position; ListItemView listItemView = null; if(convertView ==null){ listItemView = new ListItemView(); convertView = LayoutInflater.from(mContext).inflate(R.layout.third_app_list_item, null); listItemView.mImage =(ImageView) convertView.findViewById(R.id.third_app_icon); listItemView.mText = (TextView)convertView.findViewById(R.id.third_app_title); convertView.setTag(listItemView); }else{ listItemView = (ListItemView) convertView.getTag(); } listItemView.mImage.setImageBitmap((Bitmap)mData.get(position).mImage); listItemView.mText.setText((String)mData.get(position).mTitle); return convertView; } public final class ListItemView{ public ImageView mImage; public TextView mText; } } public class ListInfo { int mIndex; String mTitle; Intent mIntent; Bitmap mImage; public ListInfo(String title, Intent intent, Bitmap image,int index){ mIndex = index; mTitle = title; mImage = image; mIntent = intent; } } public static final Comparator<ListInfo> ITEM_POS_COMPARATOR = new Comparator<ListInfo>() { @Override public int compare(ListInfo lhs, ListInfo rhs) { if (lhs.mIndex != rhs.mIndex) { return lhs.mIndex - rhs.mIndex; } return 0; } }; }
4.初始化时在桌面添加list部件以及向部件内添加应用
@Override public void bindItems(final ArrayList<ItemInfo> shortcuts, final int start, final int end, final boolean forceAnimateIcons) {
switch (item.itemType) { case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou: // view = mInflater.inflate(R.layout.third_app, // (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false); mThirdAppwuyazhou = new ThirdApp(mWorkspace, this); Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou"); view = mThirdAppwuyazhou.getView(); view.setTag(item); break;
default: throw new RuntimeException("Invalid Item Type"); } //fangqing add begin if( view== null) continue; workspace.addInScreenFromBind(view, item.container, item.screenId, item.cellX, item.cellY, item.spanX, item.spanY); //fangqing add end
}
相关文章推荐
- Android之ListActivity的使用和在ListView中添加图片文字
- 用VS向SharePoint中部署添加List 并指定应用的Content Type
- ListActivity 的使用和在 ListView中添加图片文字
- ListView添加HeaderView出现Cannot add header view to list -- setAdapter has already been called.
- Adapter给listView添加list数据
- android 应用之listview添加radiobutton,获取textView
- andriod开发点滴(在listView上添加了一个checkbox后,点击list无响应)
- StickyListHeaders:在listview中可以轻松的把headers添加到列表视图中组件
- ListView应用------ListView控件显示List集合中的数据,并对Item响应选择事件(法一)
- ListView添加删除FooterView java.lang.Class Cast Exception: android.widget.HeaderViewListAdapter
- Android ListActivity的使用和在ListView中添加图片文字
- ListActivity 的使用和在 ListView中添加图片文字
- Launcher3如何给桌面添加一页,并显示一个应用
- Android之ListActivity的使用和在ListView中添加图片文字
- Android:Android ListActivity with a header or footer(为ListView添加header和footer)
- listview 顶部添加tabhost,list滑动时tabhost可以悬浮、缩放的效果
- Android Studio添加应用作为依赖时报错Error:Dependency MonthText:xlistview:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. File: 及其解决方案
- Fragment中添加ListView而不使用ListFragment
- android 应用之listview添加radiobutton,获取textView
- Android ListActivity的使用和在ListView中添加图片文字