Android 4.0 UI for Tablet and Handset

本文详细介绍了Android 4.0 (ICS) 的用户界面特性,包括如何根据设备屏幕尺寸选择电话模式或平板模式的界面,以及如何通过配置文件实现状态栏与系统栏的切换。还介绍了多面板布局和平板模式下虚拟按键的设计。

Android 4.0(ICS) merge handset and tablet UI together, make customer flexible to use which UI they want. On marketing nowdays, phone use phone mode directly and other product like tablet/MID/PND use tablet mode.

ICS support multi-panel in tablet mode to fully use advantage of large screen size which is the major difference with former Android version.

Following layout gives us a brief knowledge about ICS UI:


+-------------------------------------------------+
| System bar (only in phone UI)                      |
+-------------------------------------------------+
| (Layout with background drawable)               |
| +---------------------------------------------+ |
| | Title/Action? bar (optional)                          |
| +---------------------------------------------+ |
| | Content, vertical extending                        |
| |                                                                |
| +---------------------------------------------+ |
+-------------------------------------------------+
| System bar (only in tablet UI)                       |
+-------------------------------------------------+

config_statusBarComponent choose which resource we want, statusBar or systemBar.if phone, use com.android.systemui.statusbar.phone.PhoneStatusBar?; while tablet, use com.android.systemui.statusbar.tablet.TabletStatusBar?. frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java

    public void onCreate() {
        // Pick status bar or system bar.
        IWindowManager wm = IWindowManager.Stub.asInterface(
                ServiceManager.getService(Context.WINDOW_SERVICE));
        try {
            SERVICES[0] = wm.canStatusBarHide()
                    ? R.string.config_statusBarComponent
                    : R.string.config_systemBarComponent;
        } catch (RemoteException e) {
            Slog.w(TAG, "Failing checking whether status bar can hide", e);
        }

res/values/config.xml

<string name="config_statusBarComponent" translatable="false">
             com.android.systemui.statusbar.phone.PhoneStatusBar</string>
<string name="config_systemBarComponent" translatable="false">
             com.android.systemui.statusbar.tablet.TabletStatusBar<string> 

canStatusBarHide defined inframeworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

    public boolean canStatusBarHide() {
        return mStatusBarCanHide;
    }

mStatusBarCanHide true or false determine status bar or system bar.

        int shortSizeDp = shortSize
                * DisplayMetrics.DENSITY_DEFAULT
                / DisplayMetrics.DENSITY_DEVICE;
        mStatusBarCanHide = shortSizeDp < 600;
        mStatusBarHeight = mContext.getResources().getDimensionPixelSize(
                mStatusBarCanHide
                ? com.android.internal.R.dimen.status_bar_height
                : com.android.internal.R.dimen.system_bar_height);

Here if shortSizeDp smaller than 600, then system use as tablet mode, otherwise phone mode. DENSITY_DEFAULT is fixed 160. Therefore, 800*480 resolution which compute as 480*160/DENSITY_DEVICE and 800*600 compute as 600*160/DENSITY_DEVICE. So 120 should be suitable value to make both needs the tablet condition.

setprop ro.sf.lcd_density 120

frameworks/base/core/java/android/content/res/Configuration.java system configuration

public static final int SCREENLAYOUT_SIZE_SMALL = 0x01; 
public static final int SCREENLAYOUT_SIZE_NORMAL = 0x02; 
public static final int SCREENLAYOUT_SIZE_LARGE = 0x03; 
public static final int SCREENLAYOUT_SIZE_XLARGE = 0x04;

ICS also has three common software virtual key BACK, HOME and RECENT, default tablet mode appear while phone mode should modify code to adapt these keys. framework/base/packages/SystemUI/res/layout/navigation_bar.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值