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

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

<

div id=”content” contentScore=”3891″>一、短信列表有短信菜单项时,界面背景绘制:
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”  >

            style=”?android:attr/listViewWhiteStyle”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:drawSelectorOnTop=”false”
        android:scrollbarStyle=”insideOverlay”
        android:background=”@android:color/white”
        android:cacheColorHint=”@android:color/white”
        android:fadingEdgeLength=”16dip” />

            android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:gravity=”center”
        android:text=”@string/no_conversations”
        android:textAppearance=”?android:attr/textAppearanceMedium” />

二、短信列表为空白时,界面背景绘制机制

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:
        @android:drawable/menu_background
        @android:drawable/menu_background_fill_parent_width

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

更多Android相关信息见Android</spa

未经允许不得转载:演道网 » Android 信息列表界面背景代码分析

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册