使用新的GridLayoutManager:https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html
它需要一个明确的跨度计数,所以问题现在变成:你怎么知道每行有多少"跨度"?毕竟这是一个网格.根据测量的宽度,RecyclerView可以容纳多个跨距.
使用旧的GridView
,您只需设置"columnWidth"属性,它将自动检测适合的列数.这基本上是我想要为RecyclerView复制的:
RecyclerView
这似乎是很常见的行为,所以有一种我没有看到的更简单的方法吗?
android android-gridlayout gridlayoutmanager android-recyclerview
我想看看是否有人使用新的Android API级别17附带的FragmentTabHost自定义选项卡.
我很高兴能够在我的ViewPager SherlockFragments中嵌入一个tabHost,但是我很难做一些简单的事情,例如将标签移动到底部或更改标签的布局.
有谁见过使用这个功能的好例子?
这是我在Android文档中找到的唯一示例,而且几乎没有任何描述它的用法.它似乎也忽略了布局中定义的内容R.id.fragment1
.
我想我的问题是,如果有人遇到过一个很好的教程:FragmentTabHost或者他们是否知道如何a)将嵌套标签置于底部或b)更改所述标签的布局.
我已经尝试了所有常用方法,但由于看起来XML布局文件被覆盖,我没有太多运气.
private FragmentTabHost mTabHost;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setContentView(R.layout.fragment_tabs);
mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
FragmentStackSupport.CountingFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
LoaderCursorSupport.CursorLoaderListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
LoaderCustomSupport.AppListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
return mTabHost;
}
Run Code Online (Sandbox Code Playgroud)
在做了一些研究后,似乎可能会在支持库中初始化FragmentTabHost时出现故障.Google代码上的用户提供了以下建议:
FragmentTabHost.java
private void initFragmentTabHost(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs,
new int[] { android.R.attr.inflatedId }, 0, 0);
mContainerId = a.getResourceId(0, 0);
a.recycle();
super.setOnTabChangedListener(this);
// If owner hasn't made its own …
Run Code Online (Sandbox Code Playgroud) Eclipse/Cygwin
NDK 8c
构建共享库
切换到armeabi-v7a后,我无法启动gdbserver.我在网上搜索了几个小时,但找不到专门处理armeabi-v7a调试问题的话题.
由于使用依赖于它的第三方库,我无法切换到armeabi-v7a.没有它,我会遇到这些错误:
D:\TEMP\ccnnGAqD.s:10427: Error: selected processor does not support Thumb mode `ldrex r6,[r3]'
D:\TEMP\ccnnGAqD.s:10429: Error: selected processor does not support Thumb mode `strex r4,r5,[r3]'
Run Code Online (Sandbox Code Playgroud)
使用此设置之前,使用'armeabi'之前一切正常:http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
我做的唯一更改是将其添加到Application.mk:
APP_ABI := armeabi-v7a
Run Code Online (Sandbox Code Playgroud)
在Android.mk共享库的最底部,我添加了这个:
$(info TARGET_ARCH = $(TARGET_ARCH))
$(info TARGET_ARCH_ABI = $(TARGET_ARCH_ABI))
$(info TARGET_ABI = $(TARGET_ABI))
Run Code Online (Sandbox Code Playgroud)
输出以下内容:
TARGET_ARCH = arm
TARGET_ARCH_ABI = armeabi-v7a
TARGET_ABI = android-14-armeabi-v7a
Run Code Online (Sandbox Code Playgroud)
我已经卸载了应用程序
adb uninstall com.example.game
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml确实有android:debuggable ="true"属性.
在Eclipse中完成"全部清理",并手动删除./libs和./obj文件夹.然后,ndk-build输出到右侧文件夹(obj/local/armeabi-v7a和libs/armeabi-v7a),并且obj/local/armeabi和libs/armeabi 不存在.
但是,这是我运行ndk-gdb时会发生的事情:
user@MACHINENAME /cygdrive/e/projects/game
$ ndk-gdb-eclipse --force --verbose
Android NDK installation path: /cygdrive/e/projects/sdks/android-ndk
Using default …
Run Code Online (Sandbox Code Playgroud) I've been porting a cross platform C++ engine to Android, and noticed that it will inexplicably (and inconsistently) block when calling pthread_mutex_lock. This engine has already been working for many years on several platforms, and the problematic code hasn't changed in years, so I doubt it's a deadlock or otherwise buggy code. It must be my port to Android..
So far there are several places in the code that block on pthread_mutex_lock. It isn't entirely reproducible either. When it …
我正在本机代码中执行一些位图动画,因此我需要每帧重绘 ImageView:
class MyImageView extends ImageView
{
...
protected void onDraw( Canvas canvas )
{
native_drawStuff( handle, canvas );
invalidate();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来一切都很好,除了 Traceview 显示了这一点:
我不了解你,但这似乎有点荒谬。native_drawStuff() 正在设置位图的每个像素,然后将位图绘制到画布上,而一个简单的 invalidate() 调用花费的时间几乎比这长 4 倍?位图也不小(RGBA_8888 和 50k 到 300k 像素之间的任何位置)。
鉴于我需要每帧重绘整个 ImageView,是否有更好的方法来做到这一点?我见过的对此的唯一建议是仅使需要重绘的视图部分无效,但就我而言,无论如何这就是整个事情。
假设我们正在构建一个共享库A,它需要链接到2个外部静态库B和C.你所拥有的只是libB.a和libC.a,以及它们的头文件.
这是libA的简化Android.mk:
LOCAL_LDLIBS := ../external/libB.a ../external/libC.a
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
AFAIK,链接共享库的工作方式是:
这会产生链接错误,因为B和C互相调用,特别是它们调用在步骤2中被删除的函数,因为A没有调用它们.
如果我们自己构建静态库,那么只需用LOCAL_WHOLE_STATIC_LIBRARIES替换LOCAL_STATIC_LIBRARIES就可以防止代码剥离(代码大小).在引擎盖下,它将--whole-archive传递给链接器.
由于我们没有构建B和C(甚至没有重建它们的源),有哪些选择?
我已经选择了1,因为它是第一个有用的东西,但显然它不是很好.我在问是否有更好的解决方案.
这个问题的答案(当使用Android NDK预构建静态和共享库时链接问题)让我想知道是否需要重新评估我的构建设置(链接到外部静态库的共享库).我无法在那里发表评论,所以我在这里问自己的问题.