android5.1 显示方向,Android 5.1设置内加入导航栏显示与隐藏开关

平台:RK3288

版本:Android5.1

需要修改的文件有以下几个

packages/apps/Settings/res/xml/dashboard_categories.xml

packages/apps/Settings/res/xml/nobar_switch.xml

packages/apps/Settings/src/com/android/settings/NaBarSetting.java

frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml

frameworks/base/packages/SystemUI/res/values/strings.xml

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

1、dashboard_categories.xml

packages/apps/Settings/res/xml/dashboard_categories.xml

Setting中显示内容的条目数量是由资源数量决定的,即要有多少资源才能显示多少个视图。而这个资源就定义在dashboard_categories.xml中

....

/>

android:id="@+id/nabar_settings"

android:title="@string/nabar_settings"

android:fragment="com.android.settings.NaBarSetting"

android:icon="@drawable/ic_settings_usb"

/>

....

2、nobar_switch.xml

packages/apps/Settings/res/xml/nobar_switch.xml

NaBarSetting界面的布局

android:title="@string/nabar_settings"

android:key="nabar_settings"

xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">

android:key="enable_nabar"

android:title="@string/enable_nabar"

android:defaultValue="false" />

3、创建NaBarSetting.java

packages/apps/Settings/src/com/android/settings/NaBarSetting.java

NaBarSetting.java是一个fragment,开关界面和逻辑操作都在这里,设置了两个广播用于让PhoneStatusBar接收,然后开关NavigationBar。

具体代码如下:

package com.android.settings;

import java.util.Timer;

import java.util.TimerTask;

import android.content.BroadcastReceiver;

import android.content.ContentResolver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.content.pm.PackageManager;

import android.content.pm.ResolveInfo;

import android.database.Cursor;

import android.database.sqlite.SQLiteException;

import android.net.Uri;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.preference.CheckBoxPreference;

import android.preference.ListPreference;

import android.preference.Preference;

import android.preference.PreferenceGroup;

import android.preference.PreferenceScreen;

import android.provider.MediaStore;

import android.provider.Settings;

import android.provider.MediaStore.Images.Media;

import android.provider.Settings.SettingNotFoundException;

import java.io.File;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import android.util.Log;

import android.hardware.usb.UsbManager;

import java.util.List;

import android.os.SystemProperties;

public class NaBarSetting extends SettingsPreferenceFragment implements

Preference.OnPreferenceChangeListener {

private static final String TAG = "NaBarSettings";

private CheckBoxPreference mEnableNabar;

private File mFile = null;

private String mMode = null;

private static final String HOST_MODE = new String("1");

private static final String SLAVE_MODE = new String("2");

private static String ENABLE_NABAR_SWITCH = "enable.nabar.switch";

private Context mContext;

private Handler mHandler;

private static final String KEY_ENABLE_NABAR = "enable_nabar";、

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.nabar_switch);

mEnableNabar = (CheckBoxPreference) findPreference(KEY_ENABLE_NABAR);

mEnableNabar.setOnPreferenceChangeListener(this);

mContext=getActivity();

}

@Override

public void onResume() {

super.onResume();

mEnableNabar.setEnabled(true);

String enableUms= SystemProperties.get(ENABLE_NABAR_SWITCH,"true");

if("true".equals(enableUms))//if has UMS function,flash is primary storage

{

mEnableNabar.setChecked(true);

}else{

mEnableNabar.setChecked(false);

}

}

@Override

public void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

try {

getActivity().unregisterReceiver(mReceiver);

}catch (Exception e){

Log.e(TAG,"unregisterReceiver Ex:"+e);

}

}

public boolean onPreferenceChange(Preference preference, Object objValue) {

final String key = preference.getKey();

if (KEY_ENABLE_NABAR.equals(key)) {

if((Boolean) objValue == true) {

mEnableNabar.setChecked(true);

SystemProperties.set(ENABLE_NABAR_SWITCH, "true");

Intent intent=new Intent();

//开启导航栏广播

intent.setAction("rk.android.navbarview.SHOW");

mContext.sendBroadcast(intent);

} else {

mEnableNabar.setChecked(false);

SystemProperties.set(ENABLE_NABAR_SWITCH, "false");

Intent intent=new Intent();

//关闭导航栏广播

intent.setAction("rk.android.navbarview.HIDE");

mContext.sendBroadcast(intent);

}

}

return true;

}

}

4.strings.xml

frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml

frameworks/base/packages/SystemUI/res/values/strings.xml

/values-zh-rCN/strings.xml

NavigationBar Settings

Show NavigationBar

values/strings.xml

导航栏设置

显示导航栏

5.PhoneStatusBar.java

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

广播监听receiver加入隐藏导航栏广播监听

private BroadcastReceiver receiver=new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

......

}else if(action.equals("rk.android.navbarview.HIDE")){

removeBar();

}else{

takeScreenshot();

}

.......

};

makeStatusBarView方法内加入广播注册

.....

IntentFilter intentfilter=new IntentFilter();

intentfilter.addAction("rk.android.screenshot.SHOW");

intentfilter.addAction("rk.android.screenshot.ACTION");

//cyh add

intentfilter.addAction("rk.android.navbarview.HIDE");

//cyh end

context.registerReceiver(receiver, intentfilter);

.....

添加移除导航栏的方法removeBar和增加导航栏的方法addBar()

boolean mBarIsAdd = true;

public void addBar(){

if (!mBarIsAdd){

Log.d(TAG,"add Bar");

SystemProperties.set(ENABLE_NABAR_SWITCH, "true");

try {

boolean showNav = mWindowManagerService.hasNavigationBar();

if (DEBUG) Log.v(TAG, "hasNavigationBar=" + showNav);

if (showNav) {

mNavigationBarView =

(NavigationBarView) View.inflate(mContext, R.layout.navigation_bar_win, null);

}else{

mNavigationBarView =

(NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);

}

mNavigationBarView.setDisabledFlags(mDisabled);

mNavigationBarView.setBar(this);

mNavigationBarView.setOnVerticalChangedListener(

new NavigationBarView.OnVerticalChangedListener() {

@Override

public void onVerticalChanged(boolean isVertical) {

if (mSearchPanelView != null) {

mSearchPanelView.setHorizontal(isVertical);

}

mNotificationPanel.setQsScrimEnabled(!isVertical);

}

});

mNavigationBarView.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

checkUserAutohide(v, event);

return false;

}});

}

} catch (RemoteException ex) {

}

addNavigationBar();

updateNotifications();

checkBarModes();

mBarIsAdd = true;

}

}

private void removeBar(){

if (mBarIsAdd){

Log.d(TAG,"remove Bar");

if (mNavigationBarView != null){

mWindowManager.removeViewImmediate(mNavigationBarView);

};

if(signalCluster_win!=null)

signalCluster_win=null;

if (mNavigationBarView != null)

mNavigationBarView = null;

if(mNotificationLite != null){

mNotificationLite.closeCenter();

}

mBarIsAdd = false;

SystemProperties.set(ENABLE_NABAR_SWITCH, "false");

}

}

6.PhoneWindowManager.java

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

注册广播

public void init(Context context, IWindowManager windowManager,

WindowManagerFuncs windowManagerFuncs) {

......

context.registerReceiver(mScreenshotReceiver, intentfilter);

//cyh add register for navigationbar

IntentFilter statubarintentfilter=new IntentFilter();

statubarintentfilter.addAction("rk.android.navbarview.SHOW");

context.registerReceiver(mStatuBarReceiver, statubarintentfilter);

//cyh end

加入Receiver 和 addBar方法

private BroadcastReceiver mStatuBarReceiver=new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (mNavigationBar != null && mNavigationBarOnBottom) {

requestTransientBars(mNavigationBar);

}

addBar();

}

};

public void addBar() {

try {

IStatusBarService statusbar = getStatusBarService();

if (statusbar != null) {

statusbar.addBar();

}

} catch (RemoteException e) {

Slog.e(TAG, "RemoteException when add Bar", e);

// re-acquire status bar service next time it is needed.

mStatusBarService = null;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 5.1是一个广泛使用的操作系统版本,支持HDMI输出功能。要设置HDMI分辨率,可以按照以下步骤进行: 1. 首先,将Android设备与HDMI显示器或电视连接。确保HDMI线缆正常连接。 2. 在Android设备上打开设置菜单。可以通过下拉通知栏或点击主屏幕上的设置图标来访问设置菜单。 3. 在设置菜单中,向下滚动并找到“显示”选项。点击进入显示设置页面。 4. 在显示设置页面中,可能会看到“屏幕投射”或“显示模式”的选项。点击进入相关设置。 5. 在屏幕投射或显示模式设置页面中,可以看到HDMI选项。点击进入HDMI设置。 6. 在HDMI设置页面中,通常会有分辨率选项。点击进入分辨率设置。 7. 在分辨率设置页面中,可以看到可用的分辨率选项列表。根据显示器或电视的支持能力和个人偏好,选择所需的分辨率。 8. 选择完分辨率后,点击确认或应用。系统将应用所选的分辨率设置。 9. 返回到上一个菜单或主屏幕,查看是否已成功设置HDMI分辨率。显示器或电视上的画面应该会根据所选的分辨率进行调整。 需要注意的是,不同的Android设备或系统版本可能会有略微不同的设置流程。因此,根据具体的设备和系统版本,上述步骤可能会有所变化。但总体而言,通过进入设置菜单,找到显示设置,再进入HDMI设置,选择适当的分辨率,就可以完成Android 5.1设置HDMI分辨率的流程。 ### 回答2: Android 5.1版本的设备在设置HDMI分辨率时,可以按照以下步骤进行操作: 1. 连接HDMI线缆:首先,将一端的HDMI线缆插入Android设备的HDMI输出接口,另一端插入显示设备(如电视或投影仪)的HDMI输入接口。 2. 打开设置界面:在Android设备上,找到并点击打开“设置”应用程序,通常可以在应用程序列表中找到该选项。 3. 进入显示设置:在“设置”主界面中,向下滚动并找到“显示”选项,点击进入显示设置界面。 4. 选择HDMI设置:在显示设置界面中,找到并点击“HDMI”选项,这将打开HDMI设置界面。 5. 选择分辨率:在HDMI设置界面中,通常会显示可用的HDMI分辨率选项。根据你的显示设备和个人需求,选择适当的分辨率选项。 6. 保存设置:选择完分辨率后,点击界面上的“保存”或“应用”按钮,以保存并应用新的HDMI分辨率设置。 7. 测试分辨率:你可以通过在显示设备上观察图像是否清晰和完整来测试新的HDMI分辨率设置。如果满意,设置流程就结束了。 请注意,以上步骤仅适用于Android 5.1版本的系统设备,不同的Android版本或设备类型可能略有不同。确保你的设备支持HDMI输出功能并运行在Android 5.1版本或更高版本。 ### 回答3: 要设置Android 5.1的HDMI分辨率,可以按照以下流程操作: 1. 首先,确保你的Android设备已连接到HDMI显示器上。 2. 在设备上滑动屏幕,进入主菜单,找到并点击“设置”图标。 3. 在设置菜单中,向下滚动找到“显示”或类似的选项,并点击进入。 4. 在显示设置菜单中,找到“屏幕分辨率”或类似的选项,并点击进入。 5. 系统会列出可用的屏幕分辨率选项。根据你的需求和HDMI显示器的能力,选择一个适合的分辨率。 6. 点击选中分辨率后,系统会提示你是否确认应用此分辨率。确认后,系统会应用新的分辨率设置。 7. 返回到主菜单或桌面,你会注意到HDMI显示器的分辨率已经改变为你所设置的分辨率。 需要注意的是,不同的Android设备可能会在设置菜单的布局和选项名称上有所区别,具体操作可能会有所不同。但一般来说,通过“设置”-“显示”-“屏幕分辨率”可以找到相关的选项。 如果你在Android设备上找不到上述选项,可能是因为该设备的固件版本或制造商定制的界面导致了菜单布局的差异。在这种情况下,你可能需要查阅设备的用户手册或进行在线搜索来了解具体的设置方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值