我最近一直在开发一个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
我遇到了最新的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
由于Android Jelly Bean不支持日志读取权限(根据此谷歌io 2012视频和此视频),我想知道root设备(或非root设备)是否可以绕过这个限制并能够读取日志.
我怎么做?我真的需要将应用程序变成系统应用程序,还是足够生根?
我的应用程序中有以下片段:
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
编辑:修复!看起来有很多可能的原因.我是一个比较不寻常的......
我将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安全弹出窗口.
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
我有一个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而不是直接流 - 没有效果.
"选择调试应用"和"等待调试器"是Jelly Bean的新功能,有人知道如何使用这些新功能吗?
我有一个应用程序,我想全屏运行.如果我有一个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
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 ×10
adb ×1
android-4.0-ice-cream-sandwich ×1
fullscreen ×1
inputstream ×1
java ×1
logging ×1
root ×1
searchview ×1
sockets ×1
tabs ×1