标签: android-4.2-jelly-bean

在Android JellyBean上更改Actionbar高度

我最近一直在开发一个Android应用程序,我需要为标签栏设置自定义布局和尺寸.我到目前为止的方式是使用Jake Wharton的ActionBarSherlock库来支持pre-HoneyComb Android版本,并通过将样式应用于我编辑actionBarSize样式项的应用程序.

现在,我一直在测试Galaxy S3上的应用程序(上面有Jellybean),并且标签栏高度不再根据actionBarSize值变化.

所以我开始查看JellyBean的代码,我在ActionBarPolicy课堂上找到了这个方法:

    public int getTabContainerHeight() {
            TypedArray a = mContext.obtainStyledAttributes(null, R.styleable.ActionBar,
               com.android.internal.R.attr.actionBarStyle, 0);
            int height = a.getLayoutDimension(R.styleable.ActionBar_height, 0);
            Resources r = mContext.getResources();
            if (!hasEmbeddedTabs()) {
                // Stacked tabs; limit the height
                height = Math.min(height,
                        r.getDimensionPixelSize(R.dimen.action_bar_stacked_max_height));
            }
            a.recycle();
            return height;
    }
Run Code Online (Sandbox Code Playgroud)

从我在这个方法中收集的内容来看,当应用程序处于纵向模式时,似乎JellyBean通过将标签栏高度设置为"action_bar_stacked_max_height"维度值(在4.1的/values/dimen.xml文件中为48dp)来限制TabBar的高度),即使我已设置动作栏高度actionBarSize.

我已经尝试覆盖这个维度值,通过在我自己的dimen.xml文件中将其设置为我自己的值,但我没有运气.它没用.

我的问题:

你们知道我可以覆盖"action_bar_stacked_max_height"维度值的方法吗?

先感谢您!

tabs android actionbarsherlock android-actionbar android-4.2-jelly-bean

23
推荐指数
3
解决办法
2万
查看次数

在Jelly Bean模拟器上按下Enter键后,不调用onEditorAction()

我遇到了最新的Jelly Bean模拟器的行为问题.EditTexts我的应用程序中有几个.OnEditorActionListener当用户按下键盘上的ENTER键时,An 提供特殊处理.这一直到ICS,但现在在Jelly Bean上,侦听器回调方法onEditorAction()不再被调用.只插入一个新行EditText.

这可以通过这种方式复制:

EditText testEditText = new EditText(context);
testEditText.setOnEditorActionListener(new OnEditorActionListener() {

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        Log.d(TAG, "onEditorAction() called");
        return false;
    }
});
addView(testEditText);
Run Code Online (Sandbox Code Playgroud)

这是Jelly Bean中的一个错误吗?还是在模拟器中?或者有意改变了行为?

奇怪的是,其他人写道,该方法被调用,但带有意外的参数,在这里运行Jelly Bean的Nexus 7:onEditorAction()中的null keyevent和actionid = 0(Jelly Bean/Nexus 7)

android android-virtual-device android-edittext android-4.2-jelly-bean

22
推荐指数
1
解决办法
2万
查看次数

Jelly Bean的READ_LOGS权限(api 16)

由于Android Jelly Bean不支持日志读取权限(根据此谷歌io 2012视频视频),我想知道root设备(或非root设备)是否可以绕过这个限制并能够读取日志.

我怎么做?我真的需要将应用程序变成系统应用程序,还是足够生根?

logging android root android-4.2-jelly-bean

22
推荐指数
2
解决办法
2万
查看次数

onBreateOptionsMenu在JB 4.2上的onResume之后调用

我的应用程序中有以下片段:

public class MyFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
  private MenuItem refresh = null;

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);

    //.....

    // NPE here
    refresh.setActionView(R.layout.indeterminate_progress_action);
    getActivity().getSupportLoaderManager().initLoader(0, null, this);
  }

  @Override
  public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.refresh_menu, menu);
    refresh = (MenuItem) menu.findItem(R.id.menu_item_refresh);
  }

  @Override
  public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mAdapter.swapCursor(data);
    refresh.setActionView(null);
  }
}
Run Code Online (Sandbox Code Playgroud)

基本上当用户启动Activity时,我想在操作栏中显示进度微调器,直到加载器完成.在Android 4.2之前一切正常.在Android 4.2上,我收到以下错误:

11-24 13:37:14.811: E/AndroidRuntime(17850): Caused by: java.lang.NullPointerException
11-24 13:37:14.811: E/AndroidRuntime(17850):    at com.MyApp.library.fragments.MyFragment.onActivityCreated(TabFragment.java:65)
Run Code Online (Sandbox Code Playgroud)

添加一些断点后,我意识到onCreateOptionsMenu在onActivityCreated之后被调用.我可以使用另一个生命周期事件吗?是否有更好的方法来达到预期的效果?

android android-fragments android-actionbar android-4.2-jelly-bean

22
推荐指数
1
解决办法
6057
查看次数

Android 4.2.2 - adb离线,即使在SDK升级后也是如此

编辑:修复!看起来有很多可能的原因.我是一个比较不寻常的......


我将SDK Tools更新为21.1,将Platform-tools更新为16.0.1.验证adb version我正在运行v1.0.31.我的开发机器运行的是Windows 7,x64.

我有四个4.2.2设备要测试,一个Galaxy Nexus有解锁的bootloader但没有root,还有Nexuses One,4,7和10,所有的库存.

Nexus One,<4.2.2,与adb配合得很好,但所有4.2.2设备在adb中显示为"离线",我从未见过设备上弹出RSA安全对话框,即使重启几次ADB(使用kill-server),PC和设备本身.

尝试使用不同的USB端口和电缆.我正在使用SDK中的标准"Android ADB Interface"驱动程序,但也尝试过"Android Composite ADB Interface"和"Samsung Composite ADB Interface"驱动程序.我甚至完全从ADT包中重新安装了SDK.

奇怪的是,我的同事可以毫不费力地在相同的设备上显示弹出窗口.我甚至复制了他的adb.exe和dll并尝试了它,但它仍然不适用于我的.他没有从捆绑中安装; 他以传统的方式将ADT安装到Eclipse中,但我怀疑这会有所作为.是什么赋予了?!

编辑26/02/2013,16:41 GMT:平台工具16.0.2的更新刚刚发布.尚未更新ADB(仍然是v1.0.31)并仍然看到设备处于脱机状态,并且看不到RSA安全弹出窗口.

android adb android-4.2-jelly-bean

21
推荐指数
3
解决办法
3万
查看次数

无法在SearchView中自动显示键盘

SearchView默认是聚焦的,但是当我尝试显示软件键盘时 - 它不会发生:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Run Code Online (Sandbox Code Playgroud)

但是,当我点击SearchView时 - 它确实如此.为什么?

android android-softkeyboard android-4.0-ice-cream-sandwich searchview android-4.2-jelly-bean

20
推荐指数
5
解决办法
2万
查看次数

无法在Jelly Bean上读取套接字InputStream

我有一个TCP套接字连接,在Android 2.3上运行良好但现在面临Android 4.1上的一些问题.问题是InputStream.read()方法总是返回-1(没有阻塞),就像关闭连接一样.

创建套接字:

SocketFactory socketFactory = SocketFactory.getDefault();
Socket socket = socketFactory.createSocket("c.whatsapp.net", 5222);
socket.setSoTimeout(3*60*1000);
socket.setTcpNoDelay(true);
Run Code Online (Sandbox Code Playgroud)

检索输入和输出流并编写一些初始数据:

InputStream inputStream = new BufferedInputStream(socket.getInputStream());
OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());

outputStream.write(87);
outputStream.write(65);
outputStream.write(1);
outputStream.write(2);
outputStream.flush();
Run Code Online (Sandbox Code Playgroud)

然后,这个条件总是不受阻塞地通过:

int c = inputStream.read();
if (c < 0) {
    Log.d(TAG, "End of stream");
}
Run Code Online (Sandbox Code Playgroud)

此代码在后台线程中运行.它正在开发姜饼.

试图使用InputStreamReader和OutputStreamWriter而不是直接流 - 没有效果.

java sockets android inputstream android-4.2-jelly-bean

20
推荐指数
1
解决办法
2246
查看次数

如何在果冻豆中使用"选择调试应用"和"等待调试器"新功能?

"选择调试应用"和"等待调试器"是Jelly Bean的新功能,有人知道如何使用这些新功能吗?

android android-4.2-jelly-bean

19
推荐指数
2
解决办法
4万
查看次数

沉浸式全屏低于4.4

我有一个应用程序,我想全屏运行.如果我有一个4.4 KitKat设备,很容易设置SYSTEM_UI_FLAG_IMMERSIVE使应用程序纯净全屏.但是,如果我有一个API低于4.4的设备.我不知道如何使它全屏,好像它是一个Immersive支持的KitKat.

我可以设置全屏,并隐藏导航标记以使应用程序全屏显示,但是一旦点击屏幕,这些标志就会重置,现在将显示导航栏和状态栏.

有没有一种解决方案,我可以在JB和可能的ICS(下面不是必须的)设备上"模拟"沉浸式模式.

我有一个方法hideSystemUI,它在OnSystemUiVisibilityChangeListener当前看起来像这样的触发器时运行.

private void hideSystemUI() {
        actionBar.hide();
        isMenuVisible = false;
        if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
            mDecorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
                | View.SYSTEM_UI_FLAG_FULLSCREEN                
                | View.SYSTEM_UI_FLAG_IMMERSIVE);
        }
        else{
            mDecorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN);
        }
}
Run Code Online (Sandbox Code Playgroud)

我需要进行哪些更改才能使应用程序全屏显示,并且不会在每次点击时显示导航栏和状态栏,而是从顶部或底部显示幻灯片.

android fullscreen android-4.2-jelly-bean android-fullscreen android-4.4-kitkat

19
推荐指数
1
解决办法
5697
查看次数

Jelly Bean中的自定义可扩展通知(4.1)

Jelly Bean添加了对可扩展状态通知的支持.根据http://developer.android.com/about/versions/jelly-bean.html:

除了模板化样式,您还可以使用任何远程视图创建自己的通知样式.

怎么办?我相信你需要创建一个自定义的Notification.Style.这是一个抽象类,所以我需要扩展它.我无法找到有关哪些部分需要扩展的文档.

这个SO问题给出了如何使用notificaiton.builder进行基本通知的一个很好的例子,我将此作为起点.添加

.setContent(new RemoteViews(getPackageName(), R.layout.notification)) 
Run Code Online (Sandbox Code Playgroud)

为基本通知添加自定义视图,但它不可扩展.

android android-notifications android-4.2-jelly-bean

18
推荐指数
2
解决办法
1万
查看次数