歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 信息列表界面背景代碼分析

Android 信息列表界面背景代碼分析

日期:2017/3/1 9:55:29   编辑:Linux編程

一、短信列表有短信菜單項時,界面背景繪制:
1 ConversationList.java:

2 ..\packages\apps\Mms\res\layoutconversation_list_screen.xml:
<RelativeLayout xmlns:Android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ListView android:id="@android:id/list"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false"
android:scrollbar
android:background="@android:color/white"
android:cacheColorHint="@android:color/white"
android:fadingEdgeLength="16dip" />

<TextView android:id="@+id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/no_conversations"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>


二、短信列表為空白時,界面背景繪制機制

1 ..\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindow.java:

public class PhoneWindow extends Window implements MenuBuilder.Callback {
private void openPanel(PanelFeatureState st, KeyEvent event) {

int backgroundResId;
if (lp.width == ViewGroup.LayoutParams.MATCH_PARENT) {
// If the contents is fill parent for the width, set the
// corresponding background
backgroundResId = st.fullBackground;
width = MATCH_PARENT;
} else {
// Otherwise, set the normal panel background
backgroundResId = st.background;
}
st.decorView.setWindowBackground(getContext().getResources().getDrawable(
backgroundResId));
}
}


private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {
/* package */int mDefaultOpacity = PixelFormat.OPAQUE;

public void setWindowBackground(Drawable drawable) {
if (getBackground() != drawable) {
setBackgroundDrawable(drawable);
if (drawable != null) {
drawable.getPadding(mBackgroundPadding);
} else {
mBackgroundPadding.setEmpty();
}
drawableChanged();
}
}

@Override
public void setBackgroundDrawable(Drawable d) {
super.setBackgroundDrawable(d);
if (getWindowToken() != null) {
updateWindowResizeState();
}
}
}

private static final class DrawableFeatureState {
void setStyle(Context context) {
TypedArray a = context.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
background = a.getResourceId(
com.android.internal.R.styleable.Theme_panelBackground, 0);
fullBackground = a.getResourceId(
com.android.internal.R.styleable.Theme_panelFullBackground, 0);
}
}
}

2 ..\frameworks\base\core\res\res\values\Themes.xml:
<item name="panelBackground">@android:drawable/menu_background</item>
<item name="panelFullBackground">@android:drawable/menu_background_fill_parent_width</item>

3 ..\frameworks\base\core\res\res\drawable-hdpi:
menu_background.9.png
menu_background_fill_parent_width.9.png

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved