未修改前
Launcher3/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
AllAppsGridAdapter继承自BaseAllAppsAdapter
Launcher3/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java
public abstract class BaseAllAppsAdapter<T extends Context & ActivityContext> extends
RecyclerView.Adapter<BaseAllAppsAdapter.ViewHolder> {
在onCreateViewHolder方法构建APP Item
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case VIEW_TYPE_ICON:
int layout = !FeatureFlags.ENABLE_TWOLINE_ALLAPPS.get() ? R.layout.all_apps_icon
: R.layout.all_apps_icon_twoline;
BubbleTextView icon = (BubbleTextView) mLayoutInflater.inflate(
layout, parent, false);
icon.setLongPressTimeoutFactor(1f);
icon.setOnFocusChangeListener(mIconFocusListener);
icon.setOnClickListener(mOnIconClickListener);
icon.setOnLongClickListener(mOnIconLongClickListener);
// Ensure the all apps icon height matches the workspace icons in portrait mode.
icon.getLayoutParams().height =
mActivityContext.getDeviceProfile().allAppsCellHeightPx;
if (FeatureFlags.ENABLE_TWOLINE_ALLAPPS.get()) {
icon.getLayoutParams().height += mExtraHeight;
}
return new ViewHolder(icon);
case VIEW_TYPE_EMPTY_SEARCH:
return new ViewHolder(mLayoutInflater.inflate(R.layout.all_apps_empty_search,
parent, false));
case VIEW_TYPE_ALL_APPS_DIVIDER:
return new ViewHolder(mLayoutInflater.inflate(
R.layout.all_apps_divider, parent, false));
case VIEW_TYPE_WORK_EDU_CARD:
return new ViewHolder(mLayoutInflater.inflate(
R.layout.work_apps_edu, parent, false));
case VIEW_TYPE_WORK_DISABLED_CARD:
return new ViewHolder(mLayoutInflater.inflate(
R.layout.work_apps_paused, parent, false));
default:
BaseAdapterProvider adapterProvider = getAdapterProvider(viewType);
if (adapterProvider != null) {
return adapterProvider.onCreateViewHolder(mLayoutInflater, parent, viewType);
}
throw new RuntimeException("Unexpected view type" + viewType);
}
}
Launcher3/res/layout/all_apps_icon.xml
布局文件
<com.android.launcher3.BubbleTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
style="@style/BaseIcon.AllApps"
android:id="@+id/icon"
launcher:iconDisplay="all_apps"
launcher:centerVertically="true" />
看Launcher3/res/values/styles.xml
<!-- Base theme for BubbleTextView and sub classes -->
<style name="BaseIcon" parent="BaseIconUnBounded">
<!-- <item name="android:lines">1</item>-->
<!-- 修改为可以两行显示-->
<item name="android:lines">2</item>
</style>
<!-- Base theme for AllApps BubbleTextViews -->
<style name="BaseIcon.AllApps" parent="BaseIcon">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:stateListAnimator">@animator/all_apps_fastscroll_icon_anim</item>
<item name="android:paddingLeft">@dimen/dynamic_grid_cell_padding_x</item>
<item name="android:paddingRight">@dimen/dynamic_grid_cell_padding_x</item>
</style>
效果